В практике работы с «1С:Управление торговлей 11» часто возникает ситуация, когда для придания документам более официального вида в печатную форму «Счет на оплату» добавляют факсимиле (печать и подписи). Однако типичная ошибка начинающих разработчиков или администраторов заключается в «жестком» вшивании картинки печати непосредственно в макет через редактор Макеты печатных форм. Это приводит к тому, что во всех счетах, независимо от организации-продавца, выводится одна и та же печать. Разберем, как исправить эту ситуацию и настроить систему правильно.
Проанализируем ситуацию: когда мы открываем раздел Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм и редактируем макет ПФ_MXL_СчетНаОплату, любые внесенные изменения (в том числе вставка статической картинки) становятся глобальными для всей информационной базы. Система 1С воспринимает этот отредактированный макет как единственный верный. Если в него была вставлена картинка, она будет отображаться всегда, игнорируя логику программного формирования документа.
Прежде чем приступать к программированию, рассмотрим штатный функционал УТ 11, который зачастую игнорируется. Программа уже умеет подставлять разные печати для разных организаций автоматически. Для этого нам необходимо выполнить несколько шагов.
Шаг 1. Подготовка изображений. Выясним требования к файлам. Для корректного наложения печати на текст (чтобы линии таблицы или подписи не перекрывались белым фоном), необходимо использовать формат .PNG с прозрачным слоем. Рекомендуется заранее подготовить три отдельных файла:
Шаг 2. Загрузка в карточку организации. Перейдем в раздел НСИ и администрирование — Сведения об организации. Выберем нужную организацию и перейдем на вкладку Настройка печати. Здесь предусмотрены специальные поля для загрузки подготовленных выше файлов. Повторим эту процедуру для каждой организации в базе.
Шаг 3. Очистка пользовательского макета. Теперь нам нужно «откатить» изменения, внесенные в общий макет. В разделе Макеты печатных форм найдем наш измененный макет счета и нажмем кнопку Использовать стандартный макет (или удалим пользовательский). Это вернет в макет специальные области-контейнеры, которые называются параметрами КартинкаПечати и КартинкаПодписи.
Шаг 4. Проверка при печати. При выводе счета на печать в форме предпросмотра обязательно нужно установить флаг Подписи и печать. Если все сделано верно, 1С сама возьмет нужные картинки из карточки той организации, которая указана в документе-основании.
Если же типовой механизм по каким-то причинам не подходит (например, требуется принципиально разное оформление самого бланка счета для разных юрлиц), проанализируем вариант с использованием Расширения. Это позволит нам добавить условие выбора макета, не снимая конфигурацию с поддержки и не создавая внешних обработок (ВПФ).
Рассмотрим логику работы в расширении. Нам потребуется перехватить процедуру печати в модуле менеджера документа ЗаказКлиента или СчетНаОплату. Основная задача — подменить имя макета в зависимости от значения поля Организация.
Пример кода, который можно реализовать в расширении (метод &Вместо или &После):
&Вместо("СформироватьПечатнуюФормуСчетНаОплату")
Процедура Расш1_СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати)
// Определяем организацию из первого документа в списке
ОрганизацияДокумента = ОбъектыПечати[0].Организация;
Если ОрганизацияДокумента = Справочники.Организации.НайтиПоНаименованию("Организация №1") Тогда
ИмяМакета = "ПФ_MXL_СчетНаОплату_Вариант1";
ИначеЕсли ОрганизацияДокумента = Справочники.Организации.НайтиПоНаименованию("Организация №2") Тогда
ИмяМакета = "ПФ_MXL_СчетНаОплату_Вариант2";
Иначе
ИмяМакета = "Default"; // Стандартный путь
КонецЕсли;
// Далее следует логика вызова макета по условию ИмяМакета
КонецПроцедуры
Преимущество этого метода в том, что вы можете создать в расширении два совершенно разных макета: МакетОрг1 и МакетОрг2. Программа будет обращаться к нужному объекту в зависимости от контекста выполнения.
При редактировании макета (будь то стандартный или в расширении) важно понимать, как 1С работает с картинками. В типовых решениях для вывода факсимиле используются именованные области. Например, область Подписи содержит рисунки типа «Картинка», в свойстве Имя которых указано КартинкаПечати.
Если вы решите программно управлять выводом, обратите внимание на следующий объект:
ОбластьМакета.Рисунки.КартинкаПечати.Картинка = ДанныеПечати.ПечатьОрганизации;
Здесь ДанныеПечати — это структура, заполняемая из реквизитов организации. Важно сохранять пропорции рисунков, чтобы печать не выглядела растянутой. В свойствах рисунка в макете рекомендуется устанавливать значение Размер — Пропорционально.
Подведем итог, почему способ «просто вставить картинку в макет» является тупиковым:
Таким образом, самым правильным и трудозатратно выгодным способом является использование штатной настройки в карточке организации. Если же бизнес-требования диктуют уникальный дизайн для каждого бренда, используйте механизм расширений для подмены имен макетов, сохраняя при этом программную подстановку самих изображений из настроек организации.