Как подключить внешнюю печатную форму к нескольким видам документов в 1С

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

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

Шаг 1. Настройка функции СведенияОВнешнейОбработке в модуле объекта

Для конфигураций на управляемых формах (например, «1С:Управление торговлей 11», «1С:ERP», «1С:Комплексная автоматизация») параметры регистрации задаются в экспортной функции СведенияОВнешнейОбработке в модуле объекта внешней обработки.

Чтобы печатная форма стала доступна для нескольких объектов метаданных, заполним массив назначения соответствующими именами документов. Рассмотрим пример программного кода:


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

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор",   Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование",   Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор",     Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Шаг 2. Обновление обработки в режиме «1С:Предприятие»

Выясним частую причину, по которой после добавления нового документа в массив назначения печатная форма не появляется в командном интерфейсе. Изменения в коде внешней обработки, сохраненной на диске, не применяются к базе автоматически, пока файл не будет перезагружен в справочник.

Разберем порядок действий для обновления в пользовательском режиме:

  1. Откроем раздел НСИ и администрирование (или Администрирование) → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
  2. Найдем в списке нужную внешнюю печатную форму и откроем ее карточку.
  3. Нажмем кнопку Обновить из файла... и выберем сохраненный файл обработки.
  4. Проверим табличную часть Назначение (или поле Размещение): в ней должны отобразиться все добавленные виды документов.
  5. Нажмем Записать и закрыть.

Шаг 3. Обработка разных типов документов в процедуре печати

Поскольку процедура Печать модуля объекта получает массив ссылок на документы, которые могут принадлежать разным типам метаданных, проанализируем формирование данных для макета. Структура реквизитов реализации и возврата может отличаться.

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


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

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

Важные требования БСП к метаданным

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

  1. Точное совпадение имен: строка в МассивНазначений должна в точности соответствовать полному имени объекта метаданных, например, Документ.ВозвратТоваровПоставщику или Документ.ВозвратТоваровОтКлиента.
  2. Поддержка подсистемы печати: целевой документ должен быть подключен к подсистеме печати БСП. В модуле менеджера документа должна присутствовать процедура ДобавитьКомандыПечати, формирующая стандартное подменю Печать.
← На главную