Как в поле ввода 1С настроить выбор только родительских элементов (групп)

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

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

Способ 1. Использование свойства «Выбор групп и элементов» в конфигураторе

Это самый быстрый и правильный способ, если логика выбора статична и не меняется в зависимости от условий. Однако начинающие разработчики часто не могут найти это свойство, так как ищут его не в том месте. Разберем по шагам, где оно находится.

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

  1. Откроем форму нужного документа или обработки в конфигураторе.
  2. Перейдем на закладку «Элементы» (дерево элементов формы).
  3. Выделим конкретное поле ввода, связанное с нашим иерархическим справочником.
  4. В окне «Свойства» (справа) найдем раздел «Использование».
  5. Найдем пункт «Выбор групп и элементов».
  6. Установим значение «Группы».

Проанализируем доступные варианты этого свойства:

Способ 2. Программная установка свойства формы

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

Оптимальным местом для такой настройки является серверная процедура ПриСозданииНаСервере. Рассмотрим код:


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

Здесь мы обращаемся к коллекции Элементы и перечислению ИспользованиеГруппИЭлементов. Этот метод гарантирует, что настройка применится при открытии формы.

Способ 3. Использование «Параметров выбора» для фильтрации списка

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

Проанализируем ситуацию: свойство «Выбор групп и элементов» лишь блокирует выбор, но список может по-прежнему содержать элементы. Чтобы их скрыть, добавим отбор по системному реквизиту ЭтоГруппа.

  1. В свойствах того же поля ввода найдем пункт «Параметры выбора».
  2. Нажмем на кнопку с многоточием.
  3. Добавим новый параметр. В колонке «Имя параметра» выберем Отбор.ЭтоГруппа, а в колонке «Значение» укажем Истина.

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

Способ 4. Учет типа иерархии справочника

Выясним важный технический нюанс: в 1С существует два типа иерархии справочников. От этого зависит, как будут работать вышеописанные методы.

  1. Иерархия групп и элементов: Это классическая структура с «папками» и «листьями». Здесь ЭтоГруппа = Истина работает корректно.
  2. Иерархия элементов: В такой структуре «папок» не существует, родителем является такой же элемент справочника. В этом случае свойство ВыборГруппИЭлементов.Группы может не сработать так, как ожидается, потому что технически все объекты — элементы.

Если мы работаем с иерархией элементов, нам придется использовать отбор по условию Родитель = Справочники.ИмяСправочника.ПустаяСсылка(), чтобы показать только верхний уровень иерархии (корневых родителей).

Способ 5. Реализация через событие «НачалоВыбора»

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


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

Способ 6. Применение расширений конфигурации

Если вы работаете с типовой конфигурацией (например, 1С:Бухгалтерия или 1С:ERP), которую нельзя снимать с поддержки, оптимальным решением будет использование расширений. Это позволяет избежать «тяжелых» изменений в основной конфигурации.

Посмотрим, как это сделать правильно:

Использование расширений — это современный стандарт разработки в среде 1С, который позволяет сохранять возможность легкого обновления программы при сохранении всех пользовательских доработок.

← На главную