Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Синхронизация с сайтом
Чтобы передать массив в 1С в качестве параметра операции веб сервиса достаточно просто этому параметру указать тип anyType (http://www.w3.org/2001/XMLSchema). После чего, переданный из php массив, в 1С будет передан как СписокXDTO, который можно обходить в цикле.
Давайте создадим веб сервис и операцию "GetMass". Для этой операции добавим один параметр "param" типа anyType (http://www.w3.org/2001/XMLSchema) как показано на рисунке.
В принципе, это все что необходимо сделать.
Следующий код передает массив в 1С.
<?php
// устанавливаем кодировку
header("Content-Type: text/html; charset=UTF-8");
ini_set("soap.wsdl_cache_enabled","0");
// создаем клиент для веб-сервисов и вызываем операцию
$SoapClient1C = new SoapClient("http://ghostaz.no-ip.org/mass/ws/WebСервис?wsdl");
$Mass = array(1,2,3);
$Result = $SoapClient1C->GetMass(array("param"=>$Mass));
print_r($Result);
?>
В 1С в отладчике можно увидеть что params имеет тип СписокXDTO.
Соответственно возможен обход в цикле:
Функция GetMass(param)
Результат = 0;
Для каждого Значение из param.int цикл
Результат = Результат + Значение;
КонецЦикла;
Возврат Результат;
КонецФункции
Вместо типа anyType можно использовать другие типы, например, array из стандартных типов 1С datacore.
UPD от 01.09.2015:
По каким то причинам передать массив или структуру в веб сервис из 1С нельзя. Ругается на несоответствие типов. Но передать параметр можно, если в операцию передать ОбъектXDTO.
На рисунке приведен код, который передает структуру в 1С. Тип параметра WS операции должен быть Structure (http://v8.1c.ru/8.1/data/core).
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Синхронизация с сайтом
Давайте создадим веб сервис и операцию "GetMass". Для этой операции добавим один параметр "param" типа anyType (http://www.w3.org/2001/XMLSchema) как показано на рисунке.
В принципе, это все что необходимо сделать.
Следующий код передает массив в 1С.
<?php
// устанавливаем кодировку
header("Content-Type: text/html; charset=UTF-8");
ini_set("soap.wsdl_cache_enabled","0");
// создаем клиент для веб-сервисов и вызываем операцию
$SoapClient1C = new SoapClient("http://ghostaz.no-ip.org/mass/ws/WebСервис?wsdl");
$Mass = array(1,2,3);
$Result = $SoapClient1C->GetMass(array("param"=>$Mass));
print_r($Result);
?>
В 1С в отладчике можно увидеть что params имеет тип СписокXDTO.
Соответственно возможен обход в цикле:
Функция GetMass(param)
Результат = 0;
Для каждого Значение из param.int цикл
Результат = Результат + Значение;
КонецЦикла;
Возврат Результат;
КонецФункции
Вместо типа anyType можно использовать другие типы, например, array из стандартных типов 1С datacore.
UPD от 01.09.2015:
По каким то причинам передать массив или структуру в веб сервис из 1С нельзя. Ругается на несоответствие типов. Но передать параметр можно, если в операцию передать ОбъектXDTO.
На рисунке приведен код, который передает структуру в 1С. Тип параметра WS операции должен быть Structure (http://v8.1c.ru/8.1/data/core).
а можете выложить подробную статью как реализовать с нуля эту связку 8.2, C#, веб-сервис, передача по COM примитивную строку? очень нужно... http://www.develplatform.com/2012/12/com-2.html?showComment=1398425453191#c1822162368745664590
ОтветитьУдалитьотбой, разобрался сам :)
Удалитьхэлп плиз
ОтветитьУдалитьсоздаю простой массив
передаю его в сервис пишет:
Несоответствие типов (параметр номер '1')
сервис создал такой как описано выше.
пытался передавать и array и anyType . только строку (string) передает без ошибок
А вы в веб-сервисе указали тип параметра anyType?
Удалитьда, ставил array, anyType и string. Только строку норм передало.
Удалитьps
вышел из положения так.
Результат запроса выгружаю в ТЗ. Таблицу в хранилище значений. с хранилищем работаю через XMLСтрока() и XMLЗначение().
А как передать массив параметров из 1С на сторонний веб сервис? Через запятую или как? В ПОСТ запросе
ОтветитьУдалитьМожете почитать мою же статью о передаче массива http://codenotes-1c.blogspot.ru/2013/06/1-8_18.html
УдалитьКаждый сервер имеет свое АПИ, которое описывает структуру данных которую может принять. Так как я ее не знаю, то предлагаю самый простой для 1с вариант:
ОтветитьУдалить1 - создаете веб операцию которая в качестве выходного типа имеет тип Structure (http://v8.1c.ru/8.1/data/core)
2 - делаете обычную таблицу значений
3 - заполняете ее
4 - в веб сервисе пишете Возврат СериализаторXDTO.ЗаписатьXDTO(РезультатОперации);
Если делать как вы пишете через ПОСТ, то это уже не веб сервис это HTTPСоединение. Тут по быстрому не расскажешь. Вариантов много
Мистер Бенджамин сделал все возможное, чтобы помочь мне с моим кредитом, который я использовал, чтобы расширить мой аптечный бизнес. Они были дружелюбны, профессиональны и абсолютно самоотверженны. Я рекомендую всем, кто ищет кредит, связаться с нами. lfdsloans@outlook.com.WhatsApp ... + 19893943740.
ОтветитьУдалить