Имя: Пароль:
1C
1С v8
Ошбика веб-сервисе: Обязательное возвращаемое значение не задано
, ,
0 YVGroshkov
 
24.12.12
16:44
Функция test()
   ПеременнаяМассив = Новый Массив(4);
   ПеременнаяМассив.Вставить(0, "Нулевой");
   ПеременнаяМассив.Вставить(1, "Первый");
   ПеременнаяМассив.Вставить(2, "Второй");
   ПеременнаяМассив.Вставить(3, "Третий");
   Возврат ПеременнаяМассив;
КонецФункции

XDTO http://v8.1c.ru/8.1/data/core
тип Array

Где я ошибся?
1 На стороне добра
 
24.12.12
17:06
Как воспроизвести ситуацию?
2 YVGroshkov
 
24.12.12
17:10
Создать веб сервис с операцией test
код модуля веб-сервиса приведён выше
в xdto веб-сервиса нужно указать http://v8.1c.ru/8.1/data/core
Потом из скрипта обратиться вот так:

$client = new SoapClient('http://192.168.0.98/bb/ws/bb?wsdl',
                                       array(
                                               'login' => "user",
                                               'password' => "pass",
                                               'trace' => 1,
                                               'exeption' => 1
                                           )
                                   );
           
           try {
               echo "<pre>\n";
                   VarDumper::dump($client->test());
               echo "\n</pre>\n";
           } catch (SoapFault $exception) {
               echo $exception;
           }

           echo "<hr />";
           echo "<pre>";
           echo "Запрос :\n".htmlspecialchars($client->__getLastRequest()) ."\n";
           echo "Ответ:\n".htmlspecialchars($client->__getLastResponse())."\n";
           echo "</pre>";
3 YVGroshkov
 
24.12.12
17:13
блин, что-то форма ссылки уродует :(
4 Serginio1
 
24.12.12
17:14
Ну есть два подхода
XmlСтрока(ПеременнаяМассив);

Тип=ФабрикаXDTO.Тип(ИмяПространстваИмен,"Array");

Тип=ФабрикаXDTO.Создать(Тип,ПеременнаяМассив);
5 Serginio1
 
24.12.12
17:17
СериализаторXDTO.ЗаписатьXDTO(ПеременнаяМассив)
6 Serginio1
 
24.12.12
17:26
Кстати если ты посмотришь ПеременнаяМассив.Количество() то увидишь 8 элеменов.
Либо используй
ПеременнаяМассив.[0]="Нулевой";

Либо просто
ПеременнаяМассив = Новый Массив();
   ПеременнаяМассив.Добавить("Нулевой");
7 Serginio1
 
24.12.12
17:30
Есть еще вариант
СписокОбъектов = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/core", "Array"));
 ТипЗначения=Фабрика.Тип("http://v8.1c.ru/8.1/data/core","ValueListItemType");
 ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string");
 Стр=Фабрика.Создать(ТипСтрока,"Мама мыла раму");
СписокОбъектов.value.Добавить(стр);
8 YVGroshkov
 
24.12.12
18:03
Блин, зачитался и забыл, что нужно обязательно возвращать XML для веб-сервисов.
9 YVGroshkov
 
24.12.12
18:26
Serginio1, спасибо.
10 Serginio1
 
24.12.12
18:27
(8) Не XML, а ОбъектXDTO, который потом сериализуется
11 Serginio1
 
24.12.12
18:27
10+ Поэтому XmlСтрока это ошибка. Каюсь.