← На главную
Приветствуем! Давайте подробно разберем частую ситуацию, с которой сталкиваются разработчики при работе с расширениями в 1С. Допустим, мы помещаем обработчик ПриСозданииНаСервере из формы документа в наше расширение. Вместе с формой платформа автоматически заимствует и сопутствующие объекты метаданных: общие картинки, элементы стиля, общие команды, которые используются на этой расширяемой форме. Возникает закономерный вопрос: нужно ли оставлять эти картинки в расширении, как это сделала платформа, или их можно безболезненно удалить?
Проанализируем опыт разработчиков и разберем механику работы платформы, чтобы принять правильное решение.
Почему платформа автоматически добавляет картинки в расширение?
Выясним причину такого поведения конфигуратора. При добавлении обработчика события в расширение платформа вынуждена заимствовать всю управляемую форму (а также объект-владелец, например, сам документ). В процессе заимствования механизм платформы анализирует связи всех визуальных элементов, групп и команд этой формы.
Если кнопки или декорации в исходной форме ссылаются на элементы метаданных основной конфигурации (например, общие картинки, элементы стиля), платформа автоматически переносит их "прицепом" в расширение. Это делается для того, чтобы гарантировать корректное открытие и отображение формы в визуальном редакторе конфигуратора при работе с расширением.
Почему лишние объекты рекомендуется удалять?
Как показывает практика опытных программистов, сопутствующие объекты в большинстве случаев не просто можно, а настоятельно рекомендуется удалять. Рассмотрим подробнее основные причины:
- Риск ошибок применимости при обновлениях типовой конфигурации. Любой заимствованный в расширение объект автоматически ставится на контроль соответствия объекту основной конфигурации. Если при очередном релизе разработчики типового решения переименуют, изменят или удалят заимствованную общую картинку, расширение завершится ошибкой контроля применимости и просто не подключится при запуске информационной базы.
- Отсутствие негативного влияния на режим выполнения. В пользовательском режиме «1С:Предприятие» платформа "на лету" собирает результирующую форму из метаданных основной конфигурации и подключенных расширений. Если общая картинка не была изменена в расширении (или отсутствует в нем), форма без проблем прочитает её напрямую из основной конфигурации. Таким образом, удаление картинки из расширения никак не приведет к ее исчезновению на форме у конечного пользователя.
- Чистота и оптимальный размер расширения. Удаление избыточных заимствованных объектов позволяет существенно уменьшить размер итогового файла с расширением
.cfe, а также значительно упрощает дальнейшую поддержку, аудит и рефакторинг доработок.
В каких случаях картинки удалять нельзя?
Несмотря на общую рекомендацию по очистке, существуют исключения. Рассмотрим ситуации, когда удаление приведет к ошибкам:
- Если вы создаете в расширении совершенно новый собственный элемент формы или собственную команду, в свойствах которых заимствованная общая картинка выбрана статически (через палитру свойств элемента). В этом случае она становится жестко привязанной к вашему новому объекту.
- Если вы все же попытаетесь удалить объект, на который жестко завязаны собственные метаданные расширения или модифицированные свойства элементов, платформа выдаст предупреждение о наличии ссылок или завершится ошибкой при проверке метаданных.
Проверенный порядок действий и лучшие практики
Выработаем правильный алгоритм работы при заимствовании форм:
- Очистка сразу после заимствования. После добавления нужной формы или обработчика сразу же перейдите в ветку дерева метаданных расширения «Общие картинки» (а также проверьте «Элементы стиля» и «Подсистемы») и удалите добавленные платформой неизмененные объекты.
- Контроль ссылок. Если у вас есть сомнения, используется ли картинка в вашем собственном коде или новых элементах расширения, перед удалением обязательно вызовите для неё стандартную команду «Поиск ссылок на объект».
- Проверка применимости. Сразу после удаления выполните команду главного меню «Конфигурация — Проверка применимости» (или общую проверку расширения), чтобы окончательно убедиться в отсутствии битых ссылок.
Альтернативные подходы к разработке
Посмотрим на альтернативные варианты решения задач, чтобы минимизировать проблемы с расширениями:
- Программное назначение картинок. Если для ваших новых элементов формы в расширении действительно нужна стандартная картинка из основной конфигурации, лучше не заимствовать картинку в метаданные расширения, а назначать ее элементу программно в том же обработчике
ПриСозданииНаСервере. Сделать это можно через обращение к системному объекту БиблиотекаКартинок.
- Альтернатива заимствованию формы. Если ваша задача в обработчике сводится лишь к инициализации данных документа, проверкам или заполнению реквизитов, зачастую гораздо надежнее расширять события самого объекта. Например, в модуле объекта через аннотации
&Перед или &После для стандартных событий вроде ОбработкаЗаполнения. Это позволяет вовсе избежать заимствования тяжеловесной управляемой формы и всех ее сопутствующих визуальных метаданных, делая ваше расширение более стабильным к обновлениям.
Надеемся, что теперь механика работы платформы стала понятнее, и вы сможете поддерживать чистоту, производительность и надежность ваших расширений на высоком уровне, избегая лишних проблем при обновлении конфигураций!