При разработке и сопровождении конфигураций на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией: пользователь открывает форму выбора справочника (например, ДоговорыКонтрагентов из документа РеализацияТоваровИУслуг), а в динамическом списке уже жестко установлен фильтр (к примеру, Вид договора = С покупателем). При этом в модулях формы или менеджера нет ни строчки кода, устанавливающей данный отбор. Разберем по шагам, почему платформа накладывает такие ограничения и где именно они настраиваются.
Если в коде конфигурации отсутствует явная установка отбора динамического списка через свойства Отбор или передачу структуры отбора в параметры открытия формы, значит, задействован декларативный механизм платформы. Платформа 1С позволяет жестко или динамически ограничивать список доступных для выбора значений прямо в метаданных и свойствах элементов формы.
Проанализируем две основные настройки, отвечающие за такое поведение:
Отбор.ВидДоговора(ЗначениеПеречисления).Отбор.Владелец связывается с реквизитом Контрагент.Выясним причину появления невидимого в коде отбора. Для этого проверим два ключевых места в дереве метаданных конфигурации:
ДоговорКонтрагента документа РеализацияТоваровИУслуг). В палитре свойств находим пункт Параметры выбора. Если там задано условие вида Отбор.ВидДоговора(Перечисление.ВидыДоговоровКонтрагентов.Покупатель), платформа будет автоматически передавать этот фильтр в форму выбора и при вводе по строке.Рассмотрим, как платформа обрабатывает переданные параметры выбора при открытии автоматически генерируемой формы:
Жесткая фиксация фильтра: значения, переданные через параметры выбора, накладываются платформой в динамический список как фиксированные настройки. В автоматической форме выбора пользователь не может отключить такой отбор стандартной кнопкой или через меню настройки списка, так как он заблокирован на уровне платформенного механизма.
Влияние на ввод по строке и быстрый выбор: эти параметры ограничивают не только интерактивную форму списка при нажатии кнопки выбора, но и автоподбор при наборе названия договора с клавиатуры, а также выпадающий список быстрого выбора.
Если для бизнес-процесса требуется дать пользователю возможность выбрать договор другого вида, рассмотрим доступные варианты изменения логики.
Вариант 1. Изменение свойств в конфигураторе или расширении
Если конфигурация находится на поддержке с возможностью изменения или доработка выполняется через расширение, перейдем в свойства реквизита документа либо элемента управляемой формы и очистим (или скорректируем) условие в строке Параметры выбора.
Вариант 2. Программное управление параметрами выбора элемента
Мы можем изменить состав параметров программно в модуле формы документа при инициализации. Разберем пример в обработчике ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Очищаем жестко заданные параметры выбора элемента формы
МассивПараметров = Новый Массив;
Элементы.ДоговорКонтрагента.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
Вариант 3. Переопределение открытия формы в событии «НачалоВыбора»
Если требуется гибкое управление условиями (например, при определенных условиях разрешать выбор любых договоров), используем обработчик события НачалоВыбора поля ввода:
&НаКлиенте
Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Отменяем стандартное открытие формы выбора с платформенными фильтрами
СтандартнаяОбработка = Ложь;
// Формируем собственные параметры открытия формы
ПараметрыФормы = Новый Структура;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Владелец", Объект.Контрагент);
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Проанализируем последствия отключения таких отборов в типовых конфигурациях. Фильтрация договоров по виду (например, только договоры с покупателем в документах реализации) обычно заложена в архитектуру проведения документов. Выбор договора неподходящего вида (например, договора с поставщиком в документе продажи) в большинстве случаев приводит к ошибкам при проведении по регистрам взаиморасчетов и формированию некорректных проводок бухгалтерского учета. Перед отключением параметров выбора убедитесь, что учетная политика и алгоритмы проведения поддерживают выбранный вид договора для данной операции.