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

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

Что не так задано у ПакетаXDTO или у web-сервиса?
1 falselight
 
15.02.20
16:09
передаваемый пакет xdto http://joxi.ru/KAx3R4VT1Zj1n2
2 falselight
 
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;
    //
КонецФункции
3 falselight
 
15.02.20
16:44
инициализация прошла GetKontragent возвращает: Обязательное возвращаемое значение не задано:
4 falselight
 
15.02.20
16:45
Как в (2) правильно возвращать значение?
5 falselight
 
15.02.20
17:28
почему не возвращает значение функция ?

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

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

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

    //

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

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

    

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

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

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

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

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

        |ИЗ

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

        |ГДЕ

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

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

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

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

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

    КонецЕсли;

    //

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

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

    //

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

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

    //

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



Нужно лиделать возврат в массиве? Или как правильно? Передача значения в консольное приложение через веб сервис
6 falselight
 
15.02.20
18:59
В чем причина того что консольное приложение выдает что обязательное возвращаемое значение не заданно? Там должно быть наименованме контрагента. Строка.
7 hhhh
 
16.02.20
02:37
(6) а КонтрагентXDTO у вас точно строка?
8 falselight
 
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 сервиса передается инн .

В чем может быть причина?
9 hhhh
 
16.02.20
07:13
(8) в том, что это name - у тебя строка.
а а КонтрагентXDTO у тебя не строка.
10 falselight
 
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;
    //
КонецФункции
11 falselight
 
16.02.20
07:18
(9) Где то смотрел примеры, что возвращаются пакеты XDTO из функций
я и подумал что так нужно, что на принимающей стороне их раскрывают уже

то есть возвращать нужно именно Возврат КонтрагентXDTO.name;
12 falselight
 
16.02.20
07:19
?
13 falselight
 
16.02.20
07:21
или как правильно? как нужно? если проводим тест, передача наименования контрагента через web сервис
14 falselight
 
16.02.20
07:22
(9) Зачем тогда все эти XDTO ? Если достаточно просто строку передать и все!!!!

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

не передает КонтрагентXDTO

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

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

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


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

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


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

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

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

А если у меня запрос, много строк выдает, куда это возвращать, заполнять же пакет и в массив его?
34 falselight
 
17.02.20
13:24
(32)
Они вот что возвращают

МассивЗаказовПокупателей = ФабрикаXDTO.Создать(МассивЗаказовПокупателейТип);

Это же XDTO пакет

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

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

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