Имя: Пароль:
1C
 
XDTO пакет, разбор ответа.
0 yyyuuu
 
06.02.20
06:02
Друзья приет всем. Не могу понять, и читал и руками ковырял и все ровно понять не могу что Я делаю тут не так.

Начинается так: <?xml version='1.0' encoding='UTF-8'?><reference14ASU><row>..........

Хочу разбрать ипользуя XDTO пакеты которые Я загрузил по схеме XSD.
Делаю так ТипЗначенияXDTO = ФабрикаXDTO.Тип("http://service.siw.pktbcki.rzd/";, "reference14ASUResponse");
Получаю свойства.
https://ibb.co/dWqpGkM
Тут под первым индексом Мой первый узел.
https://ibb.co/hFpyfVW
https://ibb.co/0JXGKPK
Я не могу понять что делаю не так, вроде все как по учебнику же сделал. Помогите пожалуйста друзья, ваще заглох прям.
1 yyyuuu
 
06.02.20
06:04
Чтение объекта типа: {http://service.siw.pktbcki.rzd/}reference14ASUResponse - [1,252]
Проверка дополнительного свойства:
    форма: Элемент
    имя: row: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://service.siw.pktbcki.rzd/}reference14ASUResponse
2 yyyuuu
 
06.02.20
06:14
Я ужеи так и так пробовал ну что только не сделал. Вообще въехать не могу. Ребята Надеюсь на вашу отзывчивость
3 yyyuuu
 
06.02.20
06:56
Может кто то поймет что тут не так происходит)
4 бегинер
 
06.02.20
08:33
пришли скриншот из soapui в котором видно сам xml ответ - чтоб понять его структуру

я так разбирал ответ xml ранее с дислокацией:

ответ = Прокси.GetDislocation4Group(WSПараметр);//получил ответ

Для Каждого Элемент Из ответ.GetDislocation4GroupResult.diffgram.DislocationSet.DislocationTable Цикл;
  
   Свойство=Элемент.получить("WagonModel");//модель вагона, устанавливаем какое сво-во будем читать
   модель_вагона=элемент.WagonModel; получаем само значение нашего свой-ва из ответа xml пакета

цикл;


т.е. массив набора вагонов у меня в ответе лежал иерархично:
diffgram>DislocationSet>DislocationTable

внутри DislocationTable уже был массив элементов с дислокацией вагонов, который в цикле мы обходим
5 yyyuuu
 
06.02.20
08:48
6 yyyuuu
 
06.02.20
08:49
Да У Меня вроде и схемы и все что угодно бери да разбирай. А что то получается какая херня ) точнее даже она не получается)
7 бегинер
 
06.02.20
09:12
так попробуй:

Для Каждого Элемент Из ответ.reference14ASU.row Цикл;
  
   Свойство=Элемент.получить("NOM_VAG");//номер вагона

   сообщить(элемент.NOM_VAG);



цикл;

в "ответ" - те данные xml полученные
8 yyyuuu
 
06.02.20
09:20
ЧтениеXML = Новый ЧтениеXML;        
        ЧтениеXML.УстановитьСтроку(Разбор.Значение);
          ТипЗначенияXDTO = ФабрикаXDTO.Тип("http://service.siw.pktbcki.rzd/ ", "reference14ASUResponse");
        
        Попытка
            ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипЗначенияXDTO); - Вот тут спекается, не верные поля. Я не дохожу еще до разбора даже)
        Исключение
            Сообщить("Ошибка при разборе ХМЛ Справка№14");
            Сообщить(ОписаниеОшибки());
            Возврат ЛОжь;
        КонецПопытки;
9 бегинер
 
06.02.20
09:25
ну ты через чтениеXML делаешь - оно и ругается, может ответ не соотв размеченной структуре.

попробуй моим вариантов, эт типа как ручками читаем xml  - не через "чтениеXML"

Результат = WSПрокси.GetBlock(ИмяПользователя, Пароль,ТекстЗапроса);//тут или под другому - получаешь Справка№14

ответ=Результат;

и далее мой код
10 бегинер
 
06.02.20
09:27
я помню тоже мучался, в итоге как получил в 1с xml - обрабатывал моим способом, у меня были случаи что не все поля в ответе были обязательные - т.е. провайдер не следил за строгой структурой, делал попытка - исключение - иначе ругалось "нет такого поля"
11 yyyuuu
 
06.02.20
10:10
ЧтениеXML = Новый ЧтениеXML;        
        ЧтениеXML.УстановитьСтроку(Разбор.Значение);
          ТипЗначенияXDTO = ФабрикаXDTO.Тип();
        
        Попытка
            ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипЗначенияXDTO);
        Исключение
            Сообщить("Ошибка при разборе ХМЛ Справка№14");
            Сообщить(ОписаниеОшибки());
            Возврат ЛОжь;
        КонецПопытки;    
        
        
        Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);
        //СериализаторXDTO.ВозможностьЧтенияXML(ЗначениеXDTO.NOM_NAK);
Если Я уберу тип фабрики то Я спокойно его прочитаю, правда некоторые элементы идут как Объект XDTO. Хочу разобрать через фабрику ну не могу понять ну где что не так        
Для каждого ЗначениеXDTO Из ОбъектXDTOreference14ASU.row Цикл
12 бегинер
 
06.02.20
10:23
ну нет здесь никакого удобства:

что здесь пишешь ручками поле NOM_NAK:
СериализаторXDTO.ВозможностьЧтенияXML(ЗначениеXDTO.NOM_NAK)

что ручками:

Свойство=Элемент.получить("NOM_VAG")//номер вагона

один фиг все поля при чтении будешь сам писать какие надо, так что нет смысла мне каж. заморачиваться
13 бегинер
 
06.02.20
10:23
убирай тип фабрики и читай спокойно не парься :)
14 Deon
 
06.02.20
10:28
(11) Я РЖДшные справки через ПостроительDOM в ТаблицуЗначений загоняю, потом уже смотрю, что там получилось.
А если через схему, то можно попробовать загнать в ЧтениеXML строку между <row> </row> и смотреть, что там не так, например, убирая по одному полю из XDTO-пакета. Там поля <DATE_KON> и <DATE_NAZN>, возможно, всё портят
15 yyyuuu
 
07.02.20
07:35
ДА там объект XDTO  не читается никак, а так бы его читанул и все)
16 yyyuuu
 
07.02.20
07:35
(14)
Покажи пример)
17 yyyuuu
 
07.02.20
08:09
ФабрикаXDTO.Тип("http://service.siw.pktbcki.rzd/";;, "reference14ASUResponse").Свойства.Получить("reference14ASU").Тип.Свойства.Получить("row").Тип;
Уже так сделал, все ровно говорит что:
роверка дополнительного свойства:
    форма: Элемент
    имя: row: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://service.siw.pktbcki.rzd/}reference14ASU
18 yyyuuu
 
18.02.20
09:00
Не у кого не появились мысли рябта по этому поводу?)
19 CaIIIka
 
18.02.20
09:16
В том и проблема (в данном случае у вас), что 1С отвергает малейшие отклонения в XML от схемы. Нужно курить всю схему и искать эти отличия. Или искать причины по которым эти отличия имеются. Это нудный и кропотливый процесс. И, вот так на форуме, не видя всей картины и предыстории, вам врядли кто-то скажет: "вы вот тут у этого свойства вот это поменяйте"...
Еще возможно, что на другом конце внесли изменения в схему, и нужно просто у вас ее обновить, чтобы системы понимали друг друга. Любо забить на схему и грузить все напрямую.
20 yyyuuu
 
19.02.20
07:08
Если есть желание Я могу любую недостающую информацию придоставить. Чтобы стало понятнее что к чему и зачем
21 yyyuuu
 
20.02.20
07:41
Я вот хочу понять, ну как же ХДТО работает. Как его раскочегарить. Задолбаби значения объект ХДТО