|
Связать 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
|
.....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |