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