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