Веб-сервисы 1С и PHP

Публикация № 689184

Обмен - Интеграция с WEB

Веб сервис php web service

30
Пример создания веб-сервиса на 1С, использование пагинации в запросах 1С, примеры кода на php - передача параметров, получение и разбор данных.

Как мне кажется, очень актуальная тема, на сегодняшний день. В последнее время часто приходится сталкиваться с задачами, в которых нужно использовать базу 1С для отображения различных данных на веб-сервере.

Итак, инструменты:

Apache 2.4, php 7, Платформа 1С 8.3.10.2252, База 1С режим совместимости 8.2.13

Как установить Apache 2.4 и php 7, я описывать не буду (много примеров в инете).

А вот, после публикации веб сервиса 1С, я отредактировал .vrd файл, добавил в него данные о имени пользователя и пароля, для того, чтобы при подключении к веб сервису не требовалось авторизации.

Описание модуля ExchangeData:

  1. Метод TestWS() – возвращает информацию о версии модуля.
  2. Метод GetGoods() – возвращает список товаров с ценами, как вариант для примера
  3. Метод GetConstantList() – возвращает список констант и их значения
  4. Метод GetCatalogItems(Param1) - возвращает список элементов справочника, с поддержкой пагинации

Параметры(Param1[].Key):

        Обязательные:

                       CatalogName - Название справочника

        Предопределенные:

                       IsDelete - помеченные на удаление (устанавливает отбор)

                       IsGroup  - это группа (устанавливает отбор)

                       Parent   - родитель (устанавливает отбор)

                       Owner    - владелец, если справочник подчинённый (устанавливает отбор)

                       SizePart - кол-во возвращаемых записей <> 0

                       PartNumb - номер возвращаемой порции <> 0

  1. Метод GetItem(Param1) - Возвращает все поля объекта с их значениями, в.ч. и табличные части. Используется для получения информации об элементе справочника или документе.

Параметры(Param1):

        Обязательные:

                       GUID - универсальный идентификатор

                       TypeValue - описание типа ссылки

  1. Метод GetDocumentItems(Param1) - Возвращает список документов, с поддержкой пагинации

 Параметры(Param1[].Key):

        Обязательные:

                       DocumentName - Название документа

                       DateStart - начало периода (дд.мм.гггг чч.мм.сс)

                       DateEnd - конец периода (дд.мм.гггг чч.мм.сс)

        Предопределенные:

                       IsDelete - помеченные на удаление (устанавливает отбор)

                       Posted   - проведен (устанавливает отбор)

                       SizePart - кол-во возвращаемых записей <> 0

                       PartNumb - номер возвращаемой порции <> 0

 

  1. Метод GetInformationRegisterItems(Param1) - Возвращает данные из регистра сведений

Параметры(Param1[].Key):

        Обязательные:

                       RegisterName - Название регистра сведений

                       Date - только для периодических (дд.мм.гггг чч.мм.сс)

        Предопределенные:

                       Slice    - (0 - выборка данных, 1 - срез первых, 2 - срез последних)

                                                                      значение по умолчанию = 0

<ИмяИзмерения> - (устанавливает отбор)

  1. Метод PrintDocument(Param1) - Возвращает печатную форму документа

Параметры(Param1[].Key):

        Обязательные:

                       DocumentRef - ссылка на документ

                       BlankName - название печатного бланка

Для реализации метода PrintDocument(Param1), пришлось немного корректировать модуль документа. Реализовано только для расходных накладных.

Кроме тестовой конфигурации, к статье прилагаются php файлы, с примерами использования данных методов. В этих файлах, я не ставил задачу красиво отобразить данные из базы 1С.

30

Скачать файлы

Наименование Файл Версия Размер
Примеры на PHP
.rar 5,29Kb
20.10.17
22
.rar 5,29Kb 22 Скачать
Тестовая база
.dt 63,43Mb
20.10.17
17
.dt 63,43Mb 17 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. starik-2005 1867 20.10.17 14:22 Сейчас в теме
2. serg1234 30 20.10.17 14:50 Сейчас в теме
да, в этом примере есть код php в котором есть вызов метода сервиса и передача параметров

1. но нет примера на 1С, где можно увидеть как эти параметры получить
2. параметры передаются стандартных типов (http://www.w3.org/2001/XMLSchema), а в моих примерах используются типы XDTO пакета описанного в 1с
3. у меня приводится пример использования пагинации в 1с запросах
3. starik-2005 1867 21.10.17 22:57 Сейчас в теме
1. Как получить? Глупость спросили. Эти параметры указываются у функции веб-сервиса в качестве входящих. Правой кнопкой на функции и "добавить параметр".
2. Никто не мешает передать параметры "любых типов", ибо в любом случае это строка. SOAP для полноценного веб-приложения уже мало кто использует - все давно живут в эпоху REST-API, oData и прочего, когда параметры передаются в виде json, а в последнее время и в виде чистого бинарника. Все эти выкрутасы с XDTO идут лесом.
3. У Вас вообще примеров никаких не приводится - одни названия функций и чуть-чуть слов о том, что они делают. Пользу сообществу статья не несет (на мой сугубо личный взгляд).
5. serg1234 30 22.10.17 11:08 Сейчас в теме
Возможно мы говорим о разных вещах, приведите пример использования REST API и 1С.
6. starik-2005 1867 22.10.17 13:11 Сейчас в теме
(5) REST-API - это базовый функционал 1С. При публикации его на вебсервере внешние приложения получают доступ к объектам 1С без дополнительного кода со стороны 1С. Нужно просто вызвать функцию веб-сервера "GET http://myserver.com/1cbase/odata/standard.odata/Catalog_Контрагенты HTTP/1.1", чтобы получить на выходе список контрагентов. Это работает даже в Excel, т.е. можно получить список объектов 1С без программирования на 1С.

По поводу реализации собственного REST-API, то есть объект HTTPСервис в 1С (рядом с WEBСерсисами). Создаете сервис, создаете для него шаблон URL, дальше указываете метод (GET/PUT/POST/.... - стопиццот вариантов, включая "любой"), пишите функцию, на входе которой будет объект HTTPСервисЗапрос, а в качестве ответа будет возвращен объект HTTPСервисОтвет. Устанавливаете код ответа, тело ответа и возвращаете. Все входящие параметры в теле запроса (хоть json, хоть двоичные данные). Профит!
12. serg1234 30 23.10.17 10:07 Сейчас в теме
(6)

Я так понимаю у тебя уже есть опыт использования REST-API на практике.
У меня есть вопрос:
К примеру, я опубликовал базу, дал доступ к справочнику "Номенклатура", в котором 100 тыс. записей. Могу ли я, как нибудь отловить ситуацию когда выполняется запрос на выдачу сервером всех записей справочника, и заблокировать отдачу такого объема информации?

Если это возможно, напиши как это сделать, если не трудно.
13. Rustig 1167 30.11.18 17:31 Сейчас в теме
(12) не могу отправить вам сообщение в личку, не знаете почему?
7. serg1234 30 22.10.17 16:53 Сейчас в теме
ну как я понял, все претензии сводятся к тому, что я привел пример, так скажем, слегка устаревший.....

>> все давно живут в эпоху REST-API, oData и прочего, когда параметры передаются в виде json, а в последнее время и в виде чистого бинарника.
>>Все эти выкрутасы с XDTO идут лесом.

https://infostart.ru/public/565435/ - это ссылка на статью где детально описывается про REST API, и конечно в комментариях можно прочитать о недостатках использования такого решения...

Я ничего не имею против использования REST-API, oData, я просто привел свой пример использования веб сервисов 1С.
8. olo_lo4 22.10.17 17:35 Сейчас в теме
(0) вот лови хороший пример

http://1с-интеграция.рф/useful_links/49/375/

я на этом примере учился когда то из под PHP обмениваться
V.Nikonov; +1 Ответить
9. starik-2005 1867 22.10.17 19:36 Сейчас в теме
(8)
на этом примере
И такой PHP-г-но-код на сайте 1С! Представляю, что там в исходниках...
10. olo_lo4 22.10.17 19:42 Сейчас в теме
(9) Sergey Andreev тут важен пример и пинок на старте. А сам код вы сможете и адаптировать и оптимизировать.
11. starik-2005 1867 22.10.17 19:44 Сейчас в теме
(10)
важен пример
Пример важен. Поэтому такой пример недопустим, ибо одно это чего стоит!
// 1. Получим строковые данные из входящего файла 
$json_filedata = file_get_contents('php://input'); 
// 2. Отрежем все лишнее (добавляются 2 служебных символа), что // мешает преобразованию из JSON 
$jsData = trim(ltrim($json_filedata)); 
$dlinaStr = strlen($jsData); 
$_jsData = ''; 
$i=1; 
while ($i<$dlinaStr) { 
if ($i>2) { 
$_jsData = $_jsData.substr($jsData, $i, 1); 
} 
$i++; 
} 
// 3. Преобразуем данные из JSON в объект (структуру) 
$mData = json_decode($_jsData); 
Показать
Ну нахрена так извращаться??? Достаточно ltrim (т.е. все это г-но заменяется на одну строку).
Оставьте свое сообщение