Имя: Пароль:
1C
1С v8
Связать 1С v8 с веб-сервисами битрикса
0 arturik___1
 
06.04.12
00:10
Добрый день.
Кто нибудь имел дело с веб-сервисами битрикса?

Не подскажите код процедуры который будет адекватно воспринимать wsdl этих сервисов.

Мы пытаемся связать простейшие методы веб-сервиса, но 1С не видит возвращаемые переменные, теряются значения и определения возвращаемых свойств. Если сервис возвращает простую строку, то 1С выводит такую ошибку:

Неизвестная ошибка. Ошибка преобразования данных XDTO:
НачалоСвойства: type    Форма: Атрибут    Тип: {http://www.w3.org/2001/XMLSchema}anySimpleType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: type    Форма: Атрибут    Тип: {http://www.w3.org/2001/XMLSchema}anySimpleType

Процедуру пишем такую:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   СервисСайта = WSСсылки.WSСсылка2.СоздатьWSПрокси("http://localhost/", "art.webservice.orders.exchange", "COrdersExchangeWSSoap");
   
   СервисСайта.Пользователь = "user";
   СервисСайта.Пароль = "*****";
   
   Список = СервисСайта.GetOrders();
   Сообщить(Список);
КонецПроцедуры
1 arturik___1
 
06.04.12
05:40
Тестовый веб-сервис битрикса находится вот тут:
http://test.tdp.ru/index.php
wsdl - http://test.tdp.ru/index.php?wsdl

С другими гаджетами сервис работает, а вот с 1С связать не получается.

Просьба гуру 1С оказать посильную помощь в разборе wsdl-ки битрикс веб-сервисов.
2 arturik___1
 
06.04.12
11:01
WSссылка создается без проблем, но вот результат метода веб-сервиса получить не удается.
3 arturik___1
 
06.04.12
11:35
Помогите написать процедуру получения значений методов веб-сервиса.
4 arturik___1
 
06.04.12
12:44
Вобщем я пишу примерно такую процедуру:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Определение = Новый WSОпределения("http://test.tdp.ru/index.php?wsdl");    
   тест = Новый WSПрокси(Определение, "http://test.tdp.ru/", "art.webservice.orders.exchange", "COrdersExchangeWSSoap");
   СписокЗаказов = тест.GetOrders().ПолучитьСписок("ArrayOfOrderEl");
   КоличествоЭлем = СписокЗаказов.Количество();

   Для инд = 0 По КоличествоЭлем - 1 Цикл
       
       Сообщить("ID: "            + Рез[инд].ID);
       Сообщить("LID: "            + Рез[инд].LID);
       Сообщить("PERSON_TYPE_ID: " + Рез[инд].PERSON_TYPE_ID);
       
   КонецЦикла;
   
КонецПроцедуры
Такая процедура не возвращает результатов.
5 lxs
 
06.04.12
12:48
у тебя "тест" создается?
6 arturik___1
 
06.04.12
12:53
Что такое "тест"?
7 arturik___1
 
06.04.12
12:53
А да создается.
8 arturik___1
 
06.04.12
12:55
То есть список заказов получаю, а свойства на уровень ниже получить не могу.
9 lxs
 
06.04.12
12:59
а что такое Рез?
10 arturik___1
 
06.04.12
13:03
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Определение = Новый WSОпределения("http://test.tdp.ru/index.php?wsdl");    

   тест = Новый WSПрокси(Определение, "http://test.tdp.ru/", "art.webservice.orders.exchange", "COrdersExchangeWSSoap");

   СписокЗаказов = тест.GetOrders().ПолучитьСписок("ArrayOfOrderEl");
   КоличествоЭлем = СписокЗаказов.Количество();

   Для инд = 0 По КоличествоЭлем - 1 Цикл
       
       Сообщить("ID: "             + СписокЗаказов[инд].ID);
       Сообщить("LID: "             + СписокЗаказов[инд].LID);
       Сообщить("PERSON_TYPE_ID: " + СписокЗаказов[инд].PERSON_TYPE_ID);
       
   КонецЦикла;
   
КонецПроцедуры

Рез это СписокЗаказов, исправил.
Просто писал здесь сходу правил.
11 lxs
 
06.04.12
13:13
Вот такая контрукция "СписокЗаказов[инд]" не факт, что отработает. Если есть иные методы получения свойств объекта - используй. Или Получить(Индекс), или get(Индекс) или обходом - неважно.
12 Serginio1
 
06.04.12
13:19
А что мешает посмотреть результат в отладчике?
И для списков подходи итератор для каждого
13 Serginio1
 
06.04.12
13:22
Да и судя по тому, что возвращается там тест список Orders
14 arturik___1
 
06.04.12
13:26
Вот в том и вопрос, что не понятно как свойства объекта списка
вытащить. В отладчике названия свойств списка есть, а значения и типы неопределены.
Разные циклы использовал. Здесь проблема не в типе цикла.
15 lxs
 
06.04.12
13:31
СписокЗаказов[инд].ID.Value не?
16 Serginio1
 
06.04.12
13:31
Если судить по тесту то тебе возвращается список Orders из структур Order
17 arturik___1
 
06.04.12
13:36
В тесте возвращаются Orders, но в 1С такое свойство нет у объекта.

Ошибка при вызове метода контекста (ПолучитьСписок): Неизвестное свойство:
Свойство 'Orders' не обнаружено
   СписокЗаказов = тест.GetOrders().ПолучитьСписок("Orders");
по причине:
Неизвестное свойство:
Свойство 'Orders' не обнаружено
18 arturik___1
 
06.04.12
13:46
Вот структура XDTO списка заказов
http://pic2net.ru/view/v/p/eea3199cd9080375983d7c1e9dfd2084.jpg
19 Serginio1
 
06.04.12
13:46
Решил экспортировать wsdl  ссылку 1С ругается на ошибку разбора.
1С не все понимает. Поэтму в у меня часть работает через C# v8: Доступ к WEB-сервису из 1С 8.2 через https
20 Serginio1
 
06.04.12
13:49
(18) А что показывает Свойства?
21 arturik___1
 
06.04.12
13:51
http://pic2net.ru/view/v/p/b39918cb2715ef9aa66ae7199d6703e9.jpg
Переменная не определена.
22 Serginio1
 
06.04.12
13:54
Ты посмотри Свойства что под типом
и не ID а СписокЗаказов[инд].ID
или СписокЗаказов[1]
23 Serginio1
 
06.04.12
13:55
Авообще посмотри состав Свойства . Нажми на значек с зеленым.
24 arturik___1
 
06.04.12
13:58
25 Serginio1
 
06.04.12
14:02
Интересно по схеме у тебя ID это integer. А значение ID. Я использую для чисел int. Может в этом проблема?
26 Serginio1
 
06.04.12
14:03
Посмотри что возвращает LID.
27 arturik___1
 
06.04.12
14:04
да нет, integer стандартный тип.
Все свойства возвращают пустое значение.

Вот у меня ссылка нормально импортируется.
Структура ссылки
http://pic2net.ru/view/v/p/ca410528723287042ba06d1c283a4d59.jpg
28 Serginio1
 
06.04.12
14:52
Не совсем он стандартный. С# его не понимает. А вот у тебя
в 24 значение элемента кие то не интовые.
А что 24 у тебя отображает?
29 arturik___1
 
06.04.12
14:57
что такое 24? Не понял.
30 Serginio1
 
06.04.12
14:58
Посмотри что у тебя отображает

Процедура ПоказатьОбъектПоФабрике(Фабрика,ОтветТаблицаЦен)
   ЗаписьХМЛ= новый ЗаписьXML;
   ЗаписьХМЛ.УстановитьСтроку();
   Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен);
   //записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен);
   текст=Новый ТекстовыйДокумент;
   Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть());
   Текст.Показать();
КонецПроцедуры

ПоказатьОбъектПоФабрике(тест.ФабрикаXDTO,СписокЗаказов)
31 Serginio1
 
06.04.12
14:59
(29) Это твой ответпод номером 24
32 arturik___1
 
06.04.12
15:01
Битрикс wsdl-ку так автоматом формирует. int переводит в integer.
33 Serginio1
 
06.04.12
15:02
(32) У тебя значения не интовые
34 arturik___1
 
06.04.12
15:08
По моему это не играет роли. Вот сейчас я все значения сделал строковыми. Тоже возвращаются пустые строки.

По поводу 30 сообщения.
Не знаю как это посмотреть.
Я вообще не 1С-ник, веб программер.
35 arturik___1
 
06.04.12
15:16
Конфигуратор пишет ошибку
Переменная не определена (СписокЗаказов)
ПоказатьОбъектПоФабрике(тест.ФабрикаXDTO,<<?>>СписокЗаказов)
36 Serginio1
 
06.04.12
15:18
тест = Новый WSПрокси(Определение, "http://test.tdp.ru/", "art.webservice.orders.exchange", "COrdersExchangeWSSoap");


   СписокЗаказов = тест.GetOrders().ПолучитьСписок("ArrayOfOrderEl");
ПоказатьОбъектПоФабрике(тест.ФабрикаXDTO,СписокЗаказов)
37 arturik___1
 
06.04.12
15:25
Возвращает ошибку
{Форма.Форма(88)}: Ошибка при вызове метода контекста (ЗаписатьXML): Несоответствие типов (параметр номер '2')
   Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен);
по причине:
Несоответствие типов (параметр номер '2')
38 Serginio1
 
06.04.12
15:32
Перегрузи в конфигураторе WS ссылку
39 Serginio1
 
06.04.12
15:33
Сейчас сам проверю
40 alexandrius
 
06.04.12
15:33
А если не трудно сделай как в (18) и нажми на зеленую кнопку.
Курсор должен быть на первой. там он у тебя должен вывести список то что возвращает веб сервис
41 arturik___1
 
06.04.12
15:39
42 Serginio1
 
06.04.12
15:50
Да все нопределено. Нужно смотреть исходный XML
43 Serginio1
 
06.04.12
15:56
Вот что выдает ПоказатьОбъектПоФабрике(тест.ФабрикаXDTO,тест.GetOrders())

<ArrayOfOrder xmlns="http://test.tdp.ru/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <ArrayOfOrderEl/>
</ArrayOfOrder>
44 Serginio1
 
06.04.12
15:57
Не понимает 1С. А сделай не один элемент а больше 1 й записи. Помню там была такая проблема.
45 arturik___1
 
06.04.12
16:00
Сделал еще один заказ.
46 Serginio1
 
06.04.12
16:02
Прсто помню у меня была проблема со сложными структурами и я специально первую строку ставил пустую. А при загрузке первая строка игнорировалась
47 arturik___1
 
06.04.12
16:11
Во, кстати, странно. Заказы добавились. Сейчас 3 заказа, а количество элементов в списке показывает 1.
Что то здесь не так.
48 Serginio1
 
06.04.12
16:30
Ну поставь какиенибудь 2 заказа по умолчанию, а при загрузке их игнорируй
49 arturik___1
 
06.04.12
16:32
СписокЗаказов = тест.GetOrders().ПолучитьСписок("ArrayOfOrderEl");
КоличествоЭлем = СписокЗаказов.Количество();

КоличествоЭлем возвращает 1.
Что тогда является объектом - элементом здесь?
Список? Почему внутренние объекты не видит.
50 Serginio1
 
06.04.12
16:48
Смотри что выдает  ПоказатьОбъектПоФабрике(тест.ФабрикаXDTO,тест.GetOrders())
Скорее всего он не может правильно распарсить структуру
51 arturik___1
 
07.04.12
02:50
.....
Основная теорема систематики: Новые системы плодят новые проблемы.