Чтение 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 2899 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 2899 02.08.23 10:38 Сейчас в теме
(11)
списокXDTO
Список XDTO - это список объектов. К нему можно или в цикле обратиться (для каждого Х из У), или по индексу (у[0]). Внутри нужные объекты. Просто в отладчике поглядите - все поймете откуда и что брать.
СтрокаХМЛ = Ответ.MX1[0].XML_FILE.XML_FILE;
14. starik-2005 2899 02.08.23 15:13 Сейчас в теме
(13)
со стороны отправителя
Да. Они посылают пакет, которые не соответствует описанию в WSDL-файле. Скорее всего они изменили пакет, прочитав про свой дебилизм, поэтому WSDL-файл надо обновить, ну или вызвать не так, как у Вас (из файла), а прямо с урла:
//Определение = Новый WSОпределения(имяФайла, блаблабла);
Определение = Новый WSОпределения(Урл, блаблабла);
Ну или если у Вас там нестандартный порт юзается, то нужно просто обновить WSDL-файл, поправив сцылки.
20. starik-2005 2899 02.10.23 10:50 Сейчас в теме
(19)
В виде XML-файла
Ответный вопрос - зачем? Сам по себе формат определяется в стандартах SOAP или HTTP. Если у Вас сервис возвращает ошибку, то проблема скорее всего не в пакете, который посылает 1С, но 1С не посылает ничего из того, что бы не описал автор запроса.

Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 2899 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 67 02.08.23 09:25 Сейчас в теме
(4)
как 1с определит структуру в которую нужно XML прочитать?

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

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

Что же всетаки не так?)
7. nomad_irk 67 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 2899 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 2899 03.08.23 21:57 Сейчас в теме
(15)
одной цифры и одной буковки, и вспомнить
|А если вспомнить до конца, то совет пойти на курсы ни к чему не привел, при том совет был с цитатой кода 1С. А вот мои ответы приводят к результату. Отсюда как бы вопрос Ваших компетенций. Вы тут с целью самоутвердиться за чужой счет буквы пишите? Печально, что не можете самоутвердиться за собственный счет. Может тоже на курсы Вас послать?
17. user1880116 04.08.23 07:37 Сейчас в теме
(16)
совет был с цитатой кода 1С
Ну вот оно и есть, типичное нежелание 1Сника выбраться за границы своего уютненького и понять, как именно устроены те технологии, которые он пытается использовать.

(16)
Печально, что не можете самоутвердить
Боженьки, какие же вы, 1Сники, восхитительно одинаковые, даже в своих обидах. Это у вас прямо в генетике прошивают, что-ли...
18. starik-2005 2899 04.08.23 10:04 Сейчас в теме
(17)
типичное нежелание 1Сника выбраться за границы
На себя поглядите, выбравщийся за границы и не имеющий возможности принести хоть какую-тор пользу. А про RPC я еще лет 20 писал назад, так что не ко мне вопросы. Тем более в винде это все сделано школьниками для школьников. При том сервис того же ЦБ 1С подтягивает через WSDL, в то время как для питона приходится юзать Doctor (если Вы вообще способны понять, о чем я тут).
9. starik-2005 2899 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 2899 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 2899 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 2899 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 Сейчас в теме
Или здесь какье то сложное определение типа ответа веб сервиса которое не знаю я как получить. См фото.
Прикрепленные файлы:
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день