Примечание
Пример можно посмотреть в демонстрационной базе «Оформление списков», форма списка документа Накладная, команда Группировка. Это локальная команда этой формы.
Для группировки динамического списка мы также будем использовать локальную команду формы (листинг 3.89).
Листинг 3.89. Установка группировки
&НаКлиенте
Процедура Группировка(Команда)
СтруктураСписка = Список.КомпоновщикНастроек.Настройки.Структура;
Если СтруктураСписка.Количество() > 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Группировка уже задана. Команда не выполнена.";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
ГруппировкаСписка = СтруктураСписка.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ЭлементГруппировки = ГруппировкаСписка.ПоляГруппировки. Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("Поставщик");
Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);
КонецПроцедуры
Здесь, так же как и в случае с отбором, для простоты примера не будем выполнять никаких действий, если условия группировки уже заданы.
С помощью свойств компоновщика настроек динамического списка (Список.КомпоновщикНастроек.Настройки.Структура) мы получаем доступ к коллекции элементов структуры настроек компоновки данных. И проверяем, есть ли элементы в этой коллекции (листинг 3.90).
Листинг 3.90. Анализ имеющихся условий группировки
СтруктураСписка = Список.КомпоновщикНастроек.Настройки.Структура;
Если СтруктураСписка.Количество() > 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Группировка уже задана. Команда не выполнена.";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если условия группировки не заданы, добавим новый элемент группировки (листинг 3.91).
Листинг 3.91. Добавление нового элемента группировки
ГруппировкаСписка = СтруктураСписка.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ЭлементГруппировки = ГруппировкаСписка.ПоляГруппировки. Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
Сначала мы добавляем в коллекцию элементов структуры настроек компоновки данных элемент типа ГруппировкаКомпоновкиДанных.
Как и в случае с сортировкой, можно использовать автополя группировки, но мы добавим обычное поле, чтобы самостоятельно задать его значение.
В набор полей группировки добавляем элемент типа ПолеГруппировкиКомпоновкиДанных. Группировать список будем по значению поля Поставщик (листинг 3.92).
Листинг 3.92. Добавление поля, по которому будет осуществляться группировка
ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("Поставщик");
Дополнительно, для «красоты», укажем, что все группы списка должны быть свернуты. Для этого мы обратимся не к динамическому списку (реквизиту), а к таблице формы, которая этот динамический список отображает. Воспользуемся ее свойством НачальноеОтображениеДерева (листинг 3.93).
Листинг 3.93. Установка свойств таблицы
Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
У системного перечисления, которое мы использовали, есть еще и два других значения: РаскрыватьВерхнийУровень и РаскрыватьВсеУровни. При необходимости можно использовать их.
Платформа не предоставляет возможности как-либо скрывать/раскрывать отдельные группы сгруппированного динамического списка из встроенного языка. Это можно сделать только интерактивно.
В заключение загружаем измененные настройки обратно в компоновщик настроек динамического списка (листинг 3.94).
Листинг 3.94. Загрузка настроек в компоновщик настроек
Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);
Запустим конфигурацию в режиме 1С:Предприятие. Откроется список накладных, который стандартно представлен в виде линейного списка (рис. 3.108).

Рис. 3.108. Список без группировки
ПРИМЕЧАНИЕ
На рис. 3.108 показан список накладных без сортировки, которую мы программно установили в предыдущем примере. Для чистоты эксперимента мы удалили эту сортировку из настроек списка в режиме 1С:Предприятие.
После того как мы выполним команду Группировка, для каждого поставщика будет создана своя группа, в которой будут находиться документы этого поставщика. Все группы будут свернуты, за исключением той, в которой находится текущая строка списка (рис. 3.109).

Рис. 3.109. Группировка по поставщику
Если мы откроем настройку списка, то увидим, что появилось условие группировки (рис. 3.110).

Рис. 3.110. Группировка в настройках динамического списка
Это то самое условие, которое мы добавили из встроенного языка. Пользователь может его изменить, отключить, удалить.