УНФ 1.6 Программно сформировать типовую ПФ и сохранить

1. buketov_av 14.03.19 20:27 Сейчас в теме
Всем добрый вечер!

1С:Предприятие 8.3 (8.3.13.1644)
Управление нашей фирмой, редакция 1.6 (1.6.15.65)

Очень нужна помощь и подсказка.
Сделал внешнюю обработку, по расписанию она выполняет ряд действий, одно из действий это создание на основании счета на оплату, акта выполненных работ, счета фактуры, копирует старый счет на оплату и вносит в него некоторые изменения.
Так вот, теперь мне необходимо программно, из моей внешней обработки, сформировать типовые ПФ Акта выполненных работ, нового счет на оплату и УПД, сохранить и отправить клиенту, который указан в счете на оплату.
Как программно сформировать определенные типовые ПФ для определенных документов, затем их сохранить в pdf и все это дело отправить?
Всем заранее спасибо!
+
Найденные решения
8. spec8s 829 15.03.19 14:12 Сейчас в теме
(7) Немного не правильно подсказал, сама процедура печати в другом месте оказалась

ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); 
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УниверсальныйПередаточныйДокумент"); 
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); 

ОбъектыПечати = Новый СписокЗначений; 

МассивОбъектов = Новый Массив(); 
МассивОбъектов.Добавить(НовыйАктВР.Ссылка); 

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

СтрАкт = КоллекцияПечатныхФорм[0]; 
АктПФ = СтрАкт.ТабличныйДокумент; 
АктПФ.Защита = Истина; 
ВремФайлАкт = ПолучитьИмяВременногоФайла("pdf"); 
АктПФ.Записать(ВремФайлАкт,ТипФайлаТабличногоДокумента.PDF);
Показать
unknown181538; +1
13. buketov_av 18.03.19 08:53 Сейчас в теме
Вот таким образом победил правильное отображение файлов в отправляемом письме:

		       ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлСчета);
			Письмо.Вложения.Добавить(ДвоичныеДанные, Строка(ПродлевающийСчет) + ".PDF");
			
			ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлАкт);
			Письмо.Вложения.Добавить(ДвоичныеДанные, Строка(НовыйАктВР) + ".PDF");
			
			ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлУпд);
			Письмо.Вложения.Добавить(ДвоичныеДанные, Строка(НовыйСчетФактура) + ".PDF");

Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spec8s 829 14.03.19 22:37 Сейчас в теме
Для того чтобы формировать типовые нужно

1. Знать идентификаторы типовых печатных форм

Для этого открываем модуль менеджера нужного документа и ищем процедуру ДобавитьКомандыПечати(

2. Вызвать процедуру Печать() менеджера нужного документа

Пример с Актом выполненных работ в УНФ

 ИдентификаторКоманды = Обработки.ПечатьАктаОбОказанииУслуг.ИдентификаторПечатнойФормы(Ложь, Ложь);
	
	МассивОбъектов = Новый Массив;
	МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
	
	КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИдентификаторКоманды);
	
	Документы.АктВыполненныхРабот.Печать(
		МассивОбъектов, Новый Структура, КоллекцияПечатныхФорм, Новый СписокЗначений, 
		УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода());
		
	Если КоллекцияПечатныхФорм.Количество() = 1 Тогда
		
		ПутьСохранения = ПолучитьИмяВременногоФайла("pdf");
		КоллекцияПечатныхФорм[0].ТабличныйДокумент.Записать(ПутьСохранения, ТипФайлаТабличногоДокумента.PDF);
		
	КонецЕсли; 
Показать
+
3. spec8s 829 14.03.19 22:42 Сейчас в теме
Для отправки могу посоветовать метод РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение()
+
4. buketov_av 15.03.19 08:41 Сейчас в теме
на данный момент получилось сделать так, но пока не разобрался как УПД сформировать:
Код:
//получаем ПФ Счета на оплату для отправки по почту клиенту
            ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");   
            КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетНаОплату");   
            ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
           
            ОбъектыПечатиСчета = Новый СписокЗначений; 
           
            МассивОбъектов = Новый Массив();
            МассивОбъектов.Добавить(ПродлевающийСчет.Ссылка);
           
            Документы.СчетНаОплату.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечатиСчета, ПараметрыВывода);
           
            СтрСчет = КоллекцияПечатныхФорм[0];
            СчетНаОплатуПФ = СтрСчет.ТабличныйДокумент;
            СчетНаОплатуПФ.Защита = Истина;
            ВремФайлСчета = ПолучитьИмяВременногоФайла("pdf");
            СчетНаОплатуПФ.Записать(ВремФайлСчета,ТипФайлаТабличногоДокумента.PDF);
           
            //получаем ПФ Акта выполненных работ для отправки по почту клиенту
            ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");   
            КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("АктОбОказанииУслуг");   
            ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
           
            ОбъектыПечати = Новый СписокЗначений; 
           
            МассивОбъектов = Новый Массив();
            МассивОбъектов.Добавить(НовыйАктВР.Ссылка);
           
            Документы.АктВыполненныхРабот.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
           
            СтрАкт = КоллекцияПечатныхФорм[0];
            АктПФ = СтрАкт.ТабличныйДокумент;
            АктПФ.Защита = Истина;
            ВремФайлАкт = ПолучитьИмяВременногоФайла("pdf");
            АктПФ.Записать(ВремФайлАкт,ТипФайлаТабличногоДокумента.PDF);
            Письмо.Вложения.Добавить(ВремФайлСчета);            Письмо.Вложения.Добавить(ВремФайлАкт);
Показать
+
5. buketov_av 15.03.19 09:55 Сейчас в теме
но и как сформировать УПД, если для счета фактуры нет метода печать -
Метод объекта не обнаружен (Печать) Документы.СчетФактура.Печать
+
6. spec8s 829 15.03.19 11:06 Сейчас в теме
(5)Этот метод расположен в Акте выполненных работ
+
7. buketov_av 15.03.19 13:10 Сейчас в теме
(6)
чет не получается
подскажите тогда, пожалуйста, как и где указать, чтобы сформировался УПД, а не Акт выполненных работ

Код:
   //получаем ПФ Акта выполненных работ для отправки по почту клиенту
            ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");    
            КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("АктОбОказанииУслуг");    
            ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
            
            ОбъектыПечати = Новый СписокЗначений;  
            
            МассивОбъектов = Новый Массив();
            МассивОбъектов.Добавить(НовыйАктВР.Ссылка);
            
            Документы.АктВыполненныхРабот.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
            
            СтрАкт       = КоллекцияПечатныхФорм[0];
            АктПФ        = СтрАкт.ТабличныйДокумент;
            АктПФ.Защита = Истина;
            ВремФайлАкт  = ПолучитьИмяВременногоФайла("pdf");
            АктПФ.Записать(ВремФайлАкт,ТипФайлаТабличногоДокумента.PDF);
Показать
+
8. spec8s 829 15.03.19 14:12 Сейчас в теме
(7) Немного не правильно подсказал, сама процедура печати в другом месте оказалась

ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); 
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УниверсальныйПередаточныйДокумент"); 
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); 

ОбъектыПечати = Новый СписокЗначений; 

МассивОбъектов = Новый Массив(); 
МассивОбъектов.Добавить(НовыйАктВР.Ссылка); 

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

СтрАкт = КоллекцияПечатныхФорм[0]; 
АктПФ = СтрАкт.ТабличныйДокумент; 
АктПФ.Защита = Истина; 
ВремФайлАкт = ПолучитьИмяВременногоФайла("pdf"); 
АктПФ.Записать(ВремФайлАкт,ТипФайлаТабличногоДокумента.PDF);
Показать
unknown181538; +1
9. buketov_av 15.03.19 14:32 Сейчас в теме
(8)
Да, спасибо, это сработало. я смотрел на эту обработку )) Вы меня опередили ))
Единственная теперь проблема это то, что УПД сохраняется в альбомном варианте, что разделает ее на два листа.
И имена файлов непонятные. хотелось бы, чтобы они назывались так же ка ки в системе
+
10. buketov_av 15.03.19 15:02 Сейчас в теме
И вот итоговый код:

//получаем ПФ Счета на оплату для отправки по почту клиенту
			ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");	
			КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетНаОплату");	
			ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
			
			ОбъектыПечатиСчета = Новый СписокЗначений;  
			
			МассивОбъектов = Новый Массив();
			МассивОбъектов.Добавить(ПродлевающийСчет.Ссылка);
			
			Документы.СчетНаОплату.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечатиСчета, ПараметрыВывода);
			
			СтрСчет       		  = КоллекцияПечатныхФорм[0];
			СчетНаОплатуПФ 		  = СтрСчет.ТабличныйДокумент;
			СчетНаОплатуПФ.Защита = Истина;
			ВремФайлСчета         = ПолучитьИмяВременногоФайла("pdf");
			СчетНаОплатуПФ.Записать(ВремФайлСчета,ТипФайлаТабличногоДокумента.PDF);
			
			//получаем ПФ Акта выполненных работ для отправки по почту клиенту
			ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");	
			КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("АктОбОказанииУслуг");	
			ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
			
			ОбъектыПечати = Новый СписокЗначений;  
			
			МассивОбъектов = Новый Массив();
			МассивОбъектов.Добавить(НовыйАктВР.Ссылка);
			
			Документы.АктВыполненныхРабот.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
			
			СтрАкт       = КоллекцияПечатныхФорм[0];
			АктПФ        = СтрАкт.ТабличныйДокумент;
			АктПФ.Защита = Истина;
			ВремФайлАкт  = ПолучитьИмяВременногоФайла("pdf");
			АктПФ.Записать(ВремФайлАкт,ТипФайлаТабличногоДокумента.PDF);
			
			
			//получаем ПФ Акта выполненных работ для отправки по почту клиенту
			ОбъектДляСервера      = РеквизитФормыВЗначение("Объект"); 
			КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УниверсальныйПередаточныйДокумент"); 
			ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); 

			ОбъектыПечати = Новый СписокЗначений; 

			МассивОбъектов = Новый Массив(); 
			МассивОбъектов.Добавить(НовыйАктВР.Ссылка); 

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

			СтрАкт       = КоллекцияПечатныхФорм[0]; 
			АктПФ        = СтрАкт.ТабличныйДокумент; 
			АктПФ.Защита = Истина; 
			ВремФайлУпд  = ПолучитьИмяВременногоФайла("pdf"); 
			АктПФ.Записать(ВремФайлУпд,ТипФайлаТабличногоДокумента.PDF);			
		
			Письмо.Вложения.Добавить(ВремФайлСчета);
			Письмо.Вложения.Добавить(ВремФайлАкт);
			Письмо.Вложения.Добавить(ВремФайлУпд);

Показать
+
11. spec8s 829 15.03.19 15:51 Сейчас в теме
(10)
Письмо.Вложения.Добавить(ВремФайлСчета);


Письмо.Вложения.Добавить(ВремФайлСчета); - тут надо сином для вложений задать, тогда имя в письме будет корректное
+
12. buketov_av 15.03.19 16:08 Сейчас в теме
(11) Письмо.Вложения.Добавить(ВремФайлСчета, "Счет на оплату"); - так не работает, все равно в письмо отображается имя временного файла
+
13. buketov_av 18.03.19 08:53 Сейчас в теме
Вот таким образом победил правильное отображение файлов в отправляемом письме:

		       ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлСчета);
			Письмо.Вложения.Добавить(ДвоичныеДанные, Строка(ПродлевающийСчет) + ".PDF");
			
			ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлАкт);
			Письмо.Вложения.Добавить(ДвоичныеДанные, Строка(НовыйАктВР) + ".PDF");
			
			ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлУпд);
			Письмо.Вложения.Добавить(ДвоичныеДанные, Строка(НовыйСчетФактура) + ".PDF");

Показать
+
Внимание! Тема сдана в архив

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