Как добавить печать и подпись во внешнюю печатную форму в БАС Бухгалтерия

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В процессе работы с программами на базе БСП (Библиотека стандартных подсистем), такими как БАС Бухгалтерия 2.1, часто возникает задача автоматизации вывода факсимиле (печати и подписи) на печатные формы. Трудность заключается в том, что разработчики часто пытаются либо полностью переписать логику формирования документа, либо сталкиваются с ошибками при попытке вызвать стандартные механизмы печати. Разберем подробно, как решить эту задачу эффективно.

Вариант 1. Использование стандартных возможностей конфигурации

Прежде чем приступать к программированию внешней печатной формы (ВПФ), проанализируем штатные возможности системы. В современных версиях БАС Бухгалтерия функционал печати и подписи уже заложен в логику большинства документов, включая «Акт об оказании услуг».

  1. Настройка организации: Перейдем в справочник Организации, откроем нужную карточку и на закладке «Печать» загрузим заранее подготовленные файлы с изображением печати, подписи руководителя и логотипа.
  2. Редактирование макета: Если стандартное расположение печати вас не устраивает, воспользуемся разделом Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм. Найдем макет «Акт об оказании услуг», нажмем «Изменить» и отредактируем его в пользовательском режиме, добавив нужные области.
  3. Вывод на печать: При формировании документа достаточно нажать кнопку «Печать» и выбрать вариант «Акт об оказании услуг (с печатью и подписью)». Если такого пункта нет, проверьте настройки в самой форме печати (флажок «Подписи и печать»).

Вариант 2. Создание внешней печатной формы с вызовом стандартного менеджера

Если руководство требует именно внешнюю обработку, мы можем пойти по пути наименьшего сопротивления: не копировать весь код формирования макета в обработку, а вызвать экспортную процедуру Печать из менеджера документа. Это позволит получить уже заполненный ТабличныйДокумент, в который мы просто добавим нужные изображения.

Разберем структуру функции во внешней обработке. Основная проблема автора темы заключалась в ошибке «недостаточно фактических параметров». Это происходит из-за того, что в БСП процедура печати ожидает строго определенный набор аргументов.

Рассмотрим пример кода в модуле объекта внешней печатной формы:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Подготавливаем структуру для стандартной печати
    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("ДополнительныеПараметры", Новый Структура);
    
    // Важный момент: заставляем систему думать, что нужно выводить факсимиле
    ПараметрыПечати.ДополнительныеПараметры.Вставить("ВыводитьПечатьИПодпись", Истина);
    
    // Вызываем стандартную процедуру из менеджера документа
    Документы.АктОбОказанииУслуг.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
    // Теперь в КоллекцияПечатныхФорм уже лежит готовый Акт.
    // Если нам нужно что-то подправить, мы можем извлечь его оттуда.
    Для Каждого СтрокаФормы Из КоллекцияПечатныхФорм Цикл
        Если СтрокаФормы.ИмяВКоллекции = "АктОбОказанииУслуг" Тогда
            МодифицироватьТабличныйДокумент(СтрокаФормы.ТабличныйДокумент, МассивОбъектов[0]);
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Вариант 3. Программное добавление рисунка в готовый макет

Проанализируем ситуацию, когда стандартный механизм почему-то не выводит картинку (например, если макет сильно изменен). В этом случае мы можем программно вставить объект РисунокТабличногоДокумента в сформированный ТабличныйДокумент. Выясним, как это сделать по шагам.

Для начала нам нужно получить двоичные данные картинки из справочника организации. Затем определим координаты для вставки. Рассмотрим пример функции:


Процедура МодифицироватьТабличныйДокумент(ТабДок, СсылкаНаДокумент)
    
    Организация = СсылкаНаДокумент.Организация;
    
    // Получаем файл печати из реквизитов организации (зависит от версии БАС)
    ФайлПечати = Организация.ФайлПечати; 
    Если ФайлПечати.Пустая() Тогда
        Возврат; // Печать не задана
    КонецЕсли;
    
    ДанныеКартинки = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлПечати);
    Если ДанныеКартинки = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    КартинкаПечати = Новый Картинка(ДанныеКартинки);
    
    // Ищем область в документе, куда вставить печать. Обычно это "М.П."
    ОбластьМП = ТабДок.НайтиТекст("М.П.");
    
    Если ОбластьМП <> Неопределено Тогда
        // Добавляем рисунок
        Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
        Рисунок.Картинка = КартинкаПечати;
        Рисунок.РазмерКартинки = РазмерКартинки.АвтоМасштаб;
        
        // Позиционируем рисунок поверх текста М.П.
        Рисунок.Верх = ОбластьМП.Верх;
        Рисунок.Лево = ОбластьМП.Лево;
        Рисунок.Ширина = 40; // Примерный размер в мм
        Рисунок.Высота = 40;
        
        // Делаем фон прозрачным
        Рисунок.ГраницаСверху = Ложь;
        Рисунок.ГраницаСнизу = Ложь;
        Рисунок.ГраницаСлева = Ложь;
        Рисунок.ГраницаСправа = Ложь;
        Рисунок.Узор = ТипУзораТабличногоДокумента.БезУзора;
    КонецЕсли;
    
КонецПроцедуры

Важные технические нюансы

Разберем основные ошибки, которые могут возникнуть при реализации:

Альтернатива: Использование расширений

Рассмотрим еще один современный подход. Если задача стоит именно в модификации стандартной формы, то использование расширения конфигурации может быть предпочтительнее ВПФ. Мы можем применить аннотацию &После к процедуре формирования печатной формы в модуле менеджера или в соответствующем серверном модуле печати. Это позволит нам получить уже готовый ТабличныйДокумент непосредственно в момент его формирования системой и внедрить в него печать без создания лишних внешних файлов.

Резюмируя: для решения задачи в БАС Бухгалтерия оптимально либо использовать штатный механизм редактирования макетов, либо создать ВПФ, которая вызывает стандартную экспортную процедуру менеджера документа с передачей параметра ВыводитьПечатьИПодпись = Истина. Это обеспечит чистоту кода и минимизирует затраты на поддержку обработки при будущих обновлениях программы.

← На главную