Как правильно установить дополнительные реквизиты для нового документа в 1С:Управляемые формы?

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

Часто при создании документов на основании возникают задачи по автоматическому заполнению данных. Одной из частых проблем, с которой сталкиваются разработчики, является попытка заполнить ДополнительныеРеквизиты у документа, который еще не был записан в информационную базу. Давайте разберем, почему возникают ошибки и как сделать это правильно с точки зрения архитектуры управляемых форм.

Понимание природы объекта в управляемом приложении

Главная ошибка, которую мы часто совершаем при работе с Управляемыми формами — это отождествление переменной Объект с объектом базы данных. В контексте модуля формы Объект — это данные формы, которые живут в оперативной памяти клиента и сервера. Попытки вызвать методы, работающие с объектом базы данных (например, ЗаписатьСвойстваУОбъекта из БСП), до момента записи документа обречены на провал, так как у документа еще нет Ссылка.

Мы должны осознать, что ДополнительныеРеквизиты в современном 1С — это табличная часть. Следовательно, для того чтобы заполнить их при открытии формы нового документа, нам не нужно ничего записывать. Мы работаем напрямую с коллекцией строк в данных формы.

Решение проблемы: пошаговое руководство

Разберем, как правильно реализовать заполнение дополнительных реквизитов в событии ПриСозданииНаСервере. Это идеальное место для инициализации данных, так как форма еще не отображена пользователю, а данные документа уже доступны для модификации.

  1. Перехватите событие ПриСозданииНаСервере (используйте расширение или основной модуль формы).
  2. Проверьте, что документ является новым (параметр Ключ пустой).
  3. Обратитесь к коллекции Объект.ДополнительныеРеквизиты.
  4. Добавьте новую строку в табличную часть и установите необходимые значения.

Посмотрим на пример корректного серверного кода:


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

КонецПроцедуры

Почему не стоит использовать РеквизитФормыВЗначение?

Начинающие разработчики часто пытаются использовать конструкцию РеквизитФормыВЗначение("Объект"), чтобы «превратить» данные формы в объект базы данных. Однако, при работе в процедуре ПриСозданииНаСервере в этом нет никакой необходимости. Преобразование данных формы в прикладной объект 1С нужно только в том случае, если вам необходимо вызвать специфический метод модуля объекта, который недоступен напрямую из контекста формы. Для работы с табличной частью ДополнительныеРеквизиты достаточно обычного доступа к свойству Объект.

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

Таким образом, мы выяснили, что ключ к решению проблемы лежит в простоте: не нужно пытаться «обмануть» систему и получить Ссылка для незаписанного объекта. Достаточно внести изменения в данные формы, и платформа 1С автоматически подхватит и отобразит их пользователю, а в момент нажатия кнопки «Записать» сама обеспечит корректную запись дополнительных реквизитов в базу данных.

← На главную