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

Печать - Печатные формы документов

внешняя печатная форма комплект документов БСП

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

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

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

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

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

Реализация

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

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

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

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

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

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

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

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

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

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

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

89

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. Поручик 4153 12.06.17 20:00 Сейчас в теме
2. Новиков 289 13.06.17 10:33 Сейчас в теме
3. fokin 13.06.17 11:40 Сейчас в теме
а подскажите в какой версии БП (3.0)
есть возможность менять печатные формы местами?

у нас на Бухгалтерия предприятия (3.0.47.28)
и 1С:ERP Управление предприятием (2.2.3.205)

нет возможности перемещать формы вверх/вниз
они выстраиваются по-умолчанию по алфавиту
4. WhiteOwl 244 14.06.17 12:40 Сейчас в теме
(3) Посмотрела в БП, там для печати комплекта используется другая форма, изменить порядок печатных форм в ней не получится.
5. shoy 19 14.06.17 17:25 Сейчас в теме
Благодарю за такую подсказку.
7. LexSeIch 194 06.07.17 07:41 Сейчас в теме
Спасибо за публикацию. Берем на заметку.
8. maxx 653 18.09.17 13:21 Сейчас в теме
У нас есть свой механизмик небольшой по комплекту, главный Момент что каждую печатной.форму
можно отправить на свой принтер
9. docerman 43 19.09.17 11:54 Сейчас в теме
А как можно при печати комплекта ввести свои параметры для передачи в печатные формы?
12. WhiteOwl 244 05.11.17 23:07 Сейчас в теме
(9) С параметрами в ВПФ под УФ вообще все непросто) Вот хорошая публикация по теме: https://infostart.ru/public/191796/
10. Поручик 4153 27.09.17 10:39 Сейчас в теме
11. Поручик 4153 28.09.17 23:38 Сейчас в теме
У меня условия были посложнее. Формировать комплект из разных документов в УТ 11 в зависимости от налогообложения и формы оплаты, указанных в соглашении реализации, то есть набор печатных форм заранее неизвестен. Вывернулся с помощью "динамической" генерации коллекции печатных форм в процедуре печати.
13. user1043839 05.09.18 09:52 Сейчас в теме
Почему то с этим кодом говорит что табличный документ не сформирован в обработчике печати, все пролазил не могу понять куда копать?
Оставьте свое сообщение