Почему в форме выбора справочника автоматически устанавливается отбор и как его настроить?

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

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

Механизм платформы: параметры выбора и связи параметров выбора

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

Проанализируем две основные настройки, отвечающие за такое поведение:

  1. Параметры выбора (ChoiceParameters): статическое ограничение, задающее фиксированные значения реквизитов выбираемого объекта. Например, отбор вида Отбор.ВидДоговора(ЗначениеПеречисления).
  2. Связи параметров выбора (ChoiceParameterLinks): динамическое ограничение, связывающее реквизит выбираемого объекта с другим реквизитом текущего документа или формы. Классический пример — ограничение договоров по владельцу: Отбор.Владелец связывается с реквизитом Контрагент.

Где искать настройки в конфигураторе

Выясним причину появления невидимого в коде отбора. Для этого проверим два ключевых места в дереве метаданных конфигурации:

  1. Свойства реквизита объекта метаданных: открываем свойства реквизита документа (например, реквизит ДоговорКонтрагента документа РеализацияТоваровИУслуг). В палитре свойств находим пункт Параметры выбора. Если там задано условие вида Отбор.ВидДоговора(Перечисление.ВидыДоговоровКонтрагентов.Покупатель), платформа будет автоматически передавать этот фильтр в форму выбора и при вводе по строке.
  2. Свойства элемента формы: открываем форму документа и выбираем элемент управления (поле ввода), связанный с реквизитом. На уровне элемента формы также присутствуют свойства Параметры выбора и Связи параметров выбора. Настройки элемента управления могут дополнять или переопределять параметры, заданные в самом объекте метаданных.

Особенности работы динамического списка с параметрами выбора

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

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

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

Способы решения и переопределения отбора

Если для бизнес-процесса требуется дать пользователю возможность выбрать договор другого вида, рассмотрим доступные варианты изменения логики.

Вариант 1. Изменение свойств в конфигураторе или расширении

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

Вариант 2. Программное управление параметрами выбора элемента

Мы можем изменить состав параметров программно в модуле формы документа при инициализации. Разберем пример в обработчике ПриСозданииНаСервере:


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

Вариант 3. Переопределение открытия формы в событии «НачалоВыбора»

Если требуется гибкое управление условиями (например, при определенных условиях разрешать выбор любых договоров), используем обработчик события НачалоВыбора поля ввода:


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

Важное замечание о бизнес-логике типовых конфигураций

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

← На главную