Имя: Пароль:
1C
1С v8
Ошибка при обращению к Web-сервису
0 Javist
 
16.03.16
13:31
Смысл таков. Из вне с помощью php скрипта обращаемся к Web-сервису. В него передаем параметр, а именно номер телефона в ответ мы хотим получить Контрагента.
Создали операцию GetParam
Тип возравщаяемого String
Создали параметр number
далее в модуле пишем
Функция GetParam(number)
    возврат number;
КонецФункции

Далее обращаемся скриптом к веб сервису и у нас приходит ответ
object(stdClass)#2 (1) { ["return"]=> string(11) "34263947634" }

Далее мы редактируем модуль
Запрос.Текст = "
      |ВЫБРАТЬ
      |КонтактнаяИнформация.Объект
      |ИЗ
      |РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
      |ГДЕ
      |КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента)
      |И
      |КонтактнаяИнформация.Представление ПОДОБНО &Телефон ";
       Запрос.УстановитьПараметр("Телефон", number);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            number = Выборка.Объект;            
        КонецЦикла;

    возврат number;
КонецФункции

И у нас появляется при обращении скриптом ошибка 500
Что не так?
1 Javist
 
16.03.16
13:43
Кто нибудь работал с веб сервисами?
2 Dmitriy_76
 
16.03.16
13:45
попробуй так

        Если Выборка.Следующий() Тогда
            number = Выборка.Объект.Наименование;            
        Иначе
            number = "";            
        Конецесли;
3 Javist
 
16.03.16
13:50
(2) то же самое
4 Javist
 
16.03.16
13:50
верней та же самая ошибка
5 Javist
 
16.03.16
13:52
(2) Причем код выше в обычных модулях отрабатывает нормально.
6 Serginio1
 
16.03.16
13:52
Ну и права на РегистрСведений.КонтактнаяИнформация  и Справочник.ВидыКонтактнойИнформации должен быть.
Вообще лучше сначачала отлаживать локально, а затем уже отлаживать через вэб сервис.
Выноси методы в отдельный модуль, а из вэб сервисов дергай их. Так же пиши ошибки в ЖР
7 Serginio1
 
16.03.16
13:54
Например

Функция CreateOrder(TablePrices)
    // Вставить содержимое обработчика.
    Попытка
      возврат акВэбСервисы.CreateOrder(TablePrices)
      Исключение
    СтрОшибки=ОписаниеОшибки();
    ЗаписьЖурналаРегистрации("CreateOrder",УровеньЖурналаРегистрации.Ошибка,,,СтрОшибки);
    ВызватьИсключение СтрОшибки;

    КонецПопытки

КонецФункции
8 Serginio1
 
16.03.16
13:57
Ну и number = Выборка.Объект;
Это никак не string
Или сериализуй через СериализаторXDTO или возвращай простой тип
9 Javist
 
16.03.16
14:01
(7) т.е у тебя аквэбСервисы где то в общих модулях?
10 Serginio1
 
16.03.16
14:05
(9) Да его проще отлаживать локально.
11 Serginio1
 
16.03.16
14:08
Ну и отлаживать проще через 1С
Веб сервисы 1с и SoapUi
12 Javist
 
16.03.16
14:54
(11) вынес в общий модуль
из модуля веб сервиса вызываю
Функция GetParam(number)
    number = ТМаршрут.ВахВах(number);
    возврат number;
КонецФункции

Общий модуль Поставил галочку Привелигированный
И все равно ошибка 500
13 Serginio1
 
16.03.16
15:08
Еще раз, что за тип возвращает ТМаршрут.ВахВах(number)?
Смотри 9

v8: Ошибка при вызове web-сервиса 1C 8.3 (Внутренняя ошибка. Ошибка инициализации б)
14 Serginio1
 
16.03.16
15:08
Пиши в ЖР ошибки.
15 Javist
 
16.03.16
15:14
(13)
Выборка.Объект
16 Javist
 
16.03.16
15:14
Как быть если не хочется использовать XTDO?
17 Serginio1
 
16.03.16
15:15
(16) Читай ссылки. Смотри 13
18 Javist
 
16.03.16
16:34
(17) Когда я получаю значение из пхп скрипта в веб сервисе и потом делаю запрос. Мне нужно делать десериализацию? Или достаточно сериализовать?
19 Serginio1
 
16.03.16
16:41
(18) Зачем тебе в ПХП объект? Проще его сериализовать в JSON строку
20 Serginio1
 
16.03.16
16:44
21 Serginio1
 
16.03.16
16:53
22 Javist
 
16.03.16
16:59
хор, но сначала на XML реализую (20)
(21) спасибо
23 Javist
 
16.03.16
17:07
(21) у меня только вопрос.
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient("http://192.168.1.1/test/ws/ws1.1cws?wsdl"; , array('login' => "admim", 'password' => "2$
$params["number"] = "343434";
$result = $client->GetParam($params);
Var_dump($result);
?>


Скрипт передает в веб сервис number
Далее когда я этот number пихаю в запрос. Этот Number нужно десериализовать?
24 Serginio1
 
16.03.16
17:16
Если ты укажешь нужный возвращаемый тип (XDTO), то все автоматически сериализеутся десериализуется.
25 Serginio1
 
16.03.16
17:18
Number  у тебя строка. А вот то, что ты возвращаешь Выборка.Объект строкой не является
26 Javist
 
16.03.16
17:20
(25) Возвращю Выборка.Тип
Пока дебаг у меня :)
Просто этот запрос еще вершина айсберга. Там дальше пойдут запросы.
27 Javist
 
16.03.16
17:20
на основе его
28 Serginio1
 
16.03.16
17:24
(27) Читай 21 разбирайся с ФабрикаXDTO ОбъектXDTO итд
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс