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