Как реализовать вывод печати и подписи во внешней печатной форме для 1С:Бухгалтерия 3.0?

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

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

Принцип работы механизма факсимиле в БП 3.0

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

Шаг 1. Настройка процедуры Печать

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

Добавим вызов метода ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати после того, как сформирован табличный документ и выведен в коллекцию. Рассмотрим пример кода:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

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

Шаг 2. Подготовка макета (MXL)

Метод автоматической вставки факсимиле работает не с координатами ячеек, а с именованными объектами типа «Рисунок» (Picture). Выясним, какие требования предъявляются к макету. Вам необходимо создать в макете (обычно в области подвала, где располагаются подписи) пустые прозрачные рисунки и задать им строго определенные имена:

  1. ФаксимилеПечать — сюда система поместит основную печать организации.
  2. ФаксимилеРуководитель — для подписи руководителя.
  3. ФаксимилеГлавныйБухгалтер — для подписи главного бухгалтера.
  4. ФаксимилеКассир — если форма предполагает подпись кассира.
  5. ФаксимилеОтветственныйЗаОформление — актуально для УПД и актов.

Важный момент: Рисунки должны быть размещены «поверх» текста так, чтобы при вставке картинки они не перекрывали важные реквизиты, но создавали эффект реального оттиска. Рекомендуется установить свойство «Выводить на печать» и убедиться, что тип объекта — именно Рисунок (вставить его можно через меню Таблица -> Рисунки -> Картинка, выбрав пустой файл или просто создав область).

Шаг 3. Изменение функции формирования документа

Теперь перейдем к функции, которая непосредственно заполняет ТабличныйДокумент. Нам нужно вызвать метод УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью. Этот метод проанализирует состояние флажка в форме печати и, если он включен, найдет в макете созданные нами рисунки и заменит их на реальные файлы из карточки организации.

Разберем, как подготовить структуру данных для этого метода. Рассмотрим пример внутри цикла обхода объектов:


Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    // ... логика получения макета и заполнения данных ...
    
    Для Каждого ТекущийДокумент Из МассивОбъектов Цикл
        
        // ... заполнение областей макета ...
        
        // Подготавливаем сведения о документе для механизма факсимиле
        СведенияОДокументе = Новый Структура;
        СведенияОДокументе.Вставить("Документ", ТекущийДокумент);
        СведенияОДокументе.Вставить("Организация", ТекущийДокумент.Организация);
        
        // Можно явно указать ответственных, если они отличаются от стандартных в карточке
        СведенияОДокументе.Вставить("Руководитель", ТекущийДокумент.Руководитель);
        СведенияОДокументе.Вставить("ГлавныйБухгалтер", ТекущийДокумент.ГлавныйБухгалтер);
        
        // Задаем область печати документа (необходимо для многостраничной печати)
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        ТабличныйДокумент.Вывести(ОбластьПодвал);
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ТекущийДокумент);
        
        // Вызываем штатное дополнение подписью и печатью
        // Метод сам проверит флаг в ПараметрыПечати.ПодписьИПечать
        УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью(
            ТабличныйДокумент, 
            СведенияОДокументе, 
            ОбъектыПечати, 
            ПараметрыПечати);
            
    КонецЦикла;
    
    Возврат ТабличныйДокумент;

КонецФункции

Как сделать вывод управляемым?

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

Если вы хотите реализовать логику «в лоб» (без использования штатного метода), вы можете проверить:

Если ПараметрыПечати.Свойство("ПодписьИПечать") И ПараметрыПечати.ПодписьИПечать Тогда...

Однако использование УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью является более правильным, так как этот метод учитывает историю назначений ответственных лиц на дату документа и права доступа к картинкам.

Распространенные ошибки и способы их решения

Выясним, почему флажок может не работать, даже если код написан верно:

  1. Несоответствие версии БСП. Убедитесь, что в функции СведенияОВнешнейОбработке в свойстве ВерсияБСП указана актуальная версия (минимум 2.3.4 или выше).
  2. Имена рисунков. Ошибка в одну букву в имени рисунка в макете (например, ФаксимилеРуководителя вместо ФаксимилеРуководитель) приведет к тому, что картинка не будет найдена.
  3. Пустые сведения об организации. Если в структуре СведенияОДокументе не заполнено поле Организация, метод не сможет найти справочник, в котором хранятся файлы факсимиле.
  4. Кеширование ВПФ. При отладке не забывайте перезаписывать внешнюю обработку в справочнике «Дополнительные отчеты и обработки», так как 1С кеширует макеты и модули.

Заключение

Мы рассмотрели современный способ интеграции факсимиле во внешние печатные формы. Использование штатных методов ОбщегоНазначенияБП и УправлениеПечатьюБП позволяет сохранить единообразие интерфейса для пользователя и избежать написания велосипедов по поиску и вставке картинок. Помните, что ключевым моментом является связка: регистрация доп. параметров в начале + именованные рисунки в макете + вызов дополнения в конце.

← На главную