Как заполнить дополнительные реквизиты при вводе документа на основании в 1С:УТ 11.4

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Проблема: почему дополнительные реквизиты не видны в контексте формы

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

Более того, когда документ открывается, на форме эти реквизиты создаются программно в момент выполнения процедуры ПриСозданииНаСервере. Если вы просто добавили строку в таблицу объекта, форма может «не подхватить» эти изменения без использования специальных методов БСП. Выясним причину и последовательность действий для корректного решения.

Шаг 1. Заполнение данных в модуле объекта

Первым делом нам необходимо внести данные в структуру самого объекта. Это делается в модуле объекта в обработчике ОбработкаЗаполнения. Проанализируем пример кода, который позволяет вручную добавить значение в коллекцию дополнительных реквизитов.


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

Важный момент: при ручном добавлении строк нужно быть уверенным, что Свойство (ссылка на ПВХ) входит в Набор свойств именно этого документа. В противном случае БСП проигнорирует эту строку при выводе на форму.

Шаг 2. Использование стандартных методов БСП (рекомендуемый способ)

Вместо ручного манипулирования табличной частью, в БСП предусмотрены готовые механизмы. Проанализируем метод УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыОбъекта. Этот метод позволяет автоматически скопировать значения одноименных дополнительных реквизитов из источника в приемник.

Посмотрим на пример использования в модуле объекта:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    
    // Вызов стандартного заполнения из основания
    // Метод скопирует значения свойств, которые есть и в источнике, и в новом документе
    УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыОбъекта(ЭтотОбъект, ДанныеЗаполнения);
    
КонецПроцедуры

Это наиболее надежный способ, так как он учитывает типы данных и корректность привязки свойств к наборам.

Шаг 3. Отображение заполненных данных на форме

Часто программисты сталкиваются с тем, что в объекте данные есть, а на форме поля пустые. Это происходит потому, что форма уже инициализировала свои динамические реквизиты до того, как объект был полностью подготовлен, или механизмы отрисовки не увидели изменений. Рассмотрим, как заставить форму «увидеть» наши данные.

В современных версиях конфигураций на базе БСП (как УТ 11.4) стандартная процедура ПриСозданииНаСервере в модуле формы обычно содержит вызов:

УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект);

Этот вызов отвечает за то, чтобы прочитать табличную часть Объект.ДополнительныеРеквизиты и создать на форме элементы управления. Если вы заполнили данные в ОбработкаЗаполнения, то при открытии формы они должны подтянуться автоматически.

Если же вам нужно обновить реквизиты программно уже после того, как форма открыта (например, при изменении какого-то другого поля на форме), необходимо использовать метод:

УправлениеСвойствами.ОбновитьДополнительныеРеквизитыФормы(ЭтаФорма);

Почему автор сообщения не видел элементы на форме?

Разберем ситуацию из сообщения №2: «не вижу среди элементов». Это нормальное поведение системы. В конфигураторе вы не найдете эти поля на форме документа. БСП генерирует их «на лету». Имена этих элементов имеют специфический формат, например: ДополнительныйРеквизит_ИдентификаторСвойства. Чтобы обратиться к ним напрямую (хотя это не рекомендуется), нужно программно перебирать коллекцию элементов формы или использовать функции БСП для получения имен.

Итоговый алгоритм действий

  1. Проверьте настройки системы: убедитесь, что в пользовательском режиме (Администрирование — Общие настройки — Дополнительные реквизиты и сведения) нужное свойство добавлено именно в набор свойств того документа, который вы создаете.
  2. Реализуйте заполнение в модуле объекта: используйте процедуру ОбработкаЗаполнения. Для простого копирования из основания применяйте УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыОбъекта. Для установки фиксированных значений — добавляйте строки в ЭтотОбъект.ДополнительныеРеквизиты вручную.
  3. Проверьте модуль формы: убедитесь, что в форме присутствует стандартная интеграция с подсистемой управления свойствами. В УТ 11.4 это обычно типовой функционал, который не требует вмешательства.
  4. Тестирование: создайте документ на основании и проверьте вкладку «Дополнительно» (или то место, где выведены свойства). Значения должны отображаться до записи документа.

Таким образом, работа с дополнительными реквизитами требует понимания того, что это не обычные поля, а часть динамического интерфейса БСП. Использование встроенных процедур общего модуля УправлениеСвойствами значительно упрощает разработку и делает код более устойчивым к обновлениям конфигурации.

← На главную