Как ограничить видимость элементов в выпадающем списке на управляемой форме 1С?

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

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

Вариант 1: Использование свойства СписокВыбора

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

Для реализации этого метода выполните следующие шаги:

  1. В свойствах поля ввода установите РежимВыбораИзСписка в значение Истина. Это критически важно, так как без этого режима элемент будет пытаться отобразить все стандартные значения типа данных, а не ваш сформированный список.
  2. В процедуре обработки события ПриИзменении того элемента, который управляет составом списка (например, «ТипЭлектрода»), очистите текущий список и заполните его заново.

Рассмотрим пример кода для реализации такой логики:


&НаКлиенте
Процедура ТипЭлектродаПриИзменении(Элемент)
    Элементы.ТипПроводника.СписокВыбора.Очистить();
    
    Если ТипЭлектрода = ПредопределенноеЗначение("Перечисление.ТипЭлектрода.Электрод1") Тогда
        Элементы.ТипПроводника.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ТипПроводника.Нет"));
        Элементы.ТипПроводника.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ТипПроводника.СПроводником1"));
    Иначе
        Элементы.ТипПроводника.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ТипПроводника.Нет"));
        Элементы.ТипПроводника.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ТипПроводника.СКабелем1"));
    КонецЕсли;
КонецПроцедуры

Вариант 2: Использование модуля менеджера для справочных данных

Если ваши данные хранятся не в перечислениях, а в справочниках, или если логика отбора слишком сложна для простого перечисления, стоит воспользоваться механизмом ОбработкаПолученияДанныхВыбора в модуле менеджера объекта. Это позволяет фильтровать данные на уровне платформы.

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


Процедура ЗаполнитьСписокВыбора(СписокВыбора)
    СписокВыбора.Очистить();
    Отбор = Новый Структура("ВидДоговора", ПараметрОтбора);
    ДоступныеЗначения = Перечисления.ВидыДоговоров.ПолучитьДанныеВыбора(Новый Структура("Отбор", Отбор));
    
    Для каждого ЭлементСписка из ДоступныеЗначения Цикл
        СписокВыбора.Добавить(ЭлементСписка.Значение);
    КонецЦикла;
КонецПроцедуры

Важные замечания по настройке

При реализации выпадающих списков пользователи часто сталкиваются с появлением лишних элементов интерфейса, таких как кнопка «Добавить» или возможность ручного ввода, что может быть нежелательно. Чтобы управление списком было строгим, обратите внимание на следующие параметры элемента формы:

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

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

← На главную