В процессе разработки на платформе 1С:Предприятие 8.3 многие начинающие (и даже опытные) специалисты сталкиваются с ситуацией, когда установка свойства ВыборГруппИЭлементов в значение Элементы не дает ожидаемого визуального результата. Пользователь по-прежнему видит иерархическую структуру справочника с папками, хотя цель была — оставить только конечные элементы для выбора. В этой статье мы подробно разберем, как работает этот механизм, почему он не является фильтром и какими способами можно действительно скрыть группы в форме выбора.
Первое, что нам необходимо понять: свойство «Выбор групп и элементов» — это механизм валидации (проверки), а не фильтрации отображения. Рассмотрим подробнее, что происходит на уровне платформы, когда мы устанавливаем это свойство:
Элементы, платформа просто не позволит форме выбора вернуть группу (папку) в вызывающее поле. При попытке выбора группы кнопка «Выбрать» будет неактивна, либо система выдаст предупреждение.Таким образом, если ваша задача — полностью убрать папки из формы выбора, одного этого свойства недостаточно. Нам нужно воздействовать на ДинамическийСписок, который является источником данных для формы.
Проанализируем самый эффективный и правильный способ решения задачи. Если мы хотим видеть только элементы, нам нужно перевести таблицу формы в режим списка и наложить программный фильтр на поле ЭтоГруппа. Рассмотрим по шагам, как это реализовать при открытии формы выбора.
Для начала нам нужно правильно подготовить параметры открытия формы. Посмотрим на пример кода, который можно использовать в модуле формы документа или обработки:
ПараметрыОткрытия = Новый Структура;
// Создаем структуру отбора, чтобы исключить группы
Отбор = Новый Структура;
Отбор.Вставить("ЭтоГруппа", Ложь);
ПараметрыОткрытия.Вставить("Отбор", Отбор);
// Указываем режим выбора
ПараметрыОткрытия.Вставить("РежимВыбора", Истина);
// Открываем форму выбора справочника "Товары"
ФормаВыбора = ПолучитьФорму("Справочник.Товары.ФормаВыбора", ПараметрыОткрытия, Элементы.НужноеПоле);
// Важный момент: принудительно устанавливаем режим отображения "Список"
ФормаВыбора.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
ФормаВыбора.Открыть();
Почему важно устанавливать ОтображениеТаблицы.Список? Если оставить режим «Дерево» или «Иерархический список», то даже при отборе ЭтоГруппа = Ложь структура может выглядеть некорректно. В иерархических моделях данные требуют отображения «родителей». Переключение в плоский список полностью решает проблему «пустых папок».
Существует более «хитрый» метод, который позволяет скрыть группы, даже если вы не хотите менять программный код открытия формы. Мы можем воспользоваться механизмом Условного оформления динамического списка. Этот метод хорош тем, что его можно настроить прямо в конфигураторе или в пользовательском режиме.
Выясним алгоритм настройки:
Список).УсловноеОформление.Видимость в значение Ложь.ЭтоГруппа со значением Равно Истина.Важное примечание: Использование этого метода может привести к тому, что элементы в иерархическом режиме будут выглядеть «оторванными» от структуры, так как их родители станут невидимыми. Поэтому данный метод рекомендуется сочетать с отключением иерархии.
Если справочник, с которым мы работаем, содержит небольшое количество записей (например, виды номенклатуры или категории), рассмотрим использование свойства БыстрыйВыбор (Fast Choice).
Проанализируем преимущества этого подхода:
ВыборГруппИЭлементов отрабатывает максимально корректно, сразу исключая группы из перечня доступных позиций.Чтобы включить этот режим, достаточно найти в свойствах поля формы или в свойствах реквизита объекта в конфигураторе галочку «Быстрый выбор».
Проанализируем ситуацию, описанную в сообщениях форума. Пользователь жаловался, что программный отбор не срабатывает. Это часто случается, если разработчик пытается установить отбор на уровне метаданных, который перекрывается настройками самой формы.
Критически важно помнить: Настройка на уровне метаданных реквизита (в дереве конфигурации) является приоритетной. Если вы установите «Выбор групп и элементов» там, платформа автоматически будет применять это правило ко всем создаваемым формам. Однако это все равно останется правилом выбора, а не видимости.
Также стоит упомянуть особенности для мобильной платформы. На мобильных клиентах поведение этого свойства может игнорироваться, если форма выбора не является стандартной (кастомной). В таких случаях единственным надежным способом остается жесткий программный отбор в динамическом списке через КомпоновщикНастроек в обработчике ПриСозданииНаСервере.
Для достижения результата, когда в форме выбора отображаются только элементы без папок, выполним следующие действия:
ВыборГруппИЭлементов установлено в значение Элементы (для запрета выбора папок).Список (вместо Иерархия).ЭтоГруппа = Ложь на динамический список формы.Такой комплексный подход гарантирует понятный интерфейс для пользователя и отсутствие ошибок при вводе данных в систему.