Содержание:
2. Синтакcис при работе с Таблицей значений - примеры
1. Коллекции значений
Язык программирования 1С имеет в своем функционале несколько универсальных коллекций значений. Эти коллекции значений позволяют хранить и обрабатывать данные различных типов. Одной из наиболее полных и функциональных коллекций является Таблица значений переменных. ТЗ - объект, с помощью которого можно хранить и обрабатывать данные в виде таблицы, т.о. колонки являются коллекцией значений, а строки - коллекцией колонок. Таблица значений выражений храниться в оперативной памяти, т.е. она существует на время исполнения программного кода. Для того чтобы сохранения данных в базу нужно использовать другие объекты (табличные части объектов, различные регистры и т.д.)
Функции таблицы значений:
· При работе с табличными частями документов, справочников;
· Результат запроса можно выгрузить в ТЗ;
· При выводе табличных данных на форму;
· Во всех остальных случаях, когда необходимо поместить данные в таблицу и обработать их.
НО! Важно знать, что в тип ТаблицаЗначений определен только на сервере. Это значит, что Таблицу значений величин нельзя создавать на клиенте, а также ее нельзя передавать на клиент с сервера.
Рис. 1. Ошибка при попытке создания Таблицы значений на клиенте
Примечание: Для того, чтобы записать Таблицу значений на клиент, необходимо перевести ее в Массив (одномерная коллекция значений, с более простой структурой).
2. Синтаксис при работе с Таблицей значений - примеры
Рис. 2. Структура дерева разделов Синтаксис-помощника
1. Создание (инициализация) Таблицы значений.
1.1. Для того, чтобы построить таблицу значений нужно воспользоваться конструктор Новый:
ТЗ = Новый ТаблицаЗначений;
Т.о., в переменной ТЗ присвоиться пустая таблица, не имеющая структуры;
1.2. Чтобы задать структуру таблицы значений выражений необходимо создать колонки:
ТЗ.Колонки.Добавить(<Имя>, <Тип>, <Заголовок>, <Ширина>);
Например,
ТЗ.Колонки.Добавить(«Груз», , «Вид груза»);
ТЗ.Колонки.Добавить(«Вес»);
ТЗ.Колонки.Добавить(«Цена», , «Цена (груза));
В первом параметре задается имя колонки, для обращения к ней в коде программы, во 2м – тип значений колонки, в 3м – заголовок, который будет представлен в режиме Предприятия, в 4м – ширина колонки.
Если необходимо задать тип колонки явным образом, то использовать нужно объект ОписаниеТипов:
МассивТ = Новый Массив;
МассивТ.Добавить(Тип("СправочникСсылка.ВидыГрузов"));
МассивТ.Добавить(Тип("Число"));
ПараметрыЧ = Новый КвалификаторыЧисла(10,3);
ТЗ.Колонки.Добавить(«Груз», Новый ОписаниеТипов(МассивТ, , ПараметрыЧисла), «Вид груза»);
ТЗ.Колонки.Добавить(«Вес», Новый ОписаниеТипов(МассивТ, , ПараметрыЧ));
Имеется возможность вставить новую колонку в любое место таблицы методом:
ТЗ.Колонки.Вставить(<Индекс>, <ИмяКол>, <Тип>, <ЗаголовокКол>, <ШиринаКол>)
Рис. 3. Описание объекта встроенного языка Таблица значений в Синтаксис-помощнике «Cntr + F1»
1.3. Т.к. Таблица значений в виде коллекции строк, то и добавлять каждую новую строку нужно методом «Добавить()», обращаясь к ТЗ как к коллекции:
НовСтрока = ТЗ.Добавить(); – Добавить в конец таблицы;
НовСтрока = ТЗ.Вставить(<Индекс>); – Вставить строку в нужное место, по указанному индексу.
1.4. Если нужно не формировать новую, а получить ТЗ из другой, подобной, т.е. скопировать, то можно воспользоваться методом Скопировать():
НоваяТЗ = ТЗ.Скопировать(ПарамОтбора, «СписокКолонок»);
Где ПарамОтбора – Структура, ключ которой равен имени колонки, а значение – отбираемому значению. Список колонок –колонки, которые нужно скопировать, перечисленне через запятую. «Кол1, Кол2, …»
Копирование всей ТЗ, полностью:
НоваяТЗ = ТЗ.Скопировать();
1.5. Создать ТЗ также можно, выгрузив результат запроса:
ТЗ = Запрос.Выполнить().Выгрузить();
Рис. 4. Пример создания ТЗ в коде модуля
2. Работа со строками таблицы значений
2.1. Для обхода строк в примере с таблицей значений используется оператор «Для каждого …Из…Цикл»:
Для Каждого СтрокаТЗ Из ТЗ Цикл
//обработка строки таблицы
КонецЦикла;
Для обращения к конкретной строке нужно использовать оператор []
ТЗ[2].Количество = 500;
2.2. Количество строк ТЗ определяется методом Количество()
КолвоСтрок = ТЗ.Количество();
2.3. Строки можно отсортировать методом Сортировать():
ТЗ.Сортировать(«Колонки»);
Колонки – список колонок, по которым нужно отсортировать, указанные в порядке сортировки:
ТЗ.Сортировать(«Номенклатура,Цена»);
2.4. Есть возможность очистить всю таблицу методом Очистить()
ТЗ.Очистить();
2.5. Удалить можно не только все строки, но и одну - метод Удалить(<Индекс>)
ТЗ.Удалить(2);
2.6. Стоит сказать об одном удобном инструменте. Если необходимо отобрать строки в результате таблице значений, по определенному условию:
СтрокаТЗ = ТЗ.Найти(<Значение>, <Колонки>);
Значение – по которому осуществляется отбор, Колонки – те, в которых необходимо искать значение. Если параметр отсутствует – то поиск осуществляется по всей таблице.
ИЛИ СтрокиТЗ = ТЗ.НайтиСтроки(<ПараметрыОтбора>);
ПараметрыОтбора – структура отбора (ключ – имя колонки, значение – искомое значение).
Важно! Данный метод возвращает массив строк таблицы значений переменных, в котором хранятся ссылки на строки, т.е. если изменяться строки в самой ТЗ, то изменяться и строки массива.
2.7. Для того чтобы свернуть строки по повторяющимся значениям (аналогично группировке в запросе) необходимо использовать соответствующий метод:
ТЗ.Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>);
Где – КолонкиГруппировок –колонки (список через запятую), те, по значениям которых нужно свернуть ТЗ, КолонкиСуммирования – те колонки, значения котроых нужно суммировать.
2.8. Важной особенностью выводов таблицы значений является возможность просуммировать значения в конкретной колонке. Для этого служить Метод Итог():
ПодвалКолонки = ТЗ.Итог(<ИмяКолонки>);
3. Значения Таблицы значений при отладке
При отладке программы иногда очень удобно посмотреть значения, которые сформированы на текущем шаге отладки используя таблицу значений. Для этого достаточно выделить идентификатор таблицы значений и нажать на пиктограмму «Вычислить выражение» в панели действий главного меню (или воспользоваться комбинацией клавиш Shift + F9).
Рис. 5. Значения таблицы значений при нажатии на копку «Вычислить выражение»
Специалист компании «Кодерлайн»
Марина Анапольская