helpf.pro
Регистрация
 +2 
Распечатать

1С Видео : Отдаем PDF файл через Web-сервис

В инфраструктурах, активно использующих возможности web-сервисов 1С, нередко возникает потребность получения не только массивов данных из базы, но и различных файлов. Сам файл через веб-сервис так просто не передашь, но на его основе можно создать объект ДвоичныеДанные, который, в свою очередь, уже сериализуется в base64Binary. После такой операции наш веб-сервис без проблем передает данные и получателю остается только выполнить на своей стороне обратное преобразование и сохранить файл.

В качестве примера такого механизма я буду создавать в 1С счет на оплату на основании переданных через сервис ИНН контрагента и суммы, и возвращать PDF печатной формы. На этот раз, кроме примеров кода, дополнительно был записан скринкаст разработки.

Для начала создадим в пустой конфигурации справочник "Контрагенты" с реквизитом "ИНН" и документ "Счет" с реквизитами "Контрагент" и "СуммаДокумента".

Теперь добавим пакет XDTO "test_ws"с пространством имен "http://www.test-ws.org", в котором опишем тип объекта "File". Он будет содержать свойства:

binaryData - (base64Binary (http://www.w3.org/2001/XMLSchema));

ext - string (http://www.w3.org/2001/XMLSchema);

message - string (http://www.w3.org/2001/XMLSchema).

Создаем web-сервис "DocWork", пространство имен "http://www.test-ws.org", выбираем пакет "http://www.test-ws.org". Добавляем в сервис операцию "CreateBill", возвращаемый тип File (http://www.test-ws.org), входные параметры:

INN - string (http://www.w3.org/2001/XMLSchema);

Summ - decimal (http://www.w3.org/2001/XMLSchema).

Код web-сервиса:

Код 1C v 8.3
 Функция CreateBill(INN, Summ)
 
 typeFile = ФабрикаXDTO.Тип("<a href="http://www.test-ws.org" ,"="">http://www.test-ws.org",</a> "File");
 
 текФайл = ФабрикаXDTO.Создать(typeFile);
 текФайл.binaryData = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("<a href="http://www.w3.org/2001/XMLSchema" ,"="">http://www.w3.org/2001/XMLSchema",</a> "base64Binary"));
 текФайл.ext = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("<a href="http://www.w3.org/2001/XMLSchema" ,"="">http://www.w3.org/2001/XMLSchema",</a> "string"));
 
 Если ПустаяСтрока(INN) ИЛИ Summ = 0 Тогда
  текФайл.message = "empty data";
  Возврат текФайл;
 КонецЕсли;
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
  "ВЫБРАТЬ ПЕРВЫЕ 1
  | Контрагенты.Ссылка
  |ИЗ
  | Справочник.Контрагенты КАК Контрагенты
  |ГДЕ
  | Контрагенты.ИНН = &ИНН";


 Запрос.УстановитьПараметр("ИНН", INN);


 Результат = Запрос.Выполнить().Выгрузить();
 Если Результат.Количество() = 0 Тогда
  текФайл.message = "client not found";
  Возврат текФайл;
 КонецЕсли;
 
 СчетДок = Документы.Счет.СоздатьДокумент();
 СчетДок.Дата = ТекущаяДата();
 СчетДок.Контрагент = Результат[0].Ссылка;
 СчетДок.СуммаДокумента = Summ;
 СчетДок.Записать();
 
 ТабДок = Новый ТабличныйДокумент;
 Документы.Счет.Печать(ТабДок, СчетДок.Ссылка);
 
 ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
 ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
 ДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
 
 текФайл.binaryData = ДанныеФайла;
 текФайл.message = "ok";
 текФайл.ext = "pdf";
 
 Возврат текФайл;
КонецФункции<br>   

Тестовая обработка

Код 1C v 8.3
 &НаСервере
Функция ПолучитьПДФ()


 ОпределениеВС = Новый WSОпределения("<a href="http://localhost/testWS/ws/ws1.1cws?wsdl" )"="">http://localhost/testWS/ws/ws1.1cws?wsdl")</a>;
 СсылкаВС = Новый WSПрокси(ОпределениеВС, "<a href="http://www.test-ws.org" ,"="">http://www.test-ws.org",</a> "DocWork", "DocWorkSoap");
 
 ФайлСервис = СсылкаВС.CreateBill(ИНН, Сумма);
 
 Возврат ФайлСервис.binaryData;


КонецФункции// ПолучитьПДФ()




&НаКлиенте
Процедура СоздатьСчет(Команда)
 
 мДанные = ПолучитьПДФ();
 Если мДанные = Неопределено Тогда
  Возврат;
 КонецЕсли;
 мДанные.Записать("c:\temp_bil.pdf");
 
КонецПроцедуры<br>   

А так же обещанное видео, как есть, без купюр )

Источник

Разместил:   Версии: | 8.2 УП | 8.3 | Видео |  Дата:   Прочитано: 35625
 +2 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
PostgreSQL: установка, настройка, обслуживание 12
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц
Внутреннее устройство PostgreSQL, в помощь администраторам 1С 1
Понимание архитектуры используемой СУБД очень важно для правильной эксплуатации, но местами переоценено: администратору, DevOps-специалисту или разработчику прикладных систем вовсе необязательно знать подробности внутреннего устройства B-дерева или
Как включить интерфейс такси в 1С 2
В этом видео уроке вы узнаете, как включить интерфейс Такси в 1С Бухгалтерия 8 предприятие. Такая возможность появилась, начиная с релиза 3.0.33.15, который вышел 30.05.2014. В видео оговорка: не не 30 июня, а 30 мая. Но даже, если у пользователя с
Курс по Мобильной платформе 1С (Вадим Сайфутдинов) 7
Курс по разработке мобильного приложения на мобильной платформе 1С:Предприятие, из которого Вы узнаете: 1. Как установить мобильную платформу 1с на мобильное устройство (телефон, планшет и т.д). 2. Научитесь создавать простую конфигурацию 1c для м
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!