Постановка задачи
Итак, возникла следующая задача: распечатывать нажатием одной кнопки комплект документов при приёме на работу сотрудника в ЗУП 3.1. Список печатных форм следующий:
- Приказ о приеме;
- Трудовой договор;
- Согласие на обработку персональных данных.
Все эти формы в нашей базе внешние, за исключением одного момента. В зависимости от того, кто подписывает в данный момент документы - генеральный директор или директор филиала по доверенности, распечатывается либо встроенный приказ о приеме на работу, либо доработанный.
Реализация
Реализация благодаря гибким механизмам БСП очень проста. В функцию "СведенияОВнешнейОбработке" добавляем одну-единственую команду с идентификаторами всех внешних печатных форм, которые должны распечататься в комплекте. В нашем случае это "ПриказОПриеме,ТрудовойДоговор,СогласиеНаОбработку".
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ПриемНаРаботу");
МассивНазначений.Добавить("Документ.ПриемНаРаботуСписком");
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Комплект документов");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Печать комплекта документов");
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Комплект документов'");
Команда.Идентификатор = "ПриказОПриеме,ТрудовойДоговор,СогласиеНаОбработку";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Истина;
Команда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура печати выглядит следующим образом:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, Отладка=ложь) Экспорт
ГенеральныйДиректор = КтоПодписываетДокументы();
//Приказ о приеме
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПриказОПриеме");
Если ПечатнаяФорма <> Неопределено Тогда
Если ГенеральныйДиректор Тогда
ПечатнаяФорма.ИмяВРЕГ = "ПФ_MXL_Т1";
Обработки.ПечатьКадровыхПриказов.Печать(МассивОбъектов, , КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Иначе
ВПФ = СоздатьВПФ("ПриказОПриеме");
ВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецЕсли;
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Приказ о приеме'");
КонецЕсли;
//ТД
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ТрудовойДоговор");
Если ПечатнаяФорма <> Неопределено Тогда
ВПФ = СоздатьВПФ("ТрудовойДоговорПРК");
ВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Трудовой договор'");
КонецЕсли;
//Согласие на обработку
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработку");
Если ПечатнаяФорма <> Неопределено Тогда
ВПФ = СоздатьВПФ("СогласиеНаОбработку");
ВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Согласие на обработку перс. данных'");
КонецЕсли;
Конецпроцедуры
На входе имеем пустую коллекцию печатных форм, где уже есть формы с вышеперечисленными идентификаторами ("ИмяВРЕГ"). Cоздаём экземпляр соответствующей ВПФ и обращаемся к её экспортной процедуре "Печать". Внимание! Идентификаторы печатных форм в комплекте и ВПФ должны совпадать!
Внешнюю печатную форму вызываем так:
Функция СоздатьВПФ(ИмяОбъекта)
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОбъекта).Ссылка.ХранилищеОбработки.Получить());
СтрокаВО = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Ложь);
ВООбъект = ВнешниеОбработки.Создать(СтрокаВО);
Возврат ВООбъект;
КонецФункции
Если документы подписывает генеральный директор, нужно вызвать стандартную процедуру печати из обработки "ПечатьКадровыхПриказов". Всё бы ничего, но идентификатор у встроенной печатной формы другой. Нет проблем! Просто заменяем его на нужный:
ПечатнаяФорма.ИмяВРЕГ = "ПФ_MXL_Т1";
И видим на выходе следующее:
Может, кому-нибудь этот материал окажется полезным.