Нужно ли удалять сопутствующие общие картинки при заимствовании формы в расширение 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Приветствуем! Давайте подробно разберем частую ситуацию, с которой сталкиваются разработчики при работе с расширениями в 1С. Допустим, мы помещаем обработчик ПриСозданииНаСервере из формы документа в наше расширение. Вместе с формой платформа автоматически заимствует и сопутствующие объекты метаданных: общие картинки, элементы стиля, общие команды, которые используются на этой расширяемой форме. Возникает закономерный вопрос: нужно ли оставлять эти картинки в расширении, как это сделала платформа, или их можно безболезненно удалить?

Проанализируем опыт разработчиков и разберем механику работы платформы, чтобы принять правильное решение.

Почему платформа автоматически добавляет картинки в расширение?

Выясним причину такого поведения конфигуратора. При добавлении обработчика события в расширение платформа вынуждена заимствовать всю управляемую форму (а также объект-владелец, например, сам документ). В процессе заимствования механизм платформы анализирует связи всех визуальных элементов, групп и команд этой формы.

Если кнопки или декорации в исходной форме ссылаются на элементы метаданных основной конфигурации (например, общие картинки, элементы стиля), платформа автоматически переносит их "прицепом" в расширение. Это делается для того, чтобы гарантировать корректное открытие и отображение формы в визуальном редакторе конфигуратора при работе с расширением.

Почему лишние объекты рекомендуется удалять?

Как показывает практика опытных программистов, сопутствующие объекты в большинстве случаев не просто можно, а настоятельно рекомендуется удалять. Рассмотрим подробнее основные причины:

  1. Риск ошибок применимости при обновлениях типовой конфигурации. Любой заимствованный в расширение объект автоматически ставится на контроль соответствия объекту основной конфигурации. Если при очередном релизе разработчики типового решения переименуют, изменят или удалят заимствованную общую картинку, расширение завершится ошибкой контроля применимости и просто не подключится при запуске информационной базы.
  2. Отсутствие негативного влияния на режим выполнения. В пользовательском режиме «1С:Предприятие» платформа "на лету" собирает результирующую форму из метаданных основной конфигурации и подключенных расширений. Если общая картинка не была изменена в расширении (или отсутствует в нем), форма без проблем прочитает её напрямую из основной конфигурации. Таким образом, удаление картинки из расширения никак не приведет к ее исчезновению на форме у конечного пользователя.
  3. Чистота и оптимальный размер расширения. Удаление избыточных заимствованных объектов позволяет существенно уменьшить размер итогового файла с расширением .cfe, а также значительно упрощает дальнейшую поддержку, аудит и рефакторинг доработок.

В каких случаях картинки удалять нельзя?

Несмотря на общую рекомендацию по очистке, существуют исключения. Рассмотрим ситуации, когда удаление приведет к ошибкам:

  1. Если вы создаете в расширении совершенно новый собственный элемент формы или собственную команду, в свойствах которых заимствованная общая картинка выбрана статически (через палитру свойств элемента). В этом случае она становится жестко привязанной к вашему новому объекту.
  2. Если вы все же попытаетесь удалить объект, на который жестко завязаны собственные метаданные расширения или модифицированные свойства элементов, платформа выдаст предупреждение о наличии ссылок или завершится ошибкой при проверке метаданных.

Проверенный порядок действий и лучшие практики

Выработаем правильный алгоритм работы при заимствовании форм:

  1. Очистка сразу после заимствования. После добавления нужной формы или обработчика сразу же перейдите в ветку дерева метаданных расширения «Общие картинки» (а также проверьте «Элементы стиля» и «Подсистемы») и удалите добавленные платформой неизмененные объекты.
  2. Контроль ссылок. Если у вас есть сомнения, используется ли картинка в вашем собственном коде или новых элементах расширения, перед удалением обязательно вызовите для неё стандартную команду «Поиск ссылок на объект».
  3. Проверка применимости. Сразу после удаления выполните команду главного меню «Конфигурация — Проверка применимости» (или общую проверку расширения), чтобы окончательно убедиться в отсутствии битых ссылок.

Альтернативные подходы к разработке

Посмотрим на альтернативные варианты решения задач, чтобы минимизировать проблемы с расширениями:

  1. Программное назначение картинок. Если для ваших новых элементов формы в расширении действительно нужна стандартная картинка из основной конфигурации, лучше не заимствовать картинку в метаданные расширения, а назначать ее элементу программно в том же обработчике ПриСозданииНаСервере. Сделать это можно через обращение к системному объекту БиблиотекаКартинок.
  2. Альтернатива заимствованию формы. Если ваша задача в обработчике сводится лишь к инициализации данных документа, проверкам или заполнению реквизитов, зачастую гораздо надежнее расширять события самого объекта. Например, в модуле объекта через аннотации &Перед или &После для стандартных событий вроде ОбработкаЗаполнения. Это позволяет вовсе избежать заимствования тяжеловесной управляемой формы и всех ее сопутствующих визуальных метаданных, делая ваше расширение более стабильным к обновлениям.

Надеемся, что теперь механика работы платформы стала понятнее, и вы сможете поддерживать чистоту, производительность и надежность ваших расширений на высоком уровне, избегая лишних проблем при обновлении конфигураций!

← На главную