При активной разработке расширений программисты часто сталкиваются с рутинной задачей: необходимо добавить в расширение существующий справочник или документ не просто как пустую оболочку, а со всем набором его реквизитов и табличных частей. Делать это вручную, кликая на каждый элемент «Добавить в расширение», крайне утомительно, особенно если у объекта десятки полей. Разберем основные способы автоматизации этого процесса, начиная от встроенных механизмов платформы и заканчивая продвинутыми инструментами разработки.
Этот метод является одним из самых изящных и быстрых. Он основан на интеллектуальном поведении платформы при работе с запросами внутри расширения. Рассмотрим алгоритм действий пошагово:
Документ.РеализацияТоваровУслуг) в расширение. На данном этапе он будет пустым.Ссылка.Ссылка в выбранные поля и нажмем «ОК», чтобы сформировать текст запроса.ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг.Этот способ позволяет практически мгновенно «подтянуть» всю структуру объекта. Однако проанализируем нюанс: если реквизиты имеют сложные типы (ссылки на другие объекты), их тоже придется добавить, иначе система может выдать предупреждение.
Если нам нужно быстро добавить реквизиты для работы с формой списка или выбора, воспользуемся механизмом расширения через динамический список. Посмотрим, как это реализовать:
Ссылка.Ссылка и выберем команду «Добавить в расширение».В ряде случаев платформа предлагает добавить связанные поля. Также выясним, что простое добавление всей формы в расширение часто автоматически «тянет» за собой те реквизиты, которые на ней размещены. Это полезно, если ваша цель — визуальная доработка интерфейса.
Для тех, кто перешел на использование EDT, задача массового добавления решается гораздо проще, чем в классическом Конфигураторе. Разберем преимущества этого подхода:
В среде EDT мы можем работать с деревом метаданных как с обычным списком файлов. Мы можем выделить группу нужных реквизитов, используя клавиши Shift или Ctrl, нажать правую кнопку мыши и выбрать команду «Добавить в расширение». EDT самостоятельно отследит зависимости и предложит добавить типы данных, если они отсутствуют в расширении. Это наиболее профессиональный путь при работе с большими объемами метаданных.
Существует «хитрый» способ, позволяющий использовать стандартное окно сравнения и объединения для массовой простановки галочек. Проанализируем этот алгоритм:
.cf.Система перенесет описание метаданных в расширение. Этот метод хорош тем, что в окне сравнения очень удобно визуально контролировать, что именно мы добавляем.
Прежде чем массово добавлять все реквизиты, подумаем о последствиях для стабильности системы. Выясним причины, по которым опытные разработчики советуют соблюдать осторожность:
1. Проблемы при обновлениях: Если вы добавили реквизит в расширение «просто так», а в новом релизе основной конфигурации поставщик изменил его тип или удалил его, ваше расширение может перестать подключаться. Вам придется вручную исправлять конфликты в объектах, которые вы даже не используете в своей логике.
2. Раздувание веса: Каждое добавленное поле увеличивает объем расширения. При запуске сеанса системе требуется время на компиляцию и проверку соответствия метаданных. Большое количество лишних объектов замедляет этот процесс.
3. Программная доработка форм: Рассмотрим полезный совет — вместо переноса всей формы в расширение (что часто приводит к её «поломке» при обновлениях), лучше использовать программное изменение интерфейса в модуле формы. Пример логики:
&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Программное добавление элемента, если реквизит уже есть в расширении
НовыйЭлемент = Элементы.Добавить("МоеПоле", Тип("ДекорацияФормы"), ЭтаФорма);
// Настройка свойств программно
КонецПроцедуры
Подведем итог: если вам нужно добавить все реквизиты для работы конструктора запросов или СКД, наиболее эффективным способом на современных платформах будет метод со звездочкой в конструкторе запроса. Если же вы работаете в крупном проекте, использование EDT станет лучшим выбором для управления составом расширения.