Как в 1С 7.7 настроить выбор элемента справочника сразу из заданной группы?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

При заполнении реквизитов документов или справочников пользователям часто приходится выбирать элементы из одной и той же группы справочника (например, папки «Оптовые покупатели» в справочнике Контрагенты). Если по умолчанию окно выбора открывается в корневом каталоге, пользователю требуется совершать лишние клики для перехода в нужную ветку иерархии.

Разберем, как в платформе 1С:Предприятие 7.7 настроить форму так, чтобы при нажатии кнопки выбора («...») окно справочника сразу открывалось внутри нужной папки.

Принцип работы метода ИспользоватьРодителя()

Для управления текущим уровнем иерархии при выборе реквизита на форме в 1С 7.7 предусмотрен специальный метод элемента диалога ИспользоватьРодителя(). Синтаксис метода выглядит следующим образом:

Форма.<ИмяРеквизитаДиалога>.ИспользоватьРодителя(Группа, МожноИзменять);

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

  1. Группа — ссылка на найденный элемент справочника (группу). Важно помнить, что передавать текстовую строку с названием группы нельзя, платформа ожидает именно объектную ссылку.
  2. МожноИзменять (необязательный числовой параметр):
    • 1 (значение по умолчанию) — окно справочника откроется сразу внутри указанной папки, но пользователь при необходимости сможет подняться выше по дереву каталогов;
    • 0 — накладывается строгое ограничение: пользователь физически не сможет выйти за пределы заданной группы.

Вариант 1. Установка группы при открытии формы (рекомендуемый)

Рассмотрим самый простой и надежный способ. Настройку достаточно выполнить один раз при инициализации формы документа в предопределенной процедуре ПриОткрытии(). В этом случае при каждом последующем обращении к реквизиту окно выбора будет открываться в заданной группе.

Разберем по шагам реализацию в модуле формы документа:


Процедура ПриОткрытии()
    // Создаем объект для поиска необходимой группы
    СпрК = СоздатьОбъект("Справочник.Контрагенты");
    
    // Ищем нужную группу по наименованию (или по коду)
    Если СпрК.НайтиПоНаименованию("Оптовые покупатели", 0, 1) = 1 Тогда
        // Устанавливаем найденную группу в качестве родителя для элемента формы
        Форма.Контрагент.ИспользоватьРодителя(СпрК.ТекущийЭлемент(), 1);
    КонецЕсли;
КонецПроцедуры

Посмотрим на особенности поиска группы: третий параметр метода НайтиПоНаименованию(..., 0, 1) со значением 1 указывает на поиск по полному соответствию наименования. Вместо поиска по названию можно использовать поиск по коду с помощью НайтиПоКоду().

Вариант 2. Динамическая установка через ПриНачалеВыбораЗначения()

Если группа для выбора должна зависеть от других реквизитов документа (например, от выбранного типа договора или организации), установку родителя выполняют непосредственно в момент нажатия на кнопку выбора. Для этого используется предопределенная процедура ПриНачалеВыбораЗначения().

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

Посмотрим на пример правильной обработки события:


Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)
    Если ИдентЭлемДиалога = "Контрагент" Тогда
        // Находим нужную группу контрагентов
        СпрК = СоздатьОбъект("Справочник.Контрагенты");
        Если СпрК.НайтиПоНаименованию("Оптовые покупатели", 0, 1) = 1 Тогда
            Форма.Контрагент.ИспользоватьРодителя(СпрК.ТекущийЭлемент(), 1);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Важные замечания и рекомендации

  1. Многоуровневость справочника: метод ИспользоватьРодителя() поддерживается только теми справочниками, для которых в конфигураторе установлено количество уровней иерархии более 1.
  2. Отказ от жесткого кодирования (hardcode): поиск группы по строковому литералу вроде "Оптовые покупатели" уязвим к переименованию папок пользователями. Рекомендуется хранить ссылку на основную группу в константах конфигурации или в дополнительных реквизитах настроек пользователя.
← На главную