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