Как добавить печать факсимиле во внешнюю печатную форму в 1С:Управление торговлей 11?

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

В процессе работы с программой 1С:Управление торговлей 11 часто возникает необходимость кастомизации печатных форм. Одной из самых востребованных задач является добавление возможности печати факсимиле (изображений печати и подписей ответственных лиц) во внешнюю печатную форму (ВПФ). Рассмотрим подробно техническое руководство по интеграции печатей и подписей, чтобы понять, как реализовать этот механизм, даже если вы не являетесь профессиональным разработчиком, а выполняете функции администратора системы — для этого подойдёт редактор печатных форм и факсимиле для 1С.

Подготовительный этап: Настройка программы

Прежде чем приступать к правке программного кода, проанализируем, откуда программа берет изображения. В конфигурациях на базе Библиотеки Стандартных Подсистем (БСП), таких как УТ 11 или ERP, факсимиле привязано к карточке организации. Выполним следующие действия:

  1. Перейдем в справочник Организации.
  2. Откроем нужную организацию и перейдем на вкладку Настройка печати.
  3. Убедимся, что загружены файлы в поля Печать, Подпись руководителя и Логотип.
  4. Проверим формат файлов: рекомендуется использовать PNG с прозрачным фоном, чтобы при наложении печати на подпись или текст не возникало некрасивых белых прямоугольников.

Шаг 1: Регистрация команд во внешней обработке

Разберем структуру функции СведенияОВнешнейОбработке. Чтобы пользователь мог выбирать, печатать документ с факсимиле или без, нам нужно зарегистрировать две разные команды. Проанализируем пример кода для модуля объекта обработки, на примере которого часто строится логика в таких решениях, как Счет-договор для УТ 11.5 с поддержкой факсимиле:


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

Обратите внимание на параметр Идентификатор (третий параметр в ДобавитьКоманду). Мы будем использовать его далее, чтобы определить, какую именно кнопку нажал пользователь.

Шаг 2: Реализация процедуры Печать

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


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

Шаг 3: Основная логика формирования документа

Рассмотрим подробнее функцию СформироватьПечатнуюФорму. Главный секрет здесь заключается в использовании стандартного метода БСП ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент. Вы также можете применить универсальный механизм вывода факсимиле, который берет на себя всю сложную работу по поиску картинок и их позиционированию — есть универсальная обработка подстановки печатей и подписей.


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

Шаг 4: Подготовка макета (MXL)

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

Важный нюанс: установите свойство рисунка Граница в значение "Нет линии", а свойство ЦветФона — "Авто". Это позволит картинке выглядеть нативно на фоне документа.

Разбор типичных ошибок

Если код выдает ошибку Процедура или функция с указанным именем не определена, проанализируем следующие моменты:

  1. Область видимости: Проверьте, что функция СформироватьПечатнуюФорму находится в том же модуле, что и процедура Печать, или является экспортной в другом модуле.
  2. Точность имен: 1С чувствительна к синтаксису. Если в коде написано СформироватьПечатнуюФорму, а сама функция называется СформироватьПечать, возникнет ошибка компиляции.
  3. Параметры БСП: Убедитесь, что ваша версия конфигурации поддерживает вызываемые методы. В очень старых версиях УТ 11.0 методы БСП могли называться иначе, но для 11.4 и выше приведенный выше код актуален.

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

← На главную