Продолжим изучать методы работы с таблицами значений. В предыдущей статье мы научились работать с поиском по таблице значений, а также копировать таблицы значений.
Методы таблиц значений 1С 8.3. Часть 1. Поиск и копирование.
В этой статье мы научимся сортировать, получать итоги и сворачивать таблицу значений.
Сортировка таблицы значений 1С
Сортировка таблицы значений 1С осуществляется при помощи метода Сортировать, этот метод является процедурой, выполнение которой изменяет порядок строк в таблице значений. Данный метод имеет следующий синтаксис.
Сортировать(Колонки, ОбъектСравнения)
Где:
Колонки – обязательный параметр, который имеет тип Строка, в этой строке должны быть перечислены колонки таблицы значений, по которым осуществляется сортировка. После названия колонки можно указывать направление сортировки: или «Убыв», тогда сортировка осуществляется по убыванию, или «Возр», в этом случае сортировка будет по возрастанию. Если не указать направление сортировки, то сортировка будет по возрастанию. Можно перечислять несколько колонок, тогда таблица значений будет отсортирована сначала по первой указанной колонке, потом строки с одинаковым значением в первой колонке будут отсортированы по второй колонке и т.д.
ОбъектСравнения — необязательный параметр, в него передается переменная с типом СравнениеЗначений. Этот параметр необходимо применять, когда в сортируемых колонках содержатся значения не примитивных типов. Если этот параметр не указан, то элементы не примитивных типов сравниваются по своему строковому представлению. Если же он указан, то они сравниваются по следующим правилам:
- Объекты сравниваются по идентификатору
- Моменты времени сравниваются по дате и идентификатору объекта
- Если есть элементы с разными типами, то они сравниваются по коду типа
- Элементы остальных типов сравниваются по строковому представлению
Рассмотрим работу этого метода без второго параметра.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«ФИО»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
ТЗ.Колонки.Добавить(«Оклад»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Иванов И.И»;
НСтр.ДатаРождения = Дата(1985,1,15);
НСтр.Оклад = 2000;
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Петров П.С»;
НСтр.ДатаРождения = Дата(1984,5,25);
НСтр.Оклад = 1000;
//третья строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Тарасов К.В»;
НСтр.ДатаРождения = Дата(1987,6,11);
НСтр.Оклад = 2000;
//сортируем по окладу и дате рождения (убывание)
ТЗ.Сортировать(«Оклад,ДатаРождения УБЫВ»);
В этом коде мы отсортировали таблицу по окладу, поскольку название колонки было без указания направления, то сортировка осуществлялась по возрастанию. И вторая колонка для сортировки это дата рождения, здесь мы указали направление сортировки – по убыванию.
Посмотрим в отладке, какая таблица значений была до сортировки.
И после сортировки.
Итоги таблицы значений 1С
При работе с таблицей значений можно получить общий итог по какой-то колонке. Это осуществляется при помощи метода Итог. Этот метод является функцией, которая возвращает сумму значений определенной колонки всех строк таблицы. У этого метода следующий синтаксис:
Итог(Колонка)
Где: Колонка – это колонка, по которой будут просуммированы значения всех строк. Обычно данный метод применяется к колонкам, в которых содержатся значения с типом число.
Рассмотрим пример:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«ФИО»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
ТЗ.Колонки.Добавить(«Зарплата»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Иванов И.И»;
НСтр.ДатаРождения = Дата(1985,1,15);
НСтр.Зарплата = 2000;
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Петров П.С»;
НСтр.ДатаРождения = Дата(1984,5,25);
НСтр.Зарплата = 5000;
//третья строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Тарасов К.В»;
НСтр.ДатаРождения = Дата(1987,6,11);
НСтр.Зарплата = 3000;
//итог по зарплатам
Общая = ТЗ.Итог(«Зарплата»);
Посмотрим, какой итог получился по указанной колонке.
Свернуть таблицу значений 1С
Рассмотрим еще один метод, который очень полезен при работе с таблицами значений. Метод Свернуть сворачивает используемую таблицу значений по значениям одной или нескольких колонок. Данный метод является процедурой, которая изменяет текущую таблицу значений.
Рассмотрим синтаксис этого метода
Свернуть(КолонкиГруппы, КолонкиСуммы)
Где:
КолонкиГруппы – колонки, по которым будет свернута таблица значений. Это обязательный параметр типа строка, в котором нужные колонки должны быть перечислены через запятую.
КолонкиСуммы – колонки, значения по которым будут просуммированы (необязательный параметр).
Причем, обратите внимание, после применения метода, в измененной таблице значений останутся только колонки группы и колонки суммы, остальные колонки, те, что были до свертки, будут удалены и информация в них потеряется!
Данный метод производит свертку таблицы значений: значения в колонках, которые перечисленные в первом параметре (КолонкиГруппы) будут сгруппированы, а значения в колонках, которые перечислены во втором параметре (КолонкиСуммы) будут просуммированы. Одна и та же колонка не может быть указанна и в первом параметр, и во втором.
Рассмотрим пример: в таблице значений будут следующие колонки: ФИО, Вид работ , сумма выданных средств и дополнительная информация (аванс, «окончаловка» и т.п.), свернем эту таблицу значений по колонкам ФИО и Вид работ, и просуммируем колонку «Сумма».
ТабВыплат = Новый ТаблицаЗначений;
ТабВыплат.Колонки.Добавить(«ФИО»);
ТабВыплат.Колонки.Добавить(«ВидРабот»);
ТабВыплат.Колонки.Добавить(«Сумма»);
ТабВыплат.Колонки.Добавить(«Причина»);
//первая строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Иванов»;
НовВыплата.ВидРабот = «Отделка»;
НовВыплата.Сумма = 1000;
НовВыплата.Причина = «Аванс»;
//вторая строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Иванов»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 1500;
НовВыплата.Причина = «Расчет»;
//третья строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Иванов»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 500;
НовВыплата.Причина = «аванс»;
//четверта строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Петров»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 500;
НовВыплата.Причина = «аванс»;
//пятая строка
НовВыплата = ТабВыплат.Добавить();
НовВыплата.ФИО = «Петров»;
НовВыплата.ВидРабот = «Монтаж»;
НовВыплата.Сумма = 1500;
НовВыплата.Причина = «Расчет»;
//свертка
ТабВыплат.Свернуть(«ФИО,ВидРабот»,«Сумма»);
Посмотрим в отладке, что было до свертки.
И после свертки
Как видите, произошла группировка по колонкам ФИО и ВидРабот, а значения в колонке Сумма просуммировались, причем колонка Причина была удалена и информация в ней пропала.
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект.
Более подробно и основательно работа с таблицей значений в дается в моей книге:
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
Спасибо за статью!
Круто!