|
Ошибка передачи 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 пакет Возврат МассивЗаказовПокупателей; У меня вот есть строки запроса, я тоже сейчас буду ложить их в пакет, и передавать в массив возвращать что бы. Я не знаком с этим по этому плаваю. Подскажите кто в курсе. Пока передавал только строку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |