При доработке или сопровождении типовых конфигураций на платформе 1С:Предприятие 8.3 разработчики нередко сталкиваются с ситуацией: в конфигураторе найден нужный макет, в него внесены правки, конфигурация сохранена и обновлена, но при формировании печатной формы в режиме «1С:Предприятие» документ упорно выводится в старом виде. Бывает и обратная ситуация — при отладке мы видим обращение к макету, но в дереве метаданных конфигуратора найти его не удается. Разберем по шагам, где физически и логически могут находиться макеты печатных форм, как работает механизм печати БСП и как вернуть приоритет макету из конфигуратора.
В современных конфигурациях, использующих Библиотеку стандартных подсистем (БСП), реализован механизм пользовательского редактирования печатных форм. Пользователи с полными правами могут скорректировать внешний вид накладной, акта или счета прямо в режиме «1С:Предприятие» без снятия конфигурации с поддержки.
Физически измененные макеты сохраняются непосредственно в информационной базе — в специальном регистре сведений ПользовательскиеМакетыПечати. Когда модуль менеджера вызывает функцию получения макета:
Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьТТН.ПФ_MXL_ТТН");
Система выполняет следующий алгоритм:
ПользовательскиеМакетыПечати по объекту метаданных и имени макета с проверкой признака Использование = Истина.Именно поэтому любые исправления табличного документа в конфигураторе не дают результата: система выводит сохраненную в базе пользовательскую копию макета.
Разберем способы сброса пользовательских настроек:
УправлениеПечатью.ОтключитьПользовательскийМакет(ИмяВладельца, ИмяМакета). Также можно программно сбросить признак Использование = Ложь в регистре сведений ПользовательскиеМакетыПечати.Если макета нет в очевидном месте метаданных, проанализируем все возможные точки его размещения:
Обработка.ПечатьТТН, Обработка.ПечатьАктОбОказанииУслуг, Обработка.ПечатьЭтикетокИЦенников).ОбщиеМакеты дерева метаданных..cfe). В основной конфигурации его видно не будет.ТабличныйДокумент).Рассмотрим еще одну распространенную причину путаницы — различие между идентификатором команды печати и фактическим именем макета. Посмотрим на типовой пример кода формирования команд печати:
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Обработка.ПечатьТТН";
КомандаПечати.Идентификатор = "ТН_РБ";
Идентификатор команды "ТН_РБ" — это внутренняя строка для диспетчеризации печати. Сам макет в обработке печати при этом может называться иначе, например ПФ_MXL_ТТН или ПФ_MXL_ТН_РБ.
Проанализируем процедуру печати в модуле менеджера соответствующей обработки:
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТН_РБ") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ТН_РБ",
"Товарная накладная (ф. ТН-2)",
СформироватьПечатнуюФормуТТН_ТН_Локализация(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
);
КонецЕсли;
Внутри функции формирования печатной формы макет запрашивается по его точному имени метаданных. Кроме того, в локализованных конфигурациях подсистема печати БСП может автоматически добавлять суффиксы языка (например, ПФ_MXL_ТТН_ru, ПФ_MXL_ТТН_by) в зависимости от текущего языка формирования документов.
Важно помнить: если для печатной формы создан пользовательский макет в режиме «1С:Предприятие», типовое обновление конфигурации не обновит печатную форму у пользователей. Все изменения законодательства и новые обязательные реквизиты, внесенные разработчиками типового решения в макеты конфигуратора, не применятся автоматически. В таких случаях требуется вручную перенести изменения в пользовательский макет либо сбросить его на типовой вариант.