Чтение XML. Веб-сервис

1. user1046602 01.08.23 15:19 Сейчас в теме
Что не так с этим XML?
В результате подключения к веб-сервису SAP получаю следующий XML-файл, но 1с прочитатье его в фабрику ХDTO не может.
Файл получила в SOAPUL.
Ошибка 1с:
Ошибка при вызове метода контекста (ПрочитатьXML)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(244)}: Данные = Прокси.ФабрикаXDTO.ПрочитатьXML(Чтение);
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty

Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ФайлXML);
	
Прокси = ПолучитьДанныеОтветхранениеНаСервере();
	
Данные = Прокси.ФабрикаXDTO.ПрочитатьXML(Чтение);


ФайлXML "C:\Users\savina.ikt\Documents\Severstal\МХ1_test.xml" Строка

Если делаю Чтение.ОткрытьФайл(ФайлXML);, то весь файл получаю одной строкой, а должна же получить в виде ХDTO реквизитов передаваемых этим файлом.
Прикрепленные файлы:
МХ1_test.xml
По теме из базы знаний
Найденные решения
9. starik-2005 3080 02.08.23 10:13 Сейчас в теме
(5)
Что же всетаки не так?)
Так вопрос о том, каким образом Вы этот файл получаете, не раскрыт. Правильные поцики получают как-то так:
W = Новый WSОпределение(УрлТочкиВхода, какие-то-параметры типа таймаута и пароля);
P = Новый WSПрокси(W, точкивхода и прочее);
P.Пароль = "ххх";
P.Логин = "ууу";
XDTOОбъект = P.GetЧтоТоТамБлаБлаБла(Параметры);
После этого в переменной XDTOОбъект будет находится тот самый XML в виде объекта (типа XDTOОбъект.MX1.XML_FILE.XML_FILE <- здесь строка с этим ХМЛом, ну или как-то так). Дальше делайте с ним што хочите.
ЗЫ: На стороне САП дятлы походу, ибо XML не в виде пакета/объекта передают, а в виде строки. Видимо все, кто что-то в этом понимает, и правда свалили - один я остался )))
12. starik-2005 3080 02.08.23 10:38 Сейчас в теме
(11)
списокXDTO
Список XDTO - это список объектов. К нему можно или в цикле обратиться (для каждого Х из У), или по индексу (у[0]). Внутри нужные объекты. Просто в отладчике поглядите - все поймете откуда и что брать.
СтрокаХМЛ = Ответ.MX1[0].XML_FILE.XML_FILE;
14. starik-2005 3080 02.08.23 15:13 Сейчас в теме
(13)
со стороны отправителя
Да. Они посылают пакет, которые не соответствует описанию в WSDL-файле. Скорее всего они изменили пакет, прочитав про свой дебилизм, поэтому WSDL-файл надо обновить, ну или вызвать не так, как у Вас (из файла), а прямо с урла:
//Определение = Новый WSОпределения(имяФайла, блаблабла);
Определение = Новый WSОпределения(Урл, блаблабла);
Ну или если у Вас там нестандартный порт юзается, то нужно просто обновить WSDL-файл, поправив сцылки.
20. starik-2005 3080 02.10.23 10:50 Сейчас в теме
(19)
В виде XML-файла
Ответный вопрос - зачем? Сам по себе формат определяется в стандартах SOAP или HTTP. Если у Вас сервис возвращает ошибку, то проблема скорее всего не в пакете, который посылает 1С, но 1С не посылает ничего из того, что бы не описал автор запроса.

Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3080 01.08.23 15:52 Сейчас в теме
ФабрикаXDTO.ПрочитатьXML(Чтение);
4. user1046602 02.08.23 09:04 Сейчас в теме
(2) Та же ошибка: Ошибка при вызове метода контекста (ПрочитатьXML)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(245)}: Данные = ФабрикаXDTO.ПрочитатьXML(Чтение);
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty

Если писать
ФабрикаXDTO.ПрочитатьXML(Чтение);
то как 1с определит структуру в которую нужно XML прочитать?
6. nomad_irk 76 02.08.23 09:25 Сейчас в теме
(4)
как 1с определит структуру в которую нужно XML прочитать?

какая в файле содержится структура, в ту и прочитает
3. starik-2005 3080 01.08.23 15:55 Сейчас в теме
(1) Это ответ сервера с заголовками и прочим мусором, а не файл.
5. user1046602 02.08.23 09:12 Сейчас в теме
(3) Да, в шапке файла ответ сервера, а ниже уже реквизиты документа нужные мне. В 1с-то я не смогла увидеть резутьтат ответа веб сервиса, этот файл получен в SOAPUL.

Даже если удалить шапку файла и оставить тело документа он тоже не читается. Ошибка та-же Document is empty.

Что же всетаки не так?)
7. nomad_irk 76 02.08.23 09:31 Сейчас в теме
(5)1С ничего не знает про пространства имен и используемые типы значений в них, содержащиеся в файле, поэтому и не может ничего прочитать самостоятельно.
Более того, символы "<" заменены на "& # 60 ;"(без пробелов), их нужно обратно превратить.
8. user1880116 02.08.23 09:42 Сейчас в теме
(5)
Что же всетаки не так
На курсы сходить уже предлагали?

А, точно. Предлагали. Месяц назад, в https://forum.infostart.ru/forum15/topic300227/
10. starik-2005 3080 02.08.23 10:15 Сейчас в теме
(8)
На курсы сходить уже предлагали?
Расскажите мне про курсы, на которых учат чему-то про SOAP. В моей статье про приложуху для мобилы за полчаса больше написано, чем в среднем на курсах про это рассказывают.
15. user1880116 02.08.23 18:45 Сейчас в теме
(10)
Расскажите мне про курсы,
Если снять с себя любимые шоры одной цифры и одной буковки, и вспомнить, что это называется RPC, то тот же гугл открывает море возможностей.

Например https://ec-dpo.ru/povishenie-kvalifikatsii/informatsionnie-tehnologii/primenenie-soap-pri-integratsii-sistem

И внезапно пациент начинает понимать про XML, про пространства имен, про термнологию, про точки подключения... видит и осознает как это реализовано на 1С, какие структуры, описывающие протокол, что означают.

Но это не наш путь. Наш путь - зайти со стороны прикладного решения и мучаться даже в терминологии, не понимая принципов и желая чтобы всё сразу.
16. starik-2005 3080 03.08.23 21:57 Сейчас в теме
(15)
одной цифры и одной буковки, и вспомнить
|А если вспомнить до конца, то совет пойти на курсы ни к чему не привел, при том совет был с цитатой кода 1С. А вот мои ответы приводят к результату. Отсюда как бы вопрос Ваших компетенций. Вы тут с целью самоутвердиться за чужой счет буквы пишите? Печально, что не можете самоутвердиться за собственный счет. Может тоже на курсы Вас послать?
17. user1880116 04.08.23 07:37 Сейчас в теме
(16)
совет был с цитатой кода 1С
Ну вот оно и есть, типичное нежелание 1Сника выбраться за границы своего уютненького и понять, как именно устроены те технологии, которые он пытается использовать.

(16)
Печально, что не можете самоутвердить
Боженьки, какие же вы, 1Сники, восхитительно одинаковые, даже в своих обидах. Это у вас прямо в генетике прошивают, что-ли...
18. starik-2005 3080 04.08.23 10:04 Сейчас в теме
(17)
типичное нежелание 1Сника выбраться за границы
На себя поглядите, выбравщийся за границы и не имеющий возможности принести хоть какую-тор пользу. А про RPC я еще лет 20 писал назад, так что не ко мне вопросы. Тем более в винде это все сделано школьниками для школьников. При том сервис того же ЦБ 1С подтягивает через WSDL, в то время как для питона приходится юзать Doctor (если Вы вообще способны понять, о чем я тут).
9. starik-2005 3080 02.08.23 10:13 Сейчас в теме
(5)
Что же всетаки не так?)
Так вопрос о том, каким образом Вы этот файл получаете, не раскрыт. Правильные поцики получают как-то так:
W = Новый WSОпределение(УрлТочкиВхода, какие-то-параметры типа таймаута и пароля);
P = Новый WSПрокси(W, точкивхода и прочее);
P.Пароль = "ххх";
P.Логин = "ууу";
XDTOОбъект = P.GetЧтоТоТамБлаБлаБла(Параметры);
После этого в переменной XDTOОбъект будет находится тот самый XML в виде объекта (типа XDTOОбъект.MX1.XML_FILE.XML_FILE <- здесь строка с этим ХМЛом, ну или как-то так). Дальше делайте с ним што хочите.
ЗЫ: На стороне САП дятлы походу, ибо XML не в виде пакета/объекта передают, а в виде строки. Видимо все, кто что-то в этом понимает, и правда свалили - один я остался )))
11. user1046602 02.08.23 10:25 Сейчас в теме
так и получаю

Определение = Новый WSОпределения("C:/Users/savina.ikt/Documents/Severstal/ws2/BC_SYS_CLNT_si_DataLoad_outb_syn­cService_2.wsdl", Пользователь, Пароль,,,ssl1); 
Прокси = Новый WSПрокси(Определение, "http://severstal.com/pi/O2C/1C", "si_DataLoad_outb_syncService", "HTTPS_Port",, , ssl1);

ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://severstal.com/pi/O2C/1C").Получить("dt_DataLoad_MX1_req");

WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
	WSПараметр.dummy = Формат(9002, "ЧГ=100");    
		
	РезультатВебОперации =  Прокси.MX1(WSПараметр);  

Показать


РезультатВебОперации содержит МХ1 - списокXDTO - если он не пустой, то тоже не читается - ошибка чтенияXML. Поэтому пытаюсь загрузить ту XML, что получаю в SOAPUL.
12. starik-2005 3080 02.08.23 10:38 Сейчас в теме
(11)
списокXDTO
Список XDTO - это список объектов. К нему можно или в цикле обратиться (для каждого Х из У), или по индексу (у[0]). Внутри нужные объекты. Просто в отладчике поглядите - все поймете откуда и что брать.
СтрокаХМЛ = Ответ.MX1[0].XML_FILE.XML_FILE;
13. user1046602 02.08.23 14:21 Сейчас в теме
(12) В точке
РезультатВебОперации =  Прокси.MX1(WSПараметр); 

Ошибка при вызове метода контекста (MX1)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(149)}: РезультатВебОперации = Прокси.MX1(WSПараметр);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://severstal.com/pi/O2C/1C}:si_DataLoad_outb_syncService:MX1()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://severstal.com/pi/O2C/1C}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://severstal.com/pi/O2C/1C}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://severstal.com/pi/O2C/1C}dt_DataLoad_MX1_resp

Всетаки со стороны отправителя не читаемый XML отправляют? Не та кодировка если есть не читаемые символы?
14. starik-2005 3080 02.08.23 15:13 Сейчас в теме
(13)
со стороны отправителя
Да. Они посылают пакет, которые не соответствует описанию в WSDL-файле. Скорее всего они изменили пакет, прочитав про свой дебилизм, поэтому WSDL-файл надо обновить, ну или вызвать не так, как у Вас (из файла), а прямо с урла:
//Определение = Новый WSОпределения(имяФайла, блаблабла);
Определение = Новый WSОпределения(Урл, блаблабла);
Ну или если у Вас там нестандартный порт юзается, то нужно просто обновить WSDL-файл, поправив сцылки.
19. user1046602 02.10.23 10:31 Сейчас в теме
(14) Добрый день. Возможно ли в 1с посмотреть XML- запрос который 1с отправляет к веб-сервису? В виде XML-файла.
20. starik-2005 3080 02.10.23 10:50 Сейчас в теме
(19)
В виде XML-файла
Ответный вопрос - зачем? Сам по себе формат определяется в стандартах SOAP или HTTP. Если у Вас сервис возвращает ошибку, то проблема скорее всего не в пакете, который посылает 1С, но 1С не посылает ничего из того, что бы не описал автор запроса.

Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
21. user1880116 02.10.23 11:29 Сейчас в теме
(20)
Только это вряд ли поможет

"А вот мои ответы приводят к результату." (С) starik-2005
22. user1046602 03.10.23 08:56 Сейчас в теме
(21) Простите за назойливость, может это и за гранью моего понимания, но....

В 1с сервис вроде бы работает, но несовсем. Если для передачи нет файлов, т.е. отправляют пустой ответ по запросу из 1с:

РезультатВебОперации =  Прокси.MX1(WSПараметр); 

То в результате веб операции - это ОбъектХДТО содержащий МХ1 - СписокХДТО но список пустой.
Если с сапа отправляют хмл документ, то в момен
РезультатВебОперации =  Прокси.MX1(WSПараметр); 
я получаю ошибку:
Ошибка при вызове метода контекста (MX1)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(149)}: РезультатВебОперации = Прокси.MX1(WSПараметр);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://severstal.com/pi/O2C/1C}:si_DataLoad_outb_syncService:MX1()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://severstal.com/pi/O2C/1C}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://severstal.com/pi/O2C/1C}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://severstal.com/pi/O2C/1C}dt_DataLoad_MX1_resp

Но в SOAPUL этот хмл в какой то корявой кодировке (см. фото). Специалисты сап тут ничем помочь не могут и просят хмл запрос который отпарвляет 1с к сап.

Вот что отвечают специалисты сап:

Внутри ответа сервиса содержится тестовое поле содержащие xml. Я не знаю что это за xml и не знаю его структуру данных.
Кодировка тут не причём.
А ошибка у вас скорее всего из за того что вы пытаетесь сопоставить вложенный текст с wsdl сервиса, это никогда работать не будет.
Вам надо достать текст и парсить его отдельно предварительно преобразовав его в xml.
Предлагаю с начала добиться корректной работы, а потом поговорим по поводу кодировки. Давайте есть слона постепенно.

Я не понимаю их ответ. Что я должна с этим делать если в 1с получить корректный ответ веб сервиса не могу. И где искать ошибку? В каком направлении смотреть?
Прикрепленные файлы:
23. user1046602 03.10.23 09:32 Сейчас в теме
Или здесь какье то сложное определение типа ответа веб сервиса которое не знаю я как получить. См фото.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот