Как программно отключить иерархическое отображение и убрать группы из списка при открытии формы в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с иерархическими справочниками в управляемых формах 1С (например, Контрагенты или Номенклатура) разработчики часто сталкиваются с ситуацией, когда при открытии формы выбора или формы списка необходимо показать исключительно элементы, срыв все папки. Однако установка отбора по реквизиту ЭтоГруппа = Ложь в параметрах открытия формы не приводит к ожидаемому результату — группы всё равно остаются в динамическом списке.

Рассмотрим подробно причины такого поведения платформы 1С:Предприятие 8.3 и разберем проверенные способы программного переключения режима отображения динамического списка.

Выясним причину поведения платформы

В управляемых формах динамический список иерархического справочника по умолчанию отображается в режиме Иерархический список или Дерево. В этих режимах платформа 1С принудительно сохраняет визуальное отображение родительских папок, чтобы не нарушать целостность древовидной структуры, даже если наложен отбор ЭтоГруппа = Ложь.

Чтобы группы полностью скрылись из таблицы динамического списка, режим просмотра необходимо программно переключить в плоский Список.

Способ 1. Программное переключение режима отображения таблицы

Режим просмотра динамического списка управляется не через свойства реквизита ДинамическийСписок, а через свойство элемента формы типа ТаблицаФормы. В модуле открываемой формы (в обработчике события ПриСозданииНаСервере) мы можем программно установить отображение в плоский список.

Проанализируем пример кода модуля управляемой формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Переключаем отображение таблицы формы в плоский список
    Элементы.Список.Отображение = ОтображениеТаблицы.Список;
    
КонецПроцедуры

В системном перечислении ОтображениеТаблицы доступно несколько вариантов отображения данных:

  1. ОтображениеТаблицы.Список — плоский список, в котором группы выравниваются вместе с элементами или скрываются установленным отбором ЭтоГруппа = Ложь.
  2. ОтображениеТаблицы.ИерархическийСписок — отображение элементов с учетом древовидной иерархии папок (по умолчанию).
  3. ОтображениеТаблицы.Дерево — представление данных в виде разворачиваемого дерева.

Способ 2. Передача параметра при открытии формы выбора

Рассмотрим вариант, когда форму выбора нужно открывать без групп только в отдельных сценариях. В этом случае при вызове ОткрытьФорму передаем собственный параметр, который затем анализируем при создании формы.

Код вызова формы из исходной обработки или документа:


ПараметрыВыбора = Новый Структура;

// Формируем стандартный отбор
Отбор = Новый Структура;
Отбор.Вставить("ЭтоГруппа", Ложь);
ПараметрыВыбора.Вставить("Отбор", Отбор);

// Передаем флаг для отключения иерархии
ПараметрыВыбора.Вставить("БезГрупп", Истина);

ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыВыбора, Элемент);

Код в модуле открываемой формы выбора (обработчик ПриСозданииНаСервере):


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем наличие нашего параметра
    Если Параметры.Свойство("БезГрупп") И Параметры.БезГрупп Тогда
        Элементы.Список.Отображение = ОтображениеТаблицы.Список;
    КонецЕсли;
    
КонецПроцедуры

Способ 3. Настройка формы при использовании метода ПолучитьФорму

Если в решении используется получение формы объекта перед её открытием (например, с помощью метода ПолучитьФорму), переключение режима отображения также выполняется через свойства элементов формы:


ПараметрыФормы = Новый Структура;
ФормаВыбора = ПолучитьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы, Элемент);

// Настраиваем элемент отбора компоновки данных
ЭлементОтбора = ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;

// Устанавливаем режим плоского списка для таблицы формы
ФормаВыбора.Элементы.Список.Отображение = ОтображениеТаблицы.Список;

ФормаВыбора.Открыть();

Важные нюансы и ограничения

При реализации управления отображением списка обратите внимание на следующие особенности:

  1. Сохранение пользовательских настроек: Режим просмотра таблицы (Список, ИерархическийСписок или Дерево) сохраняется платформой 1С в настройках пользователя. Если не устанавливать свойство Отображение программно при каждом вызове формы, платформа восстановит ранее сохраненный пользователем режим viewing.
  2. Потеря иерархической навигации: При установке свойства Отображение = ОтображениеТаблицы.Список интерактивный переход по папкам становится недоступен, так как все элементы выводятся на одном уровне.
  3. Произвольный запрос динамического списка: Если у списка включен произвольный запрос, условие ГДЕ НЕ Контрагенты.ЭтоГруппа на уровне текста запроса также исключает папки из выборки, но смену свойства Отображение таблицы формы все равно следует выполнять для корректного визуального отображения.
← На главную