БСП. Настраиваемый комплект документов. Внешние печатные формы

В демо-конфигурации «БСП» есть пример реализации механизма «Настраиваемый комплект документов», использующий встроенные печатные формы. Эта статья — развитие темы в сторону использования в своей обработке других внешних печатных форм.

Постановка задачи

Итак, возникла следующая задача: распечатывать нажатием одной кнопки комплект документов при приёме на работу сотрудника в ЗУП 3.1. Список печатных форм следующий:

  • Приказ о приеме;
  • Трудовой договор;
  • Согласие на обработку персональных данных.

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

Реализация

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

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ПриемНаРаботу");
МассивНазначений.Добавить("Документ.ПриемНаРаботуСписком");

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Комплект документов");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Печать комплекта документов");

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

Возврат ПараметрыРегистрации;

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

Процедура печати выглядит следующим образом:

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

ГенеральныйДиректор = КтоПодписываетДокументы();

//Приказ о приеме
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПриказОПриеме");
Если ПечатнаяФорма <> Неопределено Тогда
Если ГенеральныйДиректор Тогда
ПечатнаяФорма.ИмяВРЕГ = "ПФ_MXL_Т1";
Обработки.ПечатьКадровыхПриказов.Печать(МассивОбъектов, , КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Иначе
ВПФ = СоздатьВПФ("ПриказОПриеме");
ВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецЕсли;
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Приказ о приеме'");
КонецЕсли;

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

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

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

На входе имеем пустую коллекцию печатных форм, где уже есть формы с вышеперечисленными идентификаторами («ИмяВРЕГ»). Cоздаём экземпляр соответствующей ВПФ и обращаемся к её экспортной процедуре «Печать». Внимание! Идентификаторы печатных форм в комплекте и ВПФ должны совпадать!

Внешнюю печатную форму вызываем так:

Функция СоздатьВПФ(ИмяОбъекта)

АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОбъекта).Ссылка.ХранилищеОбработки.Получить());
СтрокаВО = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Ложь);
ВООбъект = ВнешниеОбработки.Создать(СтрокаВО);

Возврат ВООбъект;

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

Если документы подписывает генеральный директор, нужно вызвать стандартную процедуру печати из обработки «ПечатьКадровыхПриказов». Всё бы ничего, но идентификатор у встроенной печатной формы другой. Нет проблем! Просто заменяем его на нужный:

ПечатнаяФорма.ИмяВРЕГ = "ПФ_MXL_Т1";

И видим на выходе следующее:

Может, кому-нибудь этот материал окажется полезным.

12 Comments

  1. Поручик

    Полезно. Запомним.

    Reply
  2. Новиков

    Спасибо!

    Reply
  3. fokin

    а подскажите в какой версии БП (3.0)

    есть возможность менять печатные формы местами?

    у нас на Бухгалтерия предприятия (3.0.47.28)

    и 1С:ERP Управление предприятием (2.2.3.205)

    нет возможности перемещать формы вверх/вниз

    они выстраиваются по-умолчанию по алфавиту

    Reply
  4. WhiteOwl

    (3) Посмотрела в БП, там для печати комплекта используется другая форма, изменить порядок печатных форм в ней не получится.

    Reply
  5. shoy

    Благодарю за такую подсказку.

    Reply
  6. LexSeIch

    Спасибо за публикацию. Берем на заметку.

    Reply
  7. maxx

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

    можно отправить на свой принтер

    Reply
  8. docerman

    А как можно при печати комплекта ввести свои параметры для передачи в печатные формы?

    Reply
  9. Поручик

    Вот и пригодилось.

    Reply
  10. Поручик

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

    Reply
  11. WhiteOwl

    (9) С параметрами в ВПФ под УФ вообще все непросто) Вот хорошая публикация по теме: https://infostart.ru/public/191796/

    Reply
  12. user1043839

    Почему то с этим кодом говорит что табличный документ не сформирован в обработчике печати, все пролазил не могу понять куда копать?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *