Имя: Пароль:
1C
1С v8
V8: Передача данных на сторонний веб сервис
0 BIdHOC Mo3rA
 
10.04.13
13:29
Здравствуйте, у меня возникли трудности. Есть WS- ссылка к веб сервису http://oscar2.maria-ra.ru/ZakazWebServiceNoSSL/desadv.asmx?wsdl .Необходимо в функцию "EDIdesadvDataInsWithRows(stringSessionId, DesadvResultdesadvData) вторым параметром передать объект XDTO объединяющий тип объекта "desadvHead"(шапка документа)и тип объекта "desadvLine" (строки документа) .Было бы очень просто если б у "desadvHead" было бы свойство ,которое имело бы тип
"desadvLine" ,а как быть в этой ситуации .Помогите разобраться.Спасибо!
1 Зойч
 
10.04.13
13:32
1с не поддерживает списки без корневого типа
2 BIdHOC Mo3rA
 
10.04.13
13:35
Это значит что сторонний веб сервис не корректный?
3 Зойч
 
10.04.13
13:36
он корректный, но 1с с ним работать не сможет
4 BIdHOC Mo3rA
 
10.04.13
13:41
спасибо!
5 toypaul
 
гуру
10.04.13
14:00
ха! делаю тоже самое сейчас :) тоже Мария-Ра
6 toypaul
 
гуру
10.04.13
14:04
я честно автор тебя не понял. в чем проблема? хотя сам до этого момента еще не дошел.

для чего desadvHead свойство desadvLine, если это строка документа, а desadvHead шапка со своим набором свойств.
7 toypaul
 
гуру
10.04.13
14:05
покажи свой код. что у тебя на работает?
8 BIdHOC Mo3rA
 
10.04.13
15:25
я просто не понимаю как одним параметром передать тип ОбъектXDTO вторым параметром функции,предназначенной  для отправки шапки и строк документа , если шапка(desadvHead) это объектXDTO, а  строки (desadvLine) это списокXDTO? Я знаю как сделать если б в шапке дока было бы свойство с типом Объекта (desadvLine) , а так я в ступоре
9 Зойч
 
10.04.13
15:27
только обертку писать
10 Зойч
 
10.04.13
15:28
по простому: нельзя у в 1с в качестве параметра список указать
11 toypaul
 
гуру
10.04.13
15:29
(8) пробовал создавать тип "DesadvResult" и заполнять его?
12 Зойч
 
10.04.13
15:31
(11) да там по типу сразу видно, что не получится (ComplexType: Sequence)
13 toypaul
 
гуру
10.04.13
15:32
(12) я не знаю насчет передачи в веб-сервис. из веб-сервиса такой тип нормально обрабатывается.
14 Зойч
 
10.04.13
15:35
(13) из то конечно обрабатывается
15 Зойч
 
10.04.13
15:37
есть еще 1 способ, написать свой веб сервис, который бы возвращал нужный список XDTO, а потом его передавать в этот сервис ))
16 toypaul
 
гуру
10.04.13
15:37
(12) почитать про эти ограничения где можно? а то заказчики требовать будут. и что должны поправить разработчики веб-сервиса, чтобы заработала эта байда?
17 toypaul
 
гуру
10.04.13
15:38
(15) может использовать не встроенные средства? какой-нить COM объект?
18 Зойч
 
10.04.13
15:39
можно встроенные, но с ручной обработкой

> действительно опечатался в коде валюты, прошу прощения.
Что вы, нет проблем, спасибо за помощь!



> по ответу видно, что в теле пакета вернулся сериализованый штатными средствами .Net'а DataSet, который не может быть прочитан 1С:Предприятием.
Вот это я и хотел понять. Платформа такое читать не умеет, или я что-то не так делаю? Так как с XML работал не так уж много, на глаз не отличаю .Net формат XML от "Обычного".



> придется либо реализовать промежуточный прокси между 1Сом и веб-сервисом

Понятия не имею как это реализовать и какими средствами... С техподдержкой сайта связаться не удалось, да и врядли они бы стали что то переделывать...

Поэтому сделал через HTTPСоединение, с ручным формированием файла XML-запроса и ручным разбором XML-ответа.



>Расскажите, пожалуйста, как сможете, о результатах, если не затруднит.

С удовольствием, буду рад если кому-то пригодится.

Привожу полную версию обработки.

Для запуска нужно чтобы в справочнике Валюты был реквизит КодПоISO_4217 (либо поправить обработку, заменив на Код или Наименование)

Вся работа с веб-сервисом в модуле объекта, методы

   СформироватьФайлЗапросXML
   ПолучитьXMLОтветВебСервиса
   РазобратьXMLОтвет (не уверен что разбор сделан самым оптимальным способом, так что буду рад услышать что можно было сделать лучше)

http://partners.v8.1c.ru/forum/thread.jsp?id=723003#723003
19 Зойч
 
10.04.13
15:41
еще есть MSXML
20 BIdHOC Mo3rA
 
10.04.13
15:58
разработчикам этого веб сервиса в идеале для меня нужно в объекте шапка(desadvHead ) создать свойство к примеру товары и указать тип этого свойства "строки документа"(в данном случае desadvLine), тогда все без проблем будет передаваться
21 toypaul
 
гуру
22.04.13
13:25
(3)(12)
Все у меня нормально получилось передать.
Так что, автор, не слушай таких советов :)
22 acsent
 
22.04.13
13:27
(21) каким образом список создал?
23 toypaul
 
гуру
22.04.13
13:33
(22)

код примера прислал разработчик.

   ШапкаДокументаТип = Прокси.ФабрикаXDTO.Тип("http://maria-ra.ru/","desadvHead");
   Шапка = Прокси.ФабрикаXDTO.Создать(ШапкаДокументаТип);
   
   СтрокаДокументаТип = Прокси.ФабрикаXDTO.Тип("http://maria-ra.ru/","desadvLine");
   МассивСтрокТип = Прокси.ФабрикаXDTO.Тип("http://maria-ra.ru/","ArrayOfDesadvLine");
   МассивСтрокДока = Прокси.ФабрикаXDTO.Создать(МассивСтрокТип);
   
   НакладнаяТип=Прокси.ФабрикаXDTO.Тип("http://maria-ra.ru/","DesadvResult");
   Накладная=Прокси.ФабрикаXDTO.Создать(НакладнаяТип);


...

СтрокаДока = Прокси.ФабрикаXDTO.Создать(СтрокаДокументаТип);
МассивСтрокДока.desadvLine.Добавить(СтрокаДока);

       Накладная.HeadArray = Шапка;
       Накладная.LinesArray = МассивСтрокДока;
       Результат = Прокси.EDIdesadvDataInsWithRows(Сессия,Накладная);
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший