Что не так с этим XML?
В результате подключения к веб-сервису SAP получаю следующий XML-файл, но 1с прочитатье его в фабрику ХDTO не может.
Файл получила в SOAPUL.
Ошибка 1с:
Ошибка при вызове метода контекста (ПрочитатьXML)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(244)}: Данные = Прокси.ФабрикаXDTO.ПрочитатьXML(Чтение);
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty
ФайлXML "C:\Users\savina.ikt\Documents\Severstal\МХ1_test.xml" Строка
Если делаю Чтение.ОткрытьФайл(ФайлXML);, то весь файл получаю одной строкой, а должна же получить в виде ХDTO реквизитов передаваемых этим файлом.
В результате подключения к веб-сервису 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
По теме из базы знаний
- Веб-сервисы, что они и как их применить в реальных условиях
- Использование SoapUi для работы с веб-сервисами. Часть 2
- Обмен данными онлайн через Веб-сервис с использованием обработки "Универсальный обмен данными XML"
- Ускорение чтения правил обмена в УПП 1.3 в 20 раз!
- 5 ситуаций, когда в экосистеме 1C нужны веб-сервисы
Найденные решения
(5)
После этого в переменной XDTOОбъект будет находится тот самый XML в виде объекта (типа XDTOОбъект.MX1.XML_FILE.XML_FILE <- здесь строка с этим ХМЛом, ну или как-то так). Дальше делайте с ним што хочите.
ЗЫ: На стороне САП дятлы походу, ибо XML не в виде пакета/объекта передают, а в виде строки. Видимо все, кто что-то в этом понимает, и правда свалили - один я остался )))
Что же всетаки не так?)
Так вопрос о том, каким образом Вы этот файл получаете, не раскрыт. Правильные поцики получают как-то так:
W = Новый WSОпределение(УрлТочкиВхода, какие-то-параметры типа таймаута и пароля);
P = Новый WSПрокси(W, точкивхода и прочее);
P.Пароль = "ххх";
P.Логин = "ууу";
XDTOОбъект = P.GetЧтоТоТамБлаБлаБла(Параметры);
ЗЫ: На стороне САП дятлы походу, ибо XML не в виде пакета/объекта передают, а в виде строки. Видимо все, кто что-то в этом понимает, и правда свалили - один я остался )))
(11)
списокXDTO
Список XDTO - это список объектов. К нему можно или в цикле обратиться (для каждого Х из У), или по индексу (у[0]). Внутри нужные объекты. Просто в отладчике поглядите - все поймете откуда и что брать.СтрокаХМЛ = Ответ.MX1[0].XML_FILE.XML_FILE;
(13)
Ну или если у Вас там нестандартный порт юзается, то нужно просто обновить WSDL-файл, поправив сцылки.
со стороны отправителя
Да. Они посылают пакет, которые не соответствует описанию в WSDL-файле. Скорее всего они изменили пакет, прочитав про свой дебилизм, поэтому WSDL-файл надо обновить, ну или вызвать не так, как у Вас (из файла), а прямо с урла:
//Определение = Новый WSОпределения(имяФайла, блаблабла);
Определение = Новый WSОпределения(Урл, блаблабла);
(19)
Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
В виде XML-файла
Ответный вопрос - зачем? Сам по себе формат определяется в стандартах SOAP или HTTP. Если у Вас сервис возвращает ошибку, то проблема скорее всего не в пакете, который посылает 1С, но 1С не посылает ничего из того, что бы не описал автор запроса.
Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Та же ошибка: Ошибка при вызове метода контекста (ПрочитатьXML)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(245)}: Данные = ФабрикаXDTO.ПрочитатьXML(Чтение);
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty
Если писать то как 1с определит структуру в которую нужно XML прочитать?
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(245)}: Данные = ФабрикаXDTO.ПрочитатьXML(Чтение);
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty
Если писать
ФабрикаXDTO.ПрочитатьXML(Чтение);
(3) Да, в шапке файла ответ сервера, а ниже уже реквизиты документа нужные мне. В 1с-то я не смогла увидеть резутьтат ответа веб сервиса, этот файл получен в SOAPUL.
Даже если удалить шапку файла и оставить тело документа он тоже не читается. Ошибка та-же Document is empty.
Что же всетаки не так?)
Даже если удалить шапку файла и оставить тело документа он тоже не читается. Ошибка та-же Document is empty.
Что же всетаки не так?)
(5)1С ничего не знает про пространства имен и используемые типы значений в них, содержащиеся в файле, поэтому и не может ничего прочитать самостоятельно.
Более того, символы "<" заменены на "& # 60 ;"(без пробелов), их нужно обратно превратить.
Более того, символы "<" заменены на "& # 60 ;"(без пробелов), их нужно обратно превратить.
(10)
Например
И внезапно пациент начинает понимать про XML, про пространства имен, про термнологию, про точки подключения... видит и осознает как это реализовано на 1С, какие структуры, описывающие протокол, что означают.
Но это не наш путь. Наш путь - зайти со стороны прикладного решения и мучаться даже в терминологии, не понимая принципов и желая чтобы всё сразу.
Расскажите мне про курсы,
Если снять с себя любимые шоры одной цифры и одной буковки, и вспомнить, что это называется RPC, то тот же гугл открывает море возможностей.
Например
И внезапно пациент начинает понимать про XML, про пространства имен, про термнологию, про точки подключения... видит и осознает как это реализовано на 1С, какие структуры, описывающие протокол, что означают.
Но это не наш путь. Наш путь - зайти со стороны прикладного решения и мучаться даже в терминологии, не понимая принципов и желая чтобы всё сразу.
(15)
одной цифры и одной буковки, и вспомнить
|А если вспомнить до конца, то совет пойти на курсы ни к чему не привел, при том совет был с цитатой кода 1С. А вот мои ответы приводят к результату. Отсюда как бы вопрос Ваших компетенций. Вы тут с целью самоутвердиться за чужой счет буквы пишите? Печально, что не можете самоутвердиться за собственный счет. Может тоже на курсы Вас послать?
(16)
(16)
совет был с цитатой кода 1С
Ну вот оно и есть, типичное нежелание 1Сника выбраться за границы своего уютненького и понять, как именно устроены те технологии, которые он пытается использовать.
(16)
Печально, что не можете самоутвердить
Боженьки, какие же вы, 1Сники, восхитительно одинаковые, даже в своих обидах. Это у вас прямо в генетике прошивают, что-ли...
(17)
типичное нежелание 1Сника выбраться за границы
На себя поглядите, выбравщийся за границы и не имеющий возможности принести хоть какую-тор пользу. А про RPC я еще лет 20 писал назад, так что не ко мне вопросы. Тем более в винде это все сделано школьниками для школьников. При том сервис того же ЦБ 1С подтягивает через WSDL, в то время как для питона приходится юзать Doctor (если Вы вообще способны понять, о чем я тут).
(5)
После этого в переменной XDTOОбъект будет находится тот самый XML в виде объекта (типа XDTOОбъект.MX1.XML_FILE.XML_FILE <- здесь строка с этим ХМЛом, ну или как-то так). Дальше делайте с ним што хочите.
ЗЫ: На стороне САП дятлы походу, ибо XML не в виде пакета/объекта передают, а в виде строки. Видимо все, кто что-то в этом понимает, и правда свалили - один я остался )))
Что же всетаки не так?)
Так вопрос о том, каким образом Вы этот файл получаете, не раскрыт. Правильные поцики получают как-то так:
W = Новый WSОпределение(УрлТочкиВхода, какие-то-параметры типа таймаута и пароля);
P = Новый WSПрокси(W, точкивхода и прочее);
P.Пароль = "ххх";
P.Логин = "ууу";
XDTOОбъект = P.GetЧтоТоТамБлаБлаБла(Параметры);
ЗЫ: На стороне САП дятлы походу, ибо XML не в виде пакета/объекта передают, а в виде строки. Видимо все, кто что-то в этом понимает, и правда свалили - один я остался )))
так и получаю
РезультатВебОперации содержит МХ1 - списокXDTO - если он не пустой, то тоже не читается - ошибка чтенияXML. Поэтому пытаюсь загрузить ту XML, что получаю в SOAPUL.
Определение = Новый 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.
(11)
списокXDTO
Список XDTO - это список объектов. К нему можно или в цикле обратиться (для каждого Х из У), или по индексу (у[0]). Внутри нужные объекты. Просто в отладчике поглядите - все поймете откуда и что брать.СтрокаХМЛ = Ответ.MX1[0].XML_FILE.XML_FILE;
(12) В точке
Ошибка при вызове метода контекста (MX1)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(149)}: РезультатВебОперации = Прокси.MX1(WSПараметр);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {}:si_DataLoad_outb_syncService:MX1()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {}dt_DataLoad_MX1_resp
Всетаки со стороны отправителя не читаемый XML отправляют? Не та кодировка если есть не читаемые символы?
РезультатВебОперации = Прокси.MX1(WSПараметр);
Ошибка при вызове метода контекста (MX1)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(149)}: РезультатВебОперации = Прокси.MX1(WSПараметр);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {}:si_DataLoad_outb_syncService:MX1()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {}dt_DataLoad_MX1_resp
Всетаки со стороны отправителя не читаемый XML отправляют? Не та кодировка если есть не читаемые символы?
(13)
Ну или если у Вас там нестандартный порт юзается, то нужно просто обновить WSDL-файл, поправив сцылки.
со стороны отправителя
Да. Они посылают пакет, которые не соответствует описанию в WSDL-файле. Скорее всего они изменили пакет, прочитав про свой дебилизм, поэтому WSDL-файл надо обновить, ну или вызвать не так, как у Вас (из файла), а прямо с урла:
//Определение = Новый WSОпределения(имяФайла, блаблабла);
Определение = Новый WSОпределения(Урл, блаблабла);
(19)
Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
В виде XML-файла
Ответный вопрос - зачем? Сам по себе формат определяется в стандартах SOAP или HTTP. Если у Вас сервис возвращает ошибку, то проблема скорее всего не в пакете, который посылает 1С, но 1С не посылает ничего из того, что бы не описал автор запроса.
Посмотреть, конечно, можно, и много как. Есть все эти сканеры трафика, например. Только это вряд ли поможет, т.к. проблема именно в содержании файла, а не в формате. И сервер в общем-то должен давать четкий ответ, что не так.
(21) Простите за назойливость, может это и за гранью моего понимания, но....
В 1с сервис вроде бы работает, но несовсем. Если для передачи нет файлов, т.е. отправляют пустой ответ по запросу из 1с:
То в результате веб операции - это ОбъектХДТО содержащий МХ1 - СписокХДТО но список пустой.
Если с сапа отправляют хмл документ, то в момен
я получаю ошибку:
Ошибка при вызове метода контекста (MX1)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(149)}: РезультатВебОперации = Прокси.MX1(WSПараметр);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {}:si_DataLoad_outb_syncService:MX1()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {}dt_DataLoad_MX1_resp
Но в SOAPUL этот хмл в какой то корявой кодировке (см. фото). Специалисты сап тут ничем помочь не могут и просят хмл запрос который отпарвляет 1с к сап.
Вот что отвечают специалисты сап:
Внутри ответа сервиса содержится тестовое поле содержащие xml. Я не знаю что это за xml и не знаю его структуру данных.
Кодировка тут не причём.
А ошибка у вас скорее всего из за того что вы пытаетесь сопоставить вложенный текст с wsdl сервиса, это никогда работать не будет.
Вам надо достать текст и парсить его отдельно предварительно преобразовав его в xml.
Предлагаю с начала добиться корректной работы, а потом поговорим по поводу кодировки. Давайте есть слона постепенно.
Я не понимаю их ответ. Что я должна с этим делать если в 1с получить корректный ответ веб сервиса не могу. И где искать ошибку? В каком направлении смотреть?
В 1с сервис вроде бы работает, но несовсем. Если для передачи нет файлов, т.е. отправляют пустой ответ по запросу из 1с:
РезультатВебОперации = Прокси.MX1(WSПараметр); То в результате веб операции - это ОбъектХДТО содержащий МХ1 - СписокХДТО но список пустой.
Если с сапа отправляют хмл документ, то в момен
РезультатВебОперации = Прокси.MX1(WSПараметр); Ошибка при вызове метода контекста (MX1)
{ВнешняяОбработка.ПроверкаВэбСервисаОтветхранение.Форма.Форма.Форма(149)}: РезультатВебОперации = Прокси.MX1(WSПараметр);
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {}:si_DataLoad_outb_syncService:MX1()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {}dt_DataLoad_MX1_resp - [1,253]
Проверка дополнительного свойства:
форма: Элемент
имя: MX1
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {}dt_DataLoad_MX1_resp
Но в SOAPUL этот хмл в какой то корявой кодировке (см. фото). Специалисты сап тут ничем помочь не могут и просят хмл запрос который отпарвляет 1с к сап.
Вот что отвечают специалисты сап:
Внутри ответа сервиса содержится тестовое поле содержащие xml. Я не знаю что это за xml и не знаю его структуру данных.
Кодировка тут не причём.
А ошибка у вас скорее всего из за того что вы пытаетесь сопоставить вложенный текст с wsdl сервиса, это никогда работать не будет.
Вам надо достать текст и парсить его отдельно предварительно преобразовав его в xml.
Предлагаю с начала добиться корректной работы, а потом поговорим по поводу кодировки. Давайте есть слона постепенно.
Я не понимаю их ответ. Что я должна с этим делать если в 1с получить корректный ответ веб сервиса не могу. И где искать ошибку? В каком направлении смотреть?
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
