ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).
Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.
Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.
Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.
Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений
, либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.
Создание таблицы значений
Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый
:
тз = Новый ТаблицаЗначений;
Колонки таблицы значений
Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:
Имя
— идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);Заголовок
— представление колонки в диалогах (может содержать произвольные символы);ТипЗначения
— тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;Ширина
— ширина колонки в диалогах;
Доступ к колонкам производится через свойство Колонки
объекта ТаблицаЗначений
. Для добавления новой колонки используется метод Добавить():
тз.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); тз.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); тз.Колонки.Добавить("Свойство");//можно хранить произвольные данные
Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():
найдКолонка = тз.Колонки.Найти("Наименование"); Если найдКолонка = Неопределено Тогда Сообщить("Колонка не найдена!"); КонецЕсли;
Перебор колонок выполняется следующим образом:
Для каждого Колонка Из тз.Колонки Цикл Сообщить(Колонка.Имя); КонецЦикла;
Для удаления колонки используется метод Удалить():
найдКолонка = тз.Колонки.Найти("Свойство"); Если НЕ найдКолонка = Неопределено Тогда тз.Колонки.Удалить(найдКолонка); КонецЕсли;
Свойства колонки таблицы значений
Имя | Тип | Описание |
---|---|---|
Имя | Строка | символьный идентификатор колонки, по которому к ней можно обращаться из кода |
Заголовок | Строка | строковое представление колонки на форме |
ТипЗначения | ОписаниеТипов | свойство органичивает пространство доступных значений, которые можно указать в данной колонке |
Ширина | Число | ширина колонки на форме (выражается в количестве символов) |
Методы коллекции колонок таблицы значений
Вставить() | Вставляет новую колонку в указанную позицию коллекции |
Добавить() | Добавляет новую колонку в конец коллекции |
Количество() | Возвращает количество колонок в коллекции |
Найти() | Ищет колонку в коллекции по имени |
Очистить() | Удаляет все колонки из коллекции |
Сдвинуть() | Сдвигает колонку влево или вправо |
Удалить() | Удаляет колонку из коллекции |
Строки таблицы значений
С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.
Добавление и удаление строк
Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений
. Метод возвращает объект СтрокаТаблицыЗначений
, с которым доступны дальнейшие манипуляции:
СтрокаТЧ = тз.Добавить();
И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:
СтрокаТЧ.Наименование = "Стул деревянный"; СтрокаТЧ.Количество = 1; СтрокаТЧ.Свойство = ТекущаяДата();
Обратите внимание, что каждая СтрокаТаблицыЗначений
ссылается на таблицу значений с помощью метода Владелец():
тз = СтрокаТЧ.Владелец();
Для удаления строки используется метод Удалить() объекта ТаблицаЗначений
. Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:
//непосредственное удаление строки тз.Удалить(СтрокаТЧ); //удаление строки по индексу тз.Удалить(тз.Индекс(СтрокаТЧ));
Перебор строк таблицы значений
Для перебора строк удобнее всего использовать оператор цикла Для Каждого
. В редких случаях оправдано применение цикла Для
:
Для Каждого СтрокаТЧ Из тз Цикл ИндСтроки = тз.Индекс(СтрокаТЧ); КонецЦикла; //в редких случаях Для ИндСтроки = 0 По тз.Количество() - 1 Цикл СтрокаТЧ = тз.Получить(ИндСТроки); КонецЦикла;
Поиск строк
В отличие от платформы 1С:Предприятие 7.7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):
//поиск первой строки НайдСтрока = тз.Найти(Номенклатура, "Номенклатура"); //поиск набора строк ПараметрыПоиска = Новый Структура("Номенклатура", Номенклатура); мНайдСтроки = тз.НайтиСтроки(ПараметрыПоиска);
Все методы таблицы значений:
Вставить() | Вставляет строку на указанное место |
ВыбратьСтроку() | Позволяет интерактивно выбрать строку в диалоговом окне |
ВыгрузитьКолонку() | Выгружает значения ячеек указанной колонки в массив значений |
Добавить() | Добавлет новую строку в таблицу значений |
ЗагрузитьКолонку() | Загружает значения в ячейки указанной колонки из массива |
ЗаполнитьЗначения() | Заполняет ячейки указанных колонок определенным значением |
Индекс() | Возвращает индекс строки таблицы значений |
Итог() | Возвращает просуммированный итог по колонке таблицы значений |
Количество() | Возвращает количество строк в таблице значений |
Найти() | Выполняет поиск строки по значению |
НайтиСтроки() | Выполняет поиск строк по указанным параметрам |
Очистить() | Очищает строки таблицы значений |
Получить() | Возвращает строку по ее индексу |
Свернуть() | Выполняет сжатие строк и колонок таблицы значений |
Сдвинуть() | Сдвигает строку вверх или вниз по таблице |
Скопировать() | Создает новую таблицу значений копированием текущей |
СкопироватьКолонки() | Создает новую пустую таблицу значений путем копирования колонок текущей таблицы |
Сортировать() | Выполняет сортировку строк таблицы значений по указанным колонкам |
Удалить() | Удаляет строку таблицы значений |
Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:
Читайте также:
- Как объединить таблицы значений
- Как программно выгрузить таблицу значений
- Как правильно загрузить значений в колонку таблицы значений из массива
Скажите, что такое «СтрокаТЧ»? Это такая переменная? Почему нигде про это не написано? Откуда взялось это выражение? Сам программист придумал это буквосочетание? Или если, скажем, заменить в нём одну любую букву на другую, оно работать уже не будет? Расскажите про это подробно. Что это такое?
«СтрокаТЧ» — это переменная (сокращенно от «Строка табличной части»). Все, что стоит слева от знака присваивания в 1с является переменной или реквизитом программного объекта. Переменные, операторы, процедуры и функции — базовые понятия любого языка программирования. Для общего понимания можете почитать материал по предыдущей версии платформы 1с 7.7. По 8-ке такого материала у меня на сайте, к сожалению, нет, но наверняка есть на просторах рунета.
Можно ли поменять строки и столбцы местами (транспонировать), то есть реквизиты указывать в строках а не в столбцах?
Интересное желание) Ни разу не встречалась такая необходимость. Тем не менее, отвечая на вопрос, могу сказать, что стандартного метода для этого нет.
Рекомендую для таких целей использовать многомерные массивы, например м[10][10]. Там нет ограничений на хранимые типы, а чтение\запись выглядят нагляднее…