Имя: Пароль:
1C
1С v8
v8: Передача параметра с типом Структура в XDTO
0 svchernova
 
30.11.11
13:54
Всем добрый день.
Работаю с веб-сервисами, цепляюсь к чужой базе данных.
Веб-службы поставщика веб-услуг работают по протоколу SOAP
При работе с веб-службами используются как примитивные типы данных,
так и в некоторых методах сложные типы, например, такие, как Структура.

Не могу взять в толк, как в 1С тип Структура приводится в соответствие с протоколом SOAP.

Вот описание веб-сервиса:
- <s:element name="GetMiddlemenByKeyFields">
- <s:complexType>
- <s:sequence>
 <s:element minOccurs="0" maxOccurs="1" name="aSessionID" type="s:string" />
 <s:element minOccurs="0" maxOccurs="1" name="aMiddleman" type="tns:MIDDLEMAN" />
 </s:sequence>
 </s:complexType>
 </s:element>
- <s:complexType name="MIDDLEMAN">
- <s:sequence>
 <s:element minOccurs="1" maxOccurs="1" name="MIDDLEMAN_ID" type="s:int" />
 <s:element minOccurs="1" maxOccurs="1" name="CLIENT_ID" type="s:int" />
 <s:element minOccurs="1" maxOccurs="1" name="MIDDLEMAN_TYPE_ID" type="s:int" />
 <s:element minOccurs="1" maxOccurs="1" name="PARENT_MIDDLEMAN_ID" type="s:int" />
 <s:element minOccurs="0" maxOccurs="1" name="CONTRACT_NUMBER" type="s:string" />
 <s:element minOccurs="0" maxOccurs="1" name="CONTRACT_DATE" type="s:string" />
 <s:element minOccurs="0" maxOccurs="1" name="LETTER_OF_ATTORNEY_NUMBER" type="s:string" />
 <s:element minOccurs="1" maxOccurs="1" name="BRANCH_ID" type="s:int" />
 <s:element minOccurs="0" maxOccurs="1" name="RECORD_CHANGED_AT" type="s:string" />
 <s:element minOccurs="1" maxOccurs="1" name="CREATED_BY_USER_ID" type="s:int" />
 <s:element minOccurs="0" maxOccurs="1" name="INPUT_DATE" type="s:string" />
 <s:element minOccurs="1" maxOccurs="1" name="CHANGED_BY_USER_ID" type="s:int" />
 <s:element minOccurs="1" maxOccurs="1" name="SYSTEM_DELIMITER_ID" type="s:int" />
 <s:element minOccurs="1" maxOccurs="1" name="USER_ID" type="s:int" />
 </s:sequence>
 </s:complexType>

Это мой код:

Тип = Фабрика.Тип("https://icweb/IICWebService", "GetMiddlemenByKeyFields");
  МоиПараметры = Фабрика.Создать(Тип);
  МоиПараметры.aMiddleman = Новый Структура("MIDDLEMAN_ID", СтрокаПолиса.MIDDLEMAN_ID);

В качестве параметров передаю номер сессии и структуру, в которой только одна строчка  с ключом "MIDDLEMAN_ID"

Получаю ошибку :
Несоответствие типов XDTO:
Тип '{https://icweb/IICWebService}MIDDLEMAN' не найден
Значение не может быть установлено свойству, имеющему объектный тип
1 svchernova
 
30.11.11
14:03
Нашла решение, вопрос снят..
2 Wobland
 
30.11.11
14:05
(1) а мне интересно. я ни ч.. не понял, но там MIDDLEMAN_ID, а в ошибке MIDDLEMAN
3 svchernova
 
30.11.11
14:09
(2) http://pro1c.org.ua/index.php?showtopic=214
Здесь очень понятно написано, как работать с типами данных в XDTO, в том числе и со структурой
4 svchernova
 
30.11.11
14:09
(2) сейчас попробую
5 Wobland
 
30.11.11
14:17
(4) чего попробую? я несоответствие увидел
6 Wobland
 
30.11.11
14:18
(3) ух ты! спасибо
7 svchernova
 
30.11.11
14:22
(5)- <s:complexType name="MIDDLEMAN">
Тип у них так называется..
ПАЖАЛСТА :)))))
8 Wobland
 
30.11.11
14:24
(7) ах вон оно где..
9 Wobland
 
30.11.11
14:27
Тип = Фабрика.Тип("https://icweb/IICWebService", "MIDDLEMAN"); - вроде так по логике вещей
10 Wobland
 
30.11.11
14:28
GetMiddlemenByKeyFields - это же не тип
11 svchernova
 
30.11.11
14:43
(10) это наименование метода веб-сервиса
12 Wobland
 
30.11.11
14:45
(11) ну и я о том же. а пытаешься из него сделать тип. что там в (1)?
13 svchernova
 
30.11.11
14:47
Не поняла.. мы тут плюшками баловались.. сейчас работать буду, выложу сюда код
14 svchernova
 
30.11.11
16:55
(12) Смысл в том, что нужно создать структурный тип и затем подсунуть его в качестве параметра скрипта.
CтруктурныйТип = Фабрика.Тип("https://icweb/IICWebService", "MIDDLEMAN");
aMIDDLEMAN = Фабрика.Создать(CтруктурныйТип);
aMIDDLEMAN.MIDDLEMAN_ID = СтрокаПолиса.MIDDLEMAN_ID;
aMIDDLEMAN.CLIENT_ID = СтрокаПолиса.CLIENT_ID;
ПосредникиXDTO = Прокси.GetMiddlemenByKeyFields( НомерСессии,aMIDDLEMAN).MIDDLEMAN;