bdd2

Выводим печатную форму документа в браузер

Опубликовал Андрей Данилюк (DanilaDru) в раздел Программирование - Практика программирования

Подход к выводу печатной формы документа в браузер без входа в 1с

В рамках поддержки API курьерской службы появилась необходимость открывать печатную форму 1с-документа в браузере без входа в саму конфигурацию. Данная функция понадобилась для возможности печати акта приема-передачи на стороне Контрагента. 

Ниже приведу общий подход реализации данной задачи.

Исходными данными будет признак, по которому мы будем искать документ для печати, например, номер документа (number).

На стороне 1с нам понадобится создать web-сервис, который на вход будет принимать номер документа и отдавать двоичные данные pdf-файла. Возвращаемый тип: string (http://www.w3.org/2001/XMLSchema)
На стороне web-сервера сознаём php-файл, который будет выводить данные файла, полученные из 1с.

Код в 1с:

Функция Print(number) 
    НайденныйДокумент = Документы.ЗаказПокупателя.НайтиПоНомеру(number);
    ТабДок = Документы.ЗаказПокупателя.Печать(НайденныйДокумент);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
    ТабДок.Записать(ИмяВременногоФайла,ТипФайлаТабличногоДокумента.PDF);
    ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
    Возврат Base64Строка(ДвоичныеДанные);
КонецФункции


Код в php:

<?php
    header("Content-type: application/pdf; charset=UTF-8");
    $client = new SoapClient("http://api.server.com/XMLPackage.1cws?wsdl", array('login'=> 'user', 'password'=> 'password', "cache_wsdl"=> WSDL_CACHE_MEMORY, "trace" => 1,"exceptions" => 1));
    $result = $client->Print(array("number" => $_REQUEST["number"]));
    try {
        echo base64_decode($result->return);
        }
    catch (Exception $e) 
      {echo $e->getMessage();
       return;
      }
?>

http://danila.org.ua/vyivodim-pechatnuyu-formu-dokumenta-v-brauzer-iz-1s/

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Leon (lnnd) (1.00 $m)
Добавить вознаграждение
Комментарии
1. Вадим . (tindir) 29.10.14 07:24 Сейчас в теме
С веб-сервисами всегда встает вопрос с количеством лицензий. идея хороша, НО есть вопрос где размещать php код? На лендинг пейдеже или в определенном разделе сайта организации или курьер таскает с собой на флешке веб страничку с явно указанными логинами и паролем (что не очень в плане безопасности)?
2. Ruslan (flyer) 146 29.10.14 08:09 Сейчас в теме
на вашем сайте много полезного материала. добавил в избранное. спасибо вам!
3. Евгений ' (WanGoff) 47 29.10.14 09:30 Сейчас в теме
Как по мне, немного банальный пост.
Но, может я ошибаюсь и она кому-то поможет. Лайки покажут.
igo1; EliasShy; qwinter; Трактор; +4 Ответить 1
4. Андрей Данилюк (DanilaDru) 229 29.10.14 11:07 Сейчас в теме
(3) WanGoff, спасибо за отзыв.
Наверное если бы я завернул это в подсистему, то было бы не так банально.
5. Андрей Данилюк (DanilaDru) 229 29.10.14 11:08 Сейчас в теме
(2) flyer, Спасибо. По мере решения задач пополняю блог постами :)
6. Андрей Данилюк (DanilaDru) 229 29.10.14 11:14 Сейчас в теме
(1) tindir, Я размещал php-файл в директориях рядом с публикацией веб-клиента.
Доступ предоставляется по API-ключу, который так же указывается параметром в веб-сервисе. На основании API-ключа происходит сопоставление с пользователем и далее отбирается доступная информация.
7. Евгений К (John_d) 219 29.10.14 11:21 Сейчас в теме
Интересно. Хорошая идея.
8. Евгений Аганин (AganinEvgeniy) 29.10.14 11:26 Сейчас в теме
Статья не плохая ... но я бы наверное ещё и отбор по периоду прикрутил. Не думаю, что у клиента нужно распечатывать данные за уже прошедшие годы...да и наверное и месяцы.
9. lefthander (lefthander) 29.10.14 11:41 Сейчас в теме
Огромное спасибо. Надеюсь это поможет мне решить аналогичное задание.
10. Андрей Данилюк (DanilaDru) 229 29.10.14 11:48 Сейчас в теме
(8) AganinEvgeniy, Спасибо. Это пример для демонстрации подхода. На рабочем варианте веб-сервис получает большее количество входных параметров.
11. John Smith (PiccaHut001) 29.10.14 15:15 Сейчас в теме
может, когда-нибуть, пригодится.
12. Антон Антонов (monkbest) 26 30.10.14 07:26 Сейчас в теме
а где пишется код 1С, в модуле чего?
13. Андрей Данилюк (DanilaDru) 229 30.10.14 07:43 Сейчас в теме
(12) monkbest, print() это метод операции веб-сервиса. Пишется в модуле веб-сервиса.
14. Антон Антонов (monkbest) 26 30.10.14 08:39 Сейчас в теме
(13) DanilaDru, блин ни разу не делал еще веб сервисов, потребности не было. Все хочу для самообучения попробовать, но никак не получается. Не попадается свежей законченной статьи, либо старые про 8.1/8.2 либо вот как эта. Очень часто читаю про них свежие статьи в ленте ИС, но вот как-то они все обгрызанные что ли. Из серединки контекста вырванные. Нет пошаговой инструкции от открытия конфигуратора, до запуска в браузере
15. Марина Семёнова (SemenovaMarinaV) 30.10.14 09:37 Сейчас в теме
Идея хороша, но утопична
16. Андрей Данилюк (DanilaDru) 229 30.10.14 09:51 Сейчас в теме
(15) SemenovaMarinaV, В чём утопичность?
17. Андрей Данилюк (DanilaDru) 229 30.10.14 09:52 Сейчас в теме
(14) monkbest, я не ставил целью научить читателя писать веб-сервисы, извините.
18. Антон Антонов (monkbest) 26 30.10.14 10:28 Сейчас в теме
(17) DanilaDru, да я понимаю, просто мысли в слух. Грубо говоря, чтобы повторить Ваш опыт, надо еще пяток статей прочитать сначала :)
19. lefthander (lefthander) 30.10.14 12:43 Сейчас в теме
(18) Это направление поиска и первый шаг. Конечно готового решения на все случаи жизни не существует.
20. Антон Антонов (monkbest) 26 30.10.14 13:33 Сейчас в теме
(19) lefthander, да мне не на все случаи, просто для саморазвития, понять суть механизмов. Как-то так случилось, что у заказчиков веб - не востребован, хотя во франче уже давно тружусь.
21. Марина Семёнова (SemenovaMarinaV) 13.11.14 16:37 Сейчас в теме
Наверное очень полезно, когда нибудь пригодится
22. Natali Yu (crazy.admin91119) 18.12.14 17:09 Сейчас в теме
Для кого то может быть очень полезная статья :)
для меня была интересна часть про 1С :-)
23. Mafoni (Mafoni) 12.01.15 15:45 Сейчас в теме
А как насчет безопастности сего решения ?
24. Андрей Данилюк (DanilaDru) 229 12.01.15 17:58 Сейчас в теме
(23) Mafoni, ограничиваете ролями доступ для пользователя, который указывается в SoapClient
25. Leon (lnnd) 11 17.03.15 15:55 Сейчас в теме