Имя: Пароль:
1C
1С v8
УНФ 1.6 Программно сформировать типовую ПФ и сохранить
,
0 buketovav
 
14.03.19
20:06
Всем добрый вечер!

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

Очень нужна помощь и подсказка.
Сделал внешнюю обработку, по расписанию она выполняет ряд действий, одно из действий это создание на основании счета на оплату, акта выполненных работ, счета фактуры, копирует старый счет на оплату и вносит в него некоторые изменения.
Так вот, теперь мне необходимо программно, из моей внешней обработки, сформировать типовые ПФ Акта выполненных работ, нового счет на оплату и УПД, сохранить и отправить клиенту, который указан в счете на оплату.
Как программно сформировать определенные типовые ПФ для определенных документов, затем их сохранить в pdf и все это дело отправить?
Всем заранее спасибо!
1 Garykom
 
гуру
14.03.19
20:12
1. Посмотреть/изучить как они формируются в конфе
2. Сделать вызовы (в новых конфах с БСП это достаточно просто) этого формирования
3. Получить результат и сохранить куда нуна
2 Garykom
 
гуру
14.03.19
20:13
В журнале документов (форме списка) есть кнопочка "Печать" ? Вот глянуть туда например ))
3 buketovav
 
14.03.19
20:14
есть и общая команда "ОтправитьПоЭлектроннойПочте", но что-то я не могу понять как ее использовать в своих целях
4 Beduin
 
14.03.19
20:20
Я когда в институте учился, у меня лабораторка была, чтобы сделать 5 объектов и вывести их на печать.  
Мне препод двояк влепил, за то, что я не сделал универсальную функцию возвращающую печать для любого класса.
5 Garykom
 
гуру
14.03.19
20:48
(3) Вот когда сможешь понять "как ее использовать в своих целях" заодно поймешь за что такие зарплаты программистам платят, но не всем.
6 buketovav
 
14.03.19
20:59
(5) вот сижу и разбираюсь, очень хочу понять и разобраться )) такая задача у меня впервые
7 buketovav
 
15.03.19
08:40
на данный момент получилось сделать так, но пока не разобрался как УПД сформировать:
Код:
            //получаем ПФ Счета на оплату для отправки по почту клиенту
            ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");  
            КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетНаОплату");  
            ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
          
            ОбъектыПечатиСчета = Новый СписокЗначений;
          
            МассивОбъектов = Новый Массив();
            МассивОбъектов.Добавить(ПродлевающийСчет.Ссылка);
          
            Документы.СчетНаОплату.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечатиСчета, ПараметрыВывода);
          
            СтрСчет = КоллекцияПечатныхФорм[0];
            СчетНаОплатуПФ = СтрСчет.ТабличныйДокумент;
            СчетНаОплатуПФ.Защита = Истина;
            ВремФайлСчета = ПолучитьИмяВременногоФайла("pdf");
            СчетНаОплатуПФ.Записать(ВремФайлСчета,ТипФайлаТабличногоДокумента.PDF);
          
            //получаем ПФ Акта выполненных работ для отправки по почту клиенту
            ОбъектДляСервера      = РеквизитФормыВЗначение("Объект");  
            КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("АктОбОказанииУслуг");  
            ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
          
            ОбъектыПечати = Новый СписокЗначений;
          
            МассивОбъектов = Новый Массив();
            МассивОбъектов.Добавить(НовыйАктВР.Ссылка);
          
            Документы.АктВыполненныхРабот.Печать(МассивОбъектов,ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
          
            СтрАкт = КоллекцияПечатныхФорм[0];
            АктПФ = СтрАкт.ТабличныйДокумент;
            АктПФ.Защита = Истина;
            ВремФайлАкт = ПолучитьИмяВременногоФайла("pdf");
            АктПФ.Записать(ВремФайлАкт,ТипФайлаТабличногоДокумента.PDF);

            Письмо.Вложения.Добавить(ВремФайлСчета);          
            Письмо.Вложения.Добавить(ВремФайлАкт);
8 buketovav
 
15.03.19
09:55
но и как сформировать УПД, если для счета фактуры нет метода печать -
Метод объекта не обнаружен (Печать)  Документы.СчетФактура.Печать
9 buketovav
 
15.03.19
15:01
Решение:
Код:

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

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

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

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

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

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