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