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