Имя: Пароль:
1C
 
Веб-сервис и передача-прием XML
0 toypaul
 
гуру
30.05.11
17:34
Есть веб-сервис у него есть методы - экспорт/импорт, которые выдают и принимают XML (XmlElement). Как в 1С это обработать - передать и получить?
1 Serginio1
 
30.05.11
18:07
Например
Функция СоздатьТзАтрибутов()
   Тз=Новый ТаблицаЗначений;
   Колонки=Тз.Колонки;
   Колонки.Добавить("Имя",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(0));
   Колонки.Добавить("Значение",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(0));
   
   Возврат Тз
КонецФункции

Функция СоздатьТзУзлов()
   Тз=Новый ТаблицаЗначений;
   Колонки=Тз.Колонки;
   Колонки.Добавить("Имя",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(0));
   Колонки.Добавить("Значение",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(0));
   Колонки.Добавить("Узел",Новый ОписаниеТипов("ТаблицаЗначений"));
   Колонки.Добавить("Атрибуты",Новый ОписаниеТипов("ТаблицаЗначений"));
   Возврат Тз
КонецФункции

Процедура ПрочитатьУзел(СтрокаТз,Чтение,ИмяУзла)
   
   Пока Чтение.Прочитать() Цикл
       
       Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
           НовИмяУзла = Чтение.Имя; Сообщить("Тип Узла="+Чтение.ТипУзла+" Имя узла" + НовИмяУзла);
           
           Тз=СтрокаТз.Узел;
           СтрУзла=Тз.Добавить();
           НовТз=СоздатьТзУзлов();
           СтрУзла.Имя=НовИмяУзла;
           СтрУзла.Узел=НовТз;
           СтрУзла.Атрибуты=неопределено;
           
           // Атрибуты элементов можно читать только если текущая часть -  
           // начало элемента  
           Пока Чтение.ПрочитатьАтрибут() Цикл
               Если Не ЗначениеЗаполнено(СтрУзла.Атрибуты) Тогда
                   СтрУзла.Атрибуты=СоздатьТзАтрибутов();
               КонецЕсли;
               // Прочитать данные узла атрибута.  
               ТипУзла = Чтение.ТипУзла;
               Имя = Чтение.Имя;
               Значение = Чтение.Значение;
               Сообщить(""+ТипУзла+"  "+ Чтение.Значение);
               // Обработать полученные значения.
               Стр=СтрУзла.Атрибуты.Добавить();
               Стр.Имя=Чтение.Имя;
               Стр.Значение=Чтение.Значение;
               
           КонецЦикла;
           ПрочитатьУзел(СтрУзла,Чтение,НовИмяУзла);
       ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
           
           // В примере просто выводим текст в окно сообщений.  
           Сообщить("Текст:" + Чтение.Значение);
           СтрокаТз.Значение=Чтение.Значение;
           СтрокаТз.Узел=неопределено;
       ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
           
           // В примере просто выводим признак конца элемента  
           // в окно сообщений
           Сообщить("--Конец:" + Чтение.Имя);  
           Если Чтение.Имя<>ИмяУзла Тогда
               сообщить("Ошибка "+Имя+"<>"+ИмяУзла);
           КонецЕсли;
           возврат
       Иначе
           Сообщить("Неизвестный Тип узла "+Чтение.ТипУзла);
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры


Функция ПрочитатьXMLСтрока(Строка)
   Чтение= новый ЧтениеXML;
   Чтение.УстановитьСтроку(Строка);
   Тз=СоздатьТзУзлов();
   
   Пока Чтение.Прочитать() Цикл
       
       // Прочитать "структурные части" элементов.  
       // Проверить, какая часть элемента - текущая.  
       Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
           ИмяУзла = Чтение.Имя; Сообщить("Тип Узла="+Чтение.ТипУзла+" Имя узла" + ИмяУзла);
           СтрУзла=Тз.Добавить();
           СтрУзла.Имя=ИмяУзла;
           НовТз=СоздатьТзУзлов();
           СтрУзла.Узел=НовТз;
           СтрУзла.Атрибуты=неопределено;
           
           // Атрибуты элементов можно читать только если текущая часть -  
           // начало элемента  
           Пока Чтение.ПрочитатьАтрибут() Цикл
               Если Не ЗначениеЗаполнено(СтрУзла.Атрибуты) Тогда
                   СтрУзла.Атрибуты=СоздатьТзАтрибутов();
               КонецЕсли;
               
               // Прочитать данные узла атрибута.  
               ТипУзла = Чтение.ТипУзла;
               Имя = Чтение.Имя;
               Значение = Чтение.Значение;
               
               // Обработать полученные значения.
               Стр=СтрУзла.Атрибуты.Добавить();
               Стр.Имя=Имя;
               Стр.Значение=Значение;
           КонецЦикла;
           ПрочитатьУзел(СтрУзла,Чтение,ИмяУзла);
       ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
           
           // В примере просто выводим текст в окно сообщений.  
           Сообщить("Текст:" + Чтение.Значение);
           Стр=Тз.Добавить();
           Стр.Имя=ИмяУзла;
           Стр.Значение=Чтение.Значение;
       ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
           
           // В примере просто выводим признак конца элемента  
           // в окно сообщений
           Сообщить("--Конец:" + Чтение.Имя);  
       Иначе
           Сообщить("Неизвестный Тип узла "+Чтение.ТипУзла);
       КонецЕсли;
       
   КонецЦикла;
   Возврат Тз;
КонецФункции
2 acsent
 
30.05.11
18:11
ФабрикаXDTO
3 toypaul
 
гуру
31.05.11
08:54
(1) вот это я не понял к чему. у меня нет проблемы в чтении есть непониманием в каком виде передавать\принимать эти значения в методы.

(2) примеры есть?
4 toypaul
 
гуру
31.05.11
10:12
поясню задачу

У меня есть веб-сервис с методом

XmlElements ИмпортКлиентов()

вопрос состоит в том что в 1С мне вернет этот метод.

и есть метод ЭкспортПлатежей(XmlElements)

вопрос в том что мне передать в этот метод (есть просто XML в виде текста).
5 Serginio1
 
31.05.11
10:39
(4) А попрбовать? Второй вариант экспортировать схему в C# и сохранить в DLL и вытащить методы и в 1С через v8: Объекты Net в IDispatch
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс