Консультация Беларусь
Консультация Россия
Блог

БСП: Как программно сформировать внешнюю печатную форму

На практике встречаются задачи, когда нужно из произвольной формы по кнопке формировать внешнюю печатную форму, которая подключена к базе через справочник "Дополнительные отчеты и обработки", входящий в одноименную подсистему БСП:
Для формирования внешней печатной формы можно использовать метод ПечатьПоВнешнемуИсточнику() общего модуля ДополнительныеОтчетыИОбработки:
Рассмотрим на конкретном примере. Конфигурация "1С: Управление торговлей, редакция 11 (11.5.8.267)". Для документа "Заказ клиента" разработана внешняя печатная форма "Гарантийный талон" с одной командой печати:
Идентификатор команды можно посмотреть в модуле объекта обработки, предварительно сохранив обработку в файл. В рассматриваемом примере идентификатор команды печати совпадает с именем внешней обработки - "ЗаказКлиента_ГарантийныйТалон":
Создадим внешнюю обработку с 3-мя реквизитами:
  • Заказ клиента (ссылка на документ)
  • Печатная форма (ссылка на внешнюю обработку)
  • Идентификатор команды (строка)
В форме обработки разместить кнопку "Сформировать", при нажатии на которую будем формировать внешнюю печатную форму:
Ниже приведен программный код, который решает нашу задачу:
&НаКлиенте
Процедура Сформировать(Команда)
	
	Если НЕ ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	// 1. Формирование печатной формы (на сервере)
	ТабДок = СформироватьВнешнююПечатнуюФорму(Объект.ЗаказКлиента, Объект.ПечатнаяФорма, Объект.ИдентификаторКоманды);
	
	// 2. Открытие сформированной печатной формы
	КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(Объект.ИдентификаторКоманды);
	КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;                                 
	
	УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,, ЭтотОбъект);
	
КонецПроцедуры    

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

	// Ключевое - вызов метода, который отвечает за формирование внешней печатной формы.
	// Сформированная печатная форма добавляется в таблицу КоллекцияПечатныхФорм
	ДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику(ПечатнаяФорма, ПараметрыИсточника, 
																КоллекцияПечатныхФорм, ОбъектыПечати, Неопределено); 
																
	Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
		ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
	Иначе                                                   
		ТабДок = Новый ТабличныйДокумент;
	КонецЕсли;                          
	
	Возврат ТабДок;

КонецФункции
Результат работы приведенного выше кода:
Файл внешней обработки с описанным в статье примером можно скачать по ссылке: https://clck.ru/34dMvC
Кстати, вы уже подписаны на наш Youtube-канал?
Нет? Тогда самое время подписаться!
Там мы публикуем суперполезный контент про 1С и проводим тематические стримы ;)
БСП Программирование