Вход | Регистрация
 

Ошибка передачи XDTO

Ошибка передачи XDTO
Я
   falselight
 
15.02.20 - 16:07
Консольное приложение, вызывая веб сервис, должно получить переданный пакет XDTO.
Но выходит ошибка,

точки с именем "http://11.1.0.1/VV/ws/IXIOffice.1cws?wsdl"; и контрактом "IXIOffice.IXIOfficePortType" в разделе конфигурации клиента ServiceModel. Это может быть вызвано тем, что для приложения не найден файл конфигурации или в элементе клиента не найден элемент конечной точки, соответствующий данному имени."

Что не так задано у ПакетаXDTO или у web-сервиса?
   falselight
 
1 - 15.02.20 - 16:09
передаваемый пакет xdto http://joxi.ru/KAx3R4VT1Zj1n2
   falselight
 
2 - 15.02.20 - 16:10
Функция GetKontragent(INN) Экспорт

    Возврат ПолучитьДанныеКонтрагентаПоИНН(INN);    
КонецФункции
//
Функция ПолучитьДанныеКонтрагентаПоИНН(ИНН)
    URIПространстваИмен = "http://localhost/VV/ws/Kontragent";;
    ПакетCML            = ФабрикаXDTO.Пакеты.Получить(URIПространстваИмен);
    //
    КонтрагентТип       = ПакетCML.Получить("Kontragent");
    КонтрагентXDTO      = ФабрикаXDTO.Создать(КонтрагентТип);
    
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    Контрагенты.Ссылка          КАК Ссылка,
        |    Контрагенты.Наименование КАК Наименование
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ИНН = &ИНН";
    Запрос.УстановитьПараметр("ИНН", ИНН);
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        Возврат КонтрагентXDTO;
    КонецЕсли;
    //
    Выборка = Результат.Выбрать();    
    Выборка.Следующий();
    //
    КонтрагентXDTO.name = Выборка.Наименование;    
    Возврат КонтрагентXDTO;
    //
КонецФункции
   falselight
 
3 - 15.02.20 - 16:44
инициализация прошла GetKontragent возвращает: Обязательное возвращаемое значение не задано:
   falselight
 
4 - 15.02.20 - 16:45
Как в (2) правильно возвращать значение?
   falselight
 
5 - 15.02.20 - 17:28
почему не возвращает значение функция ?

Функция ПолучитьДанныеКонтрагентаПоИНН(ИНН)

    URIПространстваИмен = "http://localhost/VV/ws/Kontragent";;;

    ПакетCML            = ФабрикаXDTO.Пакеты.Получить(URIПространстваИмен);

    //

    КонтрагентТип       = ПакетCML.Получить("Kontragent");

    КонтрагентXDTO      = ФабрикаXDTO.Создать(КонтрагентТип);

    

    Запрос       = Новый Запрос;

    Запрос.Текст = "

        |ВЫБРАТЬ ПЕРВЫЕ 1

        |    Контрагенты.Ссылка          КАК Ссылка,

        |    Контрагенты.Наименование КАК Наименование

        |ИЗ

        |    Справочник.Контрагенты КАК Контрагенты

        |ГДЕ

        |    Контрагенты.ИНН = &ИНН";

    Запрос.УстановитьПараметр("ИНН", ИНН);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда

        Возврат КонтрагентXDTO;

    КонецЕсли;

    //

    Выборка = Результат.Выбрать();    

    Выборка.Следующий();

    //

    КонтрагентXDTO.name = Выборка.Наименование;    

    Возврат КонтрагентXDTO;

    //

КонецФункции



Нужно лиделать возврат в массиве? Или как правильно? Передача значения в консольное приложение через веб сервис
   falselight
 
6 - 15.02.20 - 18:59
В чем причина того что консольное приложение выдает что обязательное возвращаемое значение не заданно? Там должно быть наименованме контрагента. Строка.
   hhhh
 
7 - 16.02.20 - 02:37
(6) а КонтрагентXDTO у вас точно строка?
   falselight
 
8 - 16.02.20 - 06:53
(7) Вот http://joxi.ru/RmznO4eiRYnEym

string

Пакет XDTO выбран у веб сервиса, через функцию GetKontragent .

На принимающей стороне сказали что, инициализация прошла. Но вышла ошибка, -

инициализация прошла GetKontragent возвращает: Обязательное возвращаемое значение не задано: http://11.1.0.1/VV/ws/IXIOffice.1cws?wsdl}:DealerOfficeSoapBinding:GetKontragent()

В операцию web сервиса передается инн .

В чем может быть причина?
   hhhh
 
9 - 16.02.20 - 07:13
(8) в том, что это name - у тебя строка.
а а КонтрагентXDTO у тебя не строка.
   falselight
 
10 - 16.02.20 - 07:16
(9) То есть нужно так?

    Возврат КонтрагентXDTO.name;




Функция GetKontragent(INN) Экспорт
    Возврат ПолучитьДанныеКонтрагентаПоИНН(INN);    
КонецФункции
//
Функция ПолучитьДанныеКонтрагентаПоИНН(ИНН)
    URIПространстваИмен = "http://localhost/IB/ws/Kontragent";;
    ПакетCML            = ФабрикаXDTO.Пакеты.Получить(URIПространстваИмен);
    //
    КонтрагентТип       = ПакетCML.Получить("Kontragent");
    КонтрагентXDTO      = ФабрикаXDTO.Создать(КонтрагентТип);
    
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    Контрагенты.Ссылка          КАК Ссылка,
        |    Контрагенты.Наименование КАК Наименование
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ИНН = &ИНН";
    Запрос.УстановитьПараметр("ИНН", ИНН);
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        Возврат КонтрагентXDTO;
    КонецЕсли;
    //
    Выборка = Результат.Выбрать();    
    Выборка.Следующий();
    //
    КонтрагентXDTO.name = Выборка.Наименование;    
    Возврат КонтрагентXDTO.name;
    //
КонецФункции
   falselight
 
11 - 16.02.20 - 07:18
(9) Где то смотрел примеры, что возвращаются пакеты XDTO из функций
я и подумал что так нужно, что на принимающей стороне их раскрывают уже
то есть возвращать нужно именно Возврат КонтрагентXDTO.name;
   falselight
 
12 - 16.02.20 - 07:19
?
   falselight
 
13 - 16.02.20 - 07:21
или как правильно? как нужно? если проводим тест, передача наименования контрагента через web сервис
   falselight
 
14 - 16.02.20 - 07:22
(9) Зачем тогда все эти XDTO ? Если достаточно просто строку передать и все!!!!

Что то совсем не то!
   falselight
 
15 - 16.02.20 - 07:22
Объясните пожалуйста? Где вероятность что это так? В (9) ?
   falselight
 
16 - 16.02.20 - 07:26
(9) Говорят все равно таже ошибка
   falselight
 
17 - 16.02.20 - 07:38
сделал возврат просто переданный ИНН все сработало на той стороне
   falselight
 
18 - 16.02.20 - 08:22
строку КонтрагентXDTO.name передает
 
не передает КонтрагентXDTO

почему? Мне же нужно передавать всю структуру, пакета КонтрагентXDTO
   falselight
 
19 - 16.02.20 - 08:28
выдает ошибку

XmlException: Непредусмотренный тип узла Element. Метод ReadElementString может быть вызван только для элементов с простым или пустым содержимым., строка 8, позиция 6.
   falselight
 
20 - 17.02.20 - 06:56
Подскажите пожалуйста, как передать сам паке XDTO через веб сервис?
С несколькими реквизитами. Получилось передать только строку.
   falselight
 
21 - 17.02.20 - 07:18
Если у пакета XDTO несколько полей, как его возвращать через веб сервис?
   falselight
 
22 - 17.02.20 - 09:31
UP
   Skylark
 
23 - 17.02.20 - 09:47
Переводи всё в строку и пуляй. Строка точно пройдет. А на той стороне из строки выполнят обратное преобразование.
   Skylark
 
24 - 17.02.20 - 09:51
Зачем вообще передавать XDTO?
Возможно я ошибаюсь, но в моем представлении XDTO это инструмент для формирования данных в XML, которые по сути строка.
   Skylark
 
25 - 17.02.20 - 09:52
На обоих сторонах - источнике и приемнике должны быть одинаковые XSD-схемы для создания объектов XDTO, с помощью которых производится запись/чтение данных XML.
Как-то так я себе это представляю.
   falselight
 
26 - 17.02.20 - 10:27
(23) Я перевел все в строку вот это, - 

    КонтрагентXDTO.name = Выборка.КонтрагентНаименование + ";" + Выборка.КредитнаяЛиния + ";" + Выборка.СрокОплатыПокупателя + "; " + Выборка.ОбщаяТекущаяЗадолженность;
    Возврат КонтрагентXDTO.name;


Сейчас мне нужно передать вот такую выборку 

    Запрос.Текст                     = "
        |ВЫБРАТЬ
        |    ЗаказПокупателя.Контрагент.ИНН КАК КонтрагентИНН,
        |    ЗаказПокупателя.СостояниеЗаказа КАК СостояниеЗаказа,
        |    ЗаказПокупателя.СуммаДокумента КАК СуммаЗаказа,
        |    ВЫБОР
        |        КОГДА ДОБАВИТЬКДАТЕ(ЗаказПокупателя.Дата, ДЕНЬ, ДоговорыКонтрагентов.СрокОплатыПокупателя) < &ТекДата
        |            ТОГДА ИСТИНА
        |        ИНАЧЕ ЛОЖЬ
        |    КОНЕЦ КАК ИндикаторПросрочки,
        |    ЗаказПокупателя.СуммаДокумента - ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот, 0) КАК СуммаДолга
        |ПОМЕСТИТЬ ВТ_ОплатыЗаказаКлиента
        |ИЗ
        |    Документ.ЗаказПокупателя КАК ЗаказПокупателя
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
        |        ПО ЗаказПокупателя.Контрагент = ДоговорыКонтрагентов.Владелец
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОплатаСчетовИЗаказов.Обороты(, &ТекДата, , ) КАК ОплатаСчетовИЗаказовОбороты
        |        ПО ЗаказПокупателя.Ссылка = ОплатаСчетовИЗаказовОбороты.СчетНаОплату
        |ГДЕ
        |    ЗаказПокупателя.Контрагент.ИНН = &ИНН
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    ВТ_ОплатыЗаказаКлиента.КонтрагентИНН КАК ИНН,
        |    ВТ_ОплатыЗаказаКлиента.СостояниеЗаказа КАК СостояниеЗаказа,
        |    ВТ_ОплатыЗаказаКлиента.СуммаЗаказа КАК СуммаЗаказа,
        |    ВТ_ОплатыЗаказаКлиента.СуммаДолга КАК СуммаДолга,
        |    ВТ_ОплатыЗаказаКлиента.ИндикаторПросрочки КАК ИндикаторПросрочки
        |ИЗ
        |    ВТ_ОплатыЗаказаКлиента КАК ВТ_ОплатыЗаказаКлиента";
    Запрос.УстановитьПараметр("ИНН",     ИНН);
    Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());


Делаю по примеру https://habr.com/ru/post/136684/ - Задание №3.

(24) А как мне строки выборки передать????
   Skylark
 
27 - 17.02.20 - 11:54
(26) Мне кажется ты что-то недопонимаешь о самой сути XML и XDTO и как с этим работать в 1С.
Тебе в 1С нужно получить XML, в котором будет содержаться выборка объектов, и этот XML отправить.
Создается ЗаписьXML, обходится выборка результата запроса, и в цикле в ЗаписьXML добавляется запись по объекту.
XDTO здесь вспомогательная вещь для записи строки результата запроса в XML.
   Skylark
 
28 - 17.02.20 - 11:54
А пример в (26) из серии "как нарисовать сову"...
   Skylark
 
29 - 17.02.20 - 11:56
   falselight
 
30 - 17.02.20 - 11:57
(28) Сову? Но а есть лучше пример? Везде только он. И мне его дали.
(27) Да возможно не понимаю. Не работал с этим. По сути мне нужно сделать то что в примере.
Почти тоже самое. Вот и узнаю обо всем.
 
 Рекламное место пустует
   falselight
 
31 - 17.02.20 - 11:58
(29) Спасибо, буду разбираться, в (26) в Задании №3 там, код что сделан в 1с. Вот у меня сейчас в этом задача.
   hhhh
 
32 - 17.02.20 - 12:05
(31) ну, в задании №3 ничего не написано, что надо возвращать XDTO-пакет. Это вы сами чего-то нафантазировали.
   falselight
 
33 - 17.02.20 - 13:22
(32) Они его заполняют же и возвращают массив или как????
Я вот возвратил одну строку,
   КонтрагентXDTO.name = Выборка.КонтрагентНаименование + ";" + Выборка.КредитнаяЛиния + ";" + Выборка.СрокОплатыПокупателя + "; " + Выборка.ОбщаяТекущаяЗадолженность;
    Возврат КонтрагентXDTO.name;

А если у меня запрос, много строк выдает, куда это возвращать, заполнять же пакет и в массив его?
   falselight
 
34 - 17.02.20 - 13:24
(32)
Они вот что возвращают
МассивЗаказовПокупателей = ФабрикаXDTO.Создать(МассивЗаказовПокупателейТип);

Это же XDTO пакет

Возврат МассивЗаказовПокупателей;

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

Я не знаком с этим по этому плаваю. Подскажите кто в курсе. Пока передавал только строку.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.