Как открыть форму выбора справочника в управляемых формах 1С с установленной папкой (родителем)?

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

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

Вариант 1: Использование параметра «РодительВерхнегоУровня»

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

Разберем, как это реализовать. В событии НачалоВыбора поля ввода мы подготавливаем параметры и открываем форму:


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

Вариант 2: Установка «ТекущийРодитель» для свободного выбора

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

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


&НаКлиенте
Процедура ПолеСМСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Форма = ПолучитьФорму("Справочник.ШаблоныСМС.ФормаВыбора", , Элемент);
    Форма.Элементы.Список.ТекущийРодитель = СсылкаНаНужнуюГруппу;
    Форма.Открыть();
КонецПроцедуры

Анализ типичных ошибок

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

  1. Ошибка проверки типа: Ошибка возникает, если вы пытаетесь выполнить ЗначениеЗаполнено(Форма). Функция ЗначениеЗаполнено предназначена для ссылок, строк или чисел, а не для объекта УправляемаяФорма. Проверять нужно результат выбора, который возвращается после закрытия окна.
  2. Контекст модальности: Если вы используете ОткрытьМодально(), помните, что метод возвращает выбранное значение (ссылку). Именно этот результат и нужно проверять на заполненность.

Рассмотрим правильный подход при работе с модальным окном:


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

Рекомендации по реализации

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

← На главную