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