Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Дек 2017, 09:19
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Ошибка преобразования данных XDTO  (Прочитано 4385 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MRAK87

  • *
  • Сообщений: 1
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-07-25
  • Сайт: 
Здравствуйте.

У меня есть веб сервис на 1С 8.2. С помощью XDTO создал 2 пакета с пространством имен http://irz.tmc.org/MyHeader и http://irz.tmc.org/Classification:

Представлены XSD схема этих пакетов
<xs:schema xmlns:ns1="http://irz.tmc.org/Classification" xmlns:tns="http://irz.tmc.org/MyHeader" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://irz.tmc.org/MyHeader" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:import namespace="http://irz.tmc.org/Classification"/>
<xs:complexType name="MyDocumentHeader">
<xs:sequence>
<xs:element name="MySupplier" type="ns1:SupplierClass"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SupplierEx">
<xs:sequence>
<xs:element name="IdSupplier" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

<xs:schema xmlns:tns="http://irz.tmc.org/Classification" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://irz.tmc.org/Classification" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:complexType name="SupplierClass">
    <xs:sequence>
      <xs:element name="IdSupplier" type="xs:string" nillable="true" minOccurs="0"/>
      <xs:element name="SupplierName" type="xs:string" nillable="true" minOccurs="0"/>
      <xs:element name="URF" type="xs:int" nillable="true" minOccurs="0"/>
      <xs:element name="INN" type="xs:string" nillable="true" minOccurs="0"/>
      <xs:element name="KPP" type="xs:string" nillable="true" minOccurs="0"/>
      <xs:element name="IdRegion" type="xs:string" nillable="true" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Я вызываю данный веб сервис из Delphi 2006:
procedure TForm1.Button1Click(Sender: TObject);
var
  header: MyDocumentHeader;
  Supp: SupplierClass;
  res: WebServiceUPP1CPortType;
  result: string;
begin
  Supp := SupplierClass.Create;
  Supp.IdSupplier := '343';
  Supp.URF := 45;
  Supp.SupplierName := '32354';
  Supp.KPP := '444';
  Supp.INN := '234234';
  Supp.IdRegion := '18';

  res := GetWebServiceUPP1CPortType();

  header := MyDocumentHeader.Create;
  header.MySupplier := Supp;

  result := res.MyCreate(header);

  ShowMessage(result);
end;
 

Delphi 2006 генерирует файл с описанием веб сервиса:
  WebServiceUPP1CPortType = interface(IInvokable)
  ['{C2795ED9-E73E-C9FA-328F-6320FBA4DC2F}']
    function  MyCreate(const Header: MyDocumentHeader): WideString; stdcall;
  end;

function GetWebServiceUPP1CPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): WebServiceUPP1CPortType;
const
  defWSDL = 'http://192.168.56.21:55556/upp1c.1cws?wsdl';
  defURL  = 'http://192.168.56.21:55556/upp1c.1cws';
  defSvc  = 'WebServiceUPP1C';
  defPrt  = 'WebServiceUPP1CSoap';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as WebServiceUPP1CPortType);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;

  // XML       : MyDocumentHeader, global, <complexType>
  // Namespace : http://irz.tmc.org/MyHeader
  MyDocumentHeader = class(TRemotable)
  private
    FMySupplier: SupplierClass;
  public
    destructor Destroy; override;
  published
    property MySupplier: SupplierClass read FMySupplier write FMySupplier;
  end;

  // XML       : SupplierClass, global, <complexType>
  // Namespace : http://irz.tmc.org/Classification
  SupplierClass = class(TRemotable)
  private
    FIdSupplier: WideString;
    FSupplierName: WideString;
    FURF: Integer;
    FINN: WideString;
    FKPP: WideString;
    FIdRegion: WideString;
  published
    property IdSupplier: WideString read FIdSupplier write FIdSupplier;
    property SupplierName: WideString read FSupplierName write FSupplierName;
    property URF: Integer read FURF write FURF;
    property INN: WideString read FINN write FINN;
    property KPP: WideString read FKPP write FKPP;
    property IdRegion: WideString read FIdRegion write FIdRegion;
  end;

При вызове метода MyCreate падает ошибка:
Ошибка преобразования данных XDTO. Структура объекта не соответствует типу
MyDocumentHeader по полю SupplierClass.

Данная ошибка не падает на Delphi XE2, также пробовал написать клиент на C# и все тоже работает с вызовом веб сервиса. Видимо ошибка в самой Delphi 2006. Но может кто-то сталкивался с такой проблемой именно при использовании Delphi 2006.
Самое интересное, что если перенести описание SupplierClass из пакета http://irz.tmc.org/Classification в пакет http://irz.tmc.org/MyHeader то все работает на Delphi 2006.
Почему когда SupplierClass описан в другом пакете XDTO и вызов сервиса происходит из Delphi 2006, то падает такая ошибка.

P.S. На форуме embarcadero я уже оставил сообщение, может они что-то подскажут. Вариант с переносом все в один пакет тоже возможен. Интересно почему именно с разными пакетами выдает ошибку?


Теги: XDTO wsdl delphi 
 

При открытии обр-ки в "Предприятии" есть ошибка, а в "Отладке" нет

Автор proofetРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 4551
Последний ответ 21 Сен 2011, 17:35
от proofet
ошибка "Невозможно обработать параметр "ПрофильПолномочийПользователя""

Автор lindeluРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 6114
Последний ответ 06 Июн 2012, 09:15
от lindelu
Синтаксическая ошибка "В" Номенклатура.Ссылка = <<?>> В ИЕРАРХИИ(&Ссылка)

Автор maskitoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4220
Последний ответ 28 Апр 2014, 15:53
от maskito
При создании нового документа "Заявка на кассовый расход" Ошибка "Значение 9 поля "номер" не уникально

Автор ppkmliteРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 14
Просмотров: 8556
Последний ответ 22 Ноя 2014, 04:50
от cska-fanat-kz
Синтаксическая ошибка "ИЗ"

Автор kulkriseРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4589
Последний ответ 26 Янв 2014, 19:33
от kulkrise

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
145 Сообщений
ilyay ilyay
63 Сообщений
alex0402
50 Сообщений
AIFrame
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 198
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal