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