Как программно заполнить поля формы записи регистра сведений при создании записи из динамического списка?

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

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

Метод 1: Использование отбора динамического списка

Один из самых эффективных способов — передача параметров через отбор динамического списка. При нажатии на кнопку создания записи в динамическом списке, платформа считывает параметры отбора и пытается использовать их для заполнения данных новой записи. Рассмотрим пошагово, как это настроить:

  1. Перейдите в модуль формы справочника, где расположен динамический список.
  2. В обработчике события ПриСозданииНаСервере или при инициализации формы необходимо установить отбор для динамического списка.
  3. Используйте метод ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора для явной передачи текущей ссылки объекта в параметры списка.

Рассмотрим пример реализации кода:


// Установка отбора в динамическом списке
// Список — это имя вашего динамического списка на форме
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
    Список.Отбор, 
    "ИмяРеквизитаВРегистре", 
    Объект.Ссылка, 
    ВидСравненияКомпоновкиДанных.Равно, 
    , 
    Истина
);

Благодаря параметру Использование = Истина, платформа автоматически подхватит это значение при открытии формы записи и заполнит соответствующий реквизит, если у него установлен флаг Заполнять из данных заполнения в конфигураторе.

Метод 2: Использование механизма данных заполнения

Если автоматическое заполнение не срабатывает, необходимо проверить настройки в конфигураторе. Убедитесь, что у нужного реквизита в форме записи регистра сведений установлен флаг Заполнять из данных заполнения. Этот механизм позволяет платформе интерпретировать структуру ДанныеЗаполнения, передаваемую при открытии формы.

Если стандартного поведения недостаточно, вы можете дополнить логику в модуле объекта регистра сведений через событие ОбработкаЗаполнения:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.ВашСправочник") Тогда
        ЭтотОбъект.ВашРеквизит = ДанныеЗаполнения;
    КонецЕсли;
КонецПроцедуры

Метод 3: Программное открытие формы с передачей параметров

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

  1. Создайте структуру ПараметрыЗаполнения.
  2. Вставьте в структуру ключ, соответствующий имени реквизита, и значение — Объект.Ссылка.
  3. Вызовите метод ОткрытьФорму, передав туда сформированные параметры.

Пример кода для перехвата создания:


&НаКлиенте
Процедура СоздатьЗапись(Команда)
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("ИмяРеквизитаРегистра", Объект.Ссылка);
    ОткрытьФорму("РегистрСведений.ВашРегистр.ФормаЗаписи", ПараметрыОткрытия);
КонецПроцедуры

Важные рекомендации при реализации

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

Анализируя описанные подходы, можно сделать вывод, что самым быстрым и надежным способом является сочетание метода УстановитьЭлементОтбора с установленным флагом Заполнять из данных заполнения. Если же задача требует сложной логики, использование структуры параметров в ОткрытьФорму даст вам полный контроль над процессом инициализации новой записи.

← На главную