Начиная с версии 3.0.64 в конфигурации «1С:Бухгалтерия предприятия» изменился механизм работы с факсимиле. Вместо отдельных команд печати (например, «Счет на оплату» и «Счет на оплату с печатью и подписью») теперь используется единая команда и флажок Подпись и печать в форме предварительного просмотра. Для разработчиков внешних печатных форм (ВПФ) это означает необходимость адаптации кода под новые требования БСП и отраслевой логики Бухгалтерии. Рассмотрим подробно, как заставить этот механизм работать в ваших разработках.
Прежде чем приступать к написанию кода, проанализируем, как система понимает, что для формы нужно вывести заветную «галку». В стандартных формах за это отвечает механизм управления печатью. При формировании коллекции печатных форм система проверяет настройки каждой формы и, если флажок установлен пользователем, вызывает специальные методы для постобработки табличного документа. В случае с ВПФ нам необходимо вручную «подсказать» системе, что наша форма поддерживает вывод картинок печати и подписей.
Проанализируем основную процедуру внешней обработки Печать. Именно здесь мы регистрируем нашу форму в коллекции. Чтобы флажок «Подпись и печать» появился в интерфейсе, нам нужно вызвать метод заполнения дополнительных параметров. Без этого вызова система будет считать вашу ВПФ «старой» и не предложит функционал факсимиле.
Добавим вызов метода ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати после того, как сформирован табличный документ и выведен в коллекцию. Рассмотрим пример кода:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Проверяем, нужно ли печатать нашу форму
ПараметрыПечати = Новый Структура;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "МояВнешняяПечатнаяФорма") Тогда
// Формируем табличный документ с помощью вашей функции
ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ПараметрыВывода);
// Выводим его в коллекцию
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"МояВнешняяПечатнаяФорма",
"Заголовок моей формы",
ТабличныйДокумент);
// КРИТИЧЕСКИ ВАЖНО: Регистрируем дополнительные параметры для БП 3.0
ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(
МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода);
КонецЕсли;
КонецПроцедуры
Метод автоматической вставки факсимиле работает не с координатами ячеек, а с именованными объектами типа «Рисунок» (Picture). Выясним, какие требования предъявляются к макету. Вам необходимо создать в макете (обычно в области подвала, где располагаются подписи) пустые прозрачные рисунки и задать им строго определенные имена:
Важный момент: Рисунки должны быть размещены «поверх» текста так, чтобы при вставке картинки они не перекрывали важные реквизиты, но создавали эффект реального оттиска. Рекомендуется установить свойство «Выводить на печать» и убедиться, что тип объекта — именно Рисунок (вставить его можно через меню Таблица -> Рисунки -> Картинка, выбрав пустой файл или просто создав область).
Теперь перейдем к функции, которая непосредственно заполняет ТабличныйДокумент. Нам нужно вызвать метод УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью. Этот метод проанализирует состояние флажка в форме печати и, если он включен, найдет в макете созданные нами рисунки и заменит их на реальные файлы из карточки организации.
Разберем, как подготовить структуру данных для этого метода. Рассмотрим пример внутри цикла обхода объектов:
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
// ... логика получения макета и заполнения данных ...
Для Каждого ТекущийДокумент Из МассивОбъектов Цикл
// ... заполнение областей макета ...
// Подготавливаем сведения о документе для механизма факсимиле
СведенияОДокументе = Новый Структура;
СведенияОДокументе.Вставить("Документ", ТекущийДокумент);
СведенияОДокументе.Вставить("Организация", ТекущийДокумент.Организация);
// Можно явно указать ответственных, если они отличаются от стандартных в карточке
СведенияОДокументе.Вставить("Руководитель", ТекущийДокумент.Руководитель);
СведенияОДокументе.Вставить("ГлавныйБухгалтер", ТекущийДокумент.ГлавныйБухгалтер);
// Задаем область печати документа (необходимо для многостраничной печати)
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ТабличныйДокумент.Вывести(ОбластьПодвал);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ТекущийДокумент);
// Вызываем штатное дополнение подписью и печатью
// Метод сам проверит флаг в ПараметрыПечати.ПодписьИПечать
УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью(
ТабличныйДокумент,
СведенияОДокументе,
ОбъектыПечати,
ПараметрыПечати);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Проанализируем ситуацию: если вы просто вызовете ДополнитьДокументПодписьюИПечатью, но не передадите в него структуру ПараметрыПечати, полученную из интерфейса, картинки могут выводиться всегда или не выводиться вовсе. В структуре ПараметрыПечати, которая приходит в процедуру печати ВПФ, система передает свойство ПодписьИПечать (тип Булево). Оно отражает состояние той самой «галки» в форме предпросмотра.
Если вы хотите реализовать логику «в лоб» (без использования штатного метода), вы можете проверить:
Если ПараметрыПечати.Свойство("ПодписьИПечать") И ПараметрыПечати.ПодписьИПечать Тогда...
Однако использование УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью является более правильным, так как этот метод учитывает историю назначений ответственных лиц на дату документа и права доступа к картинкам.
Выясним, почему флажок может не работать, даже если код написан верно:
СведенияОВнешнейОбработке в свойстве ВерсияБСП указана актуальная версия (минимум 2.3.4 или выше).ФаксимилеРуководителя вместо ФаксимилеРуководитель) приведет к тому, что картинка не будет найдена.СведенияОДокументе не заполнено поле Организация, метод не сможет найти справочник, в котором хранятся файлы факсимиле.Мы рассмотрели современный способ интеграции факсимиле во внешние печатные формы. Использование штатных методов ОбщегоНазначенияБП и УправлениеПечатьюБП позволяет сохранить единообразие интерфейса для пользователя и избежать написания велосипедов по поиску и вставке картинок. Помните, что ключевым моментом является связка: регистрация доп. параметров в начале + именованные рисунки в макете + вызов дополнения в конце.