Как настроить отбор в списке «Контактные лица» по контрагенту в документе «Заказ покупателя»?

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

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

Шаг 1: Подготовка запроса динамического списка

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

Внесем параметр &Контрагент в запрос динамического списка:


ВЫБРАТЬ РАЗЛИЧНЫЕ
    СвязиКонтрагентКонтактСрезПоследних.Контакт КАК Контакт,
    ИСТИНА КАК ЕстьКонтрагент
ПОМЕСТИТЬ СвязиКонтрагентКонтакт
ИЗ
    РегистрСведений.СвязиКонтрагентКонтакт.СрезПоследних КАК СвязиКонтрагентКонтактСрезПоследних
ГДЕ
    СвязиКонтрагентКонтактСрезПоследних.СвязьНедействительна = ЛОЖЬ
    И СвязиКонтрагентКонтактСрезПоследних.Контрагент = &Контрагент;

Важно убедиться, что параметр &Контрагент доступен для динамического списка. В типовых конфигурациях на базе БСП (Библиотека Стандартных Подсистем) рекомендуется использовать механизм передачи параметров через Список.Параметры.

Шаг 2: Реализация события «Начало выбора» в документе

Чтобы при нажатии на кнопку выбора в поле «Контактное лицо» открывалась форма с нужным фильтром, нам нужно перехватить событие НачалоВыбора в модуле формы документа.


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

Шаг 3: Настройка формы списка (ПриСозданииНаСервере)

Самый ответственный этап — это правильная установка параметра в форме списка. В типовых конфигурациях (например, УНФ) часто работают механизмы сохранения настроек пользователя, которые могут сбрасывать ваши установки. Поэтому используйте проверенные методы БСП.

В процедуре ПриСозданииНаСервере формы списка реализуем установку параметра:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // ... стандартный код БСП ...
    
    // Устанавливаем переданный параметр в запрос динамического списка
    Если Параметры.Свойство("Контрагент") Тогда
        Список.Параметры.УстановитьЗначениеПараметра("Контрагент", Параметры.Контрагент);
    КонецЕсли;

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

Почему это может не работать сразу?

Разберем типичные ошибки, которые мешают корректной работе отбора:

  1. Конфликт настроек: Если в конфигурации настроено сохранение вариантов отчетов или настроек формы, ваш программный отбор может затираться при восстановлении настроек пользователя. Используйте метод ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка — он надежно работает с иерархией настроек БСП.
  2. Доступность полей: Проверьте в конфигураторе, добавлено ли поле «Контрагент» в состав доступных полей динамического списка. Если поле отсутствует в выборке запроса, установка отбора по нему вызовет ошибку или будет проигнорирована.
  3. Кэширование формы: Платформа 1С кэширует формы. Если форма открывается повторно, событие ПриСозданииНаСервере может не вызываться. В этом случае логику обновления отбора лучше перенести в ПриПовторномОткрытии.

Рекомендации по доработке

Для обеспечения стабильности работы в будущем, старайтесь не менять напрямую типовые процедуры. Лучше использовать Расширения конфигурации. Если вы работаете в УНФ или УТ, попробуйте максимально использовать стандартный справочник Партнеры, так как именно он является связующим звеном между контрагентами и контактными лицами в современной архитектуре 1С. Использование левых регистров сведений для связей — это «велосипед», который в долгосрочной перспективе может усложнить обновление конфигурации.

← На главную