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