среда, 1 октября 2025 г.

Как сделать HTTP сервис в 1С УНФ для получения Заказа покупателя

Встала задача выгрузить как то из 1С УНФ форму заказа покупателя в формате 1С. 

Я не программирую на 1С и для меня это оказалось очень сложной задачей. В открытых источниках никакой внятной информации не нашел о том, как распечатать PDF файл в 1С УНФ. Всякий нейросети типа дипсика и чатГПТ оказались бессильны в этом вопросе. Результат публикую, с целью что бы поисковые системы заиндексировали это добро и может быть когда нибудь и кому нибудь эта информация окажется полезной. Как создавать HTTP сервис не описываю об этом много информации и роликов есть. Публикую только сам код который сохраняет PDF файл во временном файле и возвращает его.



Функция ПолучитьФайлЗаказаПолучитФайлЗаказа(Запрос)
УстановитьПривилегированныйРежим(Истина);
НомерЗаказа = Запрос.ПараметрыЗапроса.Получить("salesOrderCode");
ВыбЗаказ = Документы.ЗаказПокупателя.НайтиПоНомеру(СокрЛП(НомерЗаказа),ТекущаяДата());
Если ВыбЗаказ.Ссылка.Пустая() Тогда
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();  
ОтветСтруктура = Новый Структура; 
ОтветСтруктура.Вставить("status", false); 
ОтветСтруктура.Вставить("Description", "Заказ с номером "+НомерЗаказа+" не найден в БД!");
ЗаписатьJSON(ЗаписьJSON, ОтветСтруктура);  
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);     
Ответ.Заголовки.Вставить("Content-type", "application/json;charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
УстановитьПривилегированныйРежим(Ложь);
Возврат Ответ;
КонецЕсли;   
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ЗаказПокупателя");    
ПараметрыВывода       = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектыПечатиСчета = Новый СписокЗначений;  
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ВыбЗаказ.ПолучитьОбъект().Ссылка);
Документы.ЗаказПокупателя.Печать(МассивОбъектов,ПараметрыВывода,КоллекцияПечатныхФорм,ОбъектыПечатиСчета,ПараметрыВывода);   
СтрЗаказ                 = КоллекцияПечатныхФорм[0];
ТабЗаказ          = СтрЗаказ.ТабличныйДокумент;
ВремФайлЗаказа           = ПолучитьИмяВременногоФайла("pdf"); 
ТабЗаказ.Записать(ВремФайлЗаказа,ТипФайлаТабличногоДокумента.PDF);
order_name = "order_print_form";
Данные = Новый ДвоичныеДанные(ВремФайлЗаказа); 
//
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки["Content-Type"] = "application/pdf"; 
Ответ.Заголовки["Content-Disposition"] = 
"attachment; filename=""" + order_name + ".pdf""";
Ответ.Заголовки["Cache-Control"] = "private";
Ответ.УстановитьТелоИзДвоичныхДанных(Данные);
Возврат Ответ;
КонецФункции