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