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

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

При разработке конфигураций на платформе 1С:Предприятие 8 часто возникает задача ограничить выбор пользователя в форме подбора. Например, необходимо, чтобы при выборе номенклатуры пользователь видел и мог выбрать только группы, без возможности выбора конкретных элементов. Рассмотрим, как реализовать это программно с помощью управляемых форм.

Использование параметров при открытии формы

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

Разберем, как подготовить такой вызов:

Для начала сформируем структуру параметров, в которой укажем необходимые настройки. Ключевым элементом здесь является перечисление ИспользованиеГруппИЭлементов.


&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
    ПараметрыФормы = Новый Структура;
    // Указываем, что открываем форму в режиме выбора
    ПараметрыФормы.Вставить("РежимВыбора", Истина);
    // Отключаем множественный выбор, если он не требуется
    ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
    // Настраиваем отображение: разрешаем выбор только групп
    ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Группы);
    
    // Открываем форму с переданными параметрами
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры

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

Управление формой через объект Форма

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

Рассмотрим по шагам, как это реализовать:

  1. Получаем объект формы с помощью метода ПолучитьФорму.
  2. Обращаемся к элементу управления Список (динамический список на форме).
  3. Устанавливаем свойство ВыборГруппИЭлементов напрямую.
  4. Вызываем метод Открыть().

&НаКлиенте
Процедура КомандаОткрытьФормуВыбораЧерезОбъект(Команда)
    // Получаем форму справочника
    ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаВыбора");
    
    // Прямое обращение к элементу списка на форме
    ФормаВыбора.Элементы.Список.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы;
    
    // Открываем настроенную форму
    ФормаВыбора.Открыть();
КонецПроцедуры

Важные нюансы реализации

При работе с данными задачами проанализируем несколько важных моментов, которые помогут избежать распространенных ошибок:

1. Имя формы: При вызове ОткрытьФорму или ПолучитьФорму убедитесь, что вы указываете полное имя формы, включая путь к конфигурационному объекту. В управляемых приложениях это выглядит как Справочник.ИмяСправочника.Форма.ИмяФормы.

2. Иерархия: Если вы хотите, чтобы пользователь видел дерево групп, убедитесь, что в свойствах самого динамического списка формы включен режим отображения иерархии. Если иерархия отключена, список может отображаться как плоский список групп, что менее удобно для навигации.

3. Применение отбора: Если стандартный параметр ВыборГруппИЭлементов по каким-то причинам (например, из-за специфической логики в модуле формы) не дает желаемого результата, вы можете принудительно наложить отбор на Список через параметры:


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

Таким образом, мы рассмотрели два основных способа решения задачи программного открытия формы с ограничением выбора. Использование ОткрытьФорму с параметрами является «золотым стандартом» разработки, так как это позволяет сохранять код чистым и предсказуемым. Используйте эти инструменты в своих задачах, чтобы сделать интерфейс 1С более удобным и интуитивно понятным для конечного пользователя.

← На главную