Получение печатной формы из внешней обработки

1. BaronBegemot 27.02.24 16:39 Сейчас в теме
В функции получаю печатные формы, для дальнейшей передачи через вложение.
Печатную форму Накладная(макет в документе) и РублевыеСуммыДокументаВВалюте(макет в обработке) получаю без проблем. Не понимаю, как получить печатную форму внешней печатной формы.
Что указывать в ИмяМенеджераПечати?

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

	Иначе
		Возврат Неопределено;
	КонецЕсли;  
	
	ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати);
	ТабДок = ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;
	ВременныйФайл = ПолучитьИмяВременногоФайла("XLSX");
	ТабДок.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.XLSX);
	ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл);
	
	Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные);
		
КонецФункции
Показать
По теме из базы знаний
Найденные решения
3. user1198928 28.02.24 09:54 Сейчас в теме
Как-то делала подобное в ERP, тоже надо было при отправке письма автоматически добавлять договор во вложения из внешней печатной формы. Делала так:
ВнешняяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта","имяВнешнейПечатнойФормы");
					ДвоичныеДанные = ВнешняяОбработка.ХранилищеОбработки.Получить();
					ИмяФайла = ПолучитьИмяВременногоФайла("epf");
					ДвоичныеДанные.Записать(ИмяФайла);
					ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла, Ложь);
					ПечатнаяФормаДоговора = ВнешняяОбработка.СформироватьПечатнуюФорму(ЗаказСсылка);
// СформироватьПечатнуюФорму - это имя экспортной процедуры из внешней печатной формы, 
// в моем случае она получает ссылку на заказ для формирования печатной формы договора
Показать


Далее получайте двоичные данные и передавайте куда-надо.
9. user1198928 28.02.24 15:19 Сейчас в теме
(7) Ну или еще как вариант, добавить во внешней обработке реквизит, например с именем ДляПередачи типа ТабличныйДокумент, в процедуре "Печать", присваивать ему значение сформированного табличного документа, и создать функцию, которая будет вызывать процедуру "Печать" и возвращать реквизит - ДляПередачи.
Например:
ПечатнаяФормаДоговора = ВнешняяОбработка.ПолучитьПечатнуюФорму(Выборка.Объект);


А в модуле внешней печатной формы:
Процедура Печать(Объект)
ТабличныйДокумент = Новый ТабличныйДокумент;
// его заполнение
.............
ДляПередачи = ТабличныйДокумент;
КонецПроцедуры

Функция ПолучитьПечатнуюФорму(Объект)
Печать(Объект);
Возврат ДляПередачи;
КонецФункции

Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
11. o4karek 28.02.24 17:05 Сейчас в теме
(1) Если просто получить макет, то примерно так:
objObject = FormAttributeToValue("Object");
Template = objObject.GetTemplate("ИмяМакета");

Object - это основной реквизит формы типа внешняя обработка
2. BaronBegemot 27.02.24 16:41 Сейчас в теме
ИмяМенеджераПечати = "ВнешняяПечатнаяФорма.ПФ_УПД_Бренд2";
ИменаМакетов = "УниверсальныйПередаточныйДокумент";


Вставляю название внешней печатной формы, так не срабатывает
3. user1198928 28.02.24 09:54 Сейчас в теме
Как-то делала подобное в ERP, тоже надо было при отправке письма автоматически добавлять договор во вложения из внешней печатной формы. Делала так:
ВнешняяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта","имяВнешнейПечатнойФормы");
					ДвоичныеДанные = ВнешняяОбработка.ХранилищеОбработки.Получить();
					ИмяФайла = ПолучитьИмяВременногоФайла("epf");
					ДвоичныеДанные.Записать(ИмяФайла);
					ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла, Ложь);
					ПечатнаяФормаДоговора = ВнешняяОбработка.СформироватьПечатнуюФорму(ЗаказСсылка);
// СформироватьПечатнуюФорму - это имя экспортной процедуры из внешней печатной формы, 
// в моем случае она получает ссылку на заказ для формирования печатной формы договора
Показать


Далее получайте двоичные данные и передавайте куда-надо.
4. BaronBegemot 28.02.24 11:34 Сейчас в теме
(3) Спасибо, буду пробовать
5. BaronBegemot 28.02.24 14:41 Сейчас в теме
(3) ПечатнаяФормаДоговора = ВнешняяОбработка.Печать(Выборка.Объект);
Вот когда так указываю процедуру, появляется ошибка: Обращение к процедуре объекта как к функции (Печать).
Это и логично, процедура ничего не возвращает, как быть?
6. user1198928 28.02.24 14:59 Сейчас в теме
(5) Попробуйте во внешней обработке процедуру "Печать" переделать на функцию с возвратом формируемого табличного документа.
7. BaronBegemot 28.02.24 15:02 Сейчас в теме
(6) Да такое решение в голову приходило, только не уверен, что это мне согласуют)
8. user1198928 28.02.24 15:10 Сейчас в теме
(7) ну вам в любом случае надо получать сформированный и заполненный табличный документ. Тут как ни крути, что-то где-то придется менять во внешней обработке. Вариант изменить процедуру на функцию, самый простой.
9. user1198928 28.02.24 15:19 Сейчас в теме
(7) Ну или еще как вариант, добавить во внешней обработке реквизит, например с именем ДляПередачи типа ТабличныйДокумент, в процедуре "Печать", присваивать ему значение сформированного табличного документа, и создать функцию, которая будет вызывать процедуру "Печать" и возвращать реквизит - ДляПередачи.
Например:
ПечатнаяФормаДоговора = ВнешняяОбработка.ПолучитьПечатнуюФорму(Выборка.Объект);


А в модуле внешней печатной формы:
Процедура Печать(Объект)
ТабличныйДокумент = Новый ТабличныйДокумент;
// его заполнение
.............
ДляПередачи = ТабличныйДокумент;
КонецПроцедуры

Функция ПолучитьПечатнуюФорму(Объект)
Печать(Объект);
Возврат ДляПередачи;
КонецФункции

Показать
10. BaronBegemot 28.02.24 16:51 Сейчас в теме
Спасибо, реализовал через реквизит
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот