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

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 | Видео |  Дата:   Прочитано: 6657
 +1 
Распечатать
Возможно, вас также заинтересует
PostgreSQL: установка, настройка, обслуживание 2
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут...
Внутреннее устройство PostgreSQL, в помощь администраторам 1С 0
Понимание архитектуры используемой СУБД очень важно для правильной эксплуатации, но местами переоценено: администратору, DevOps-специалисту или разработчику прикладных систем вовсе необязательно знать подробности...
Как включить интерфейс такси в 1С 1
В этом видео уроке вы узнаете, как включить интерфейс Такси в 1С Бухгалтерия 8 предприятие. Такая возможность появилась, начиная с релиза 3.0.33.15, который вышел 30.05.2014. В видео оговорка: не не 30 июня, а 30 мая. Но даже, если у...
Курс по Мобильной платформе 1С (Вадим Сайфутдинов) 3
Курс по разработке мобильного приложения на мобильной платформе 1С:Предприятие, из которого Вы узнаете: 1. Как установить мобильную платформу 1с на мобильное устройство (телефон, планшет и т.д). 2. Научитесь создавать...
Мобильное приложение в 1С: Двусторонний обмен 2
Сделаем двусторонний обмен документами между мобильным приложением и центральной базой 1С: Автор: Кухар Богдан
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.