Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Фабрика XDTO. "Вытащить" косячный тэг.

Фабрика XDTO. "Вытащить" косячный тэг.
Я
   mTema32
 
18.12.17 - 16:28
Добрый день!
Может тут кто-нить в курсе и подскажет.
Есть схема XDTO.
Есть кусок кода

Попытка
  нОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(лЧтение, лТип);
Исключение
  ЗаписатьЛог(ОписаниеОшибки());
КонецПопытки;

Если в файле содержится неверный тип(как в схеме), ПрочитатьXML справедливо валится в исключение с ошибкой: Значение: 'тест1' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer

Это замечательно, но можно ли как-нибудь узнать в каком конкретно месте/свойстве не тот тип прилетел? Имя свойства.
Спасибо.
 
 
   DmitrO
 
1 - 18.12.17 - 16:35
Убери попытку и увидишь что в исключении есть вся информация.
Надо использовать ИнформацияОбОшибке(), там есть вложенные объекты ошибки.
   mTema32
 
2 - 18.12.17 - 16:42
(1) В смысле убрать попытку? Обработка валится с ошибкой. Или я чет не понимаю?
   Fragster
 
3 - 18.12.17 - 16:45
(2) изучи то, что возвращает ИнформацияОбОшибке(), там есть позиция в файле, в которой ошибка.
   mTema32
 
4 - 18.12.17 - 16:50
(1)(3)
Вот что возвращает ИнформацияОбОшибке()
{Обработка.ФормированиеЗаявок.МодульОбъекта(209)}: Ошибка при вызове метода контекста (ПрочитатьXML)
        нОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(лЧтение, лТип);
по причине:
Ошибка проверки данных XDTO:
Значение: 'тест1' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer

Самого имени свойства нет, есть его несоответствующее значение.
   Fragster
 
5 - 18.12.17 - 16:51
ИнформацияОбОшибке() внутри созедржит ИнформацияОбОшибке которая содержит ИнформацияОбОшибке которая содаржит ...
   mTema32
 
6 - 18.12.17 - 16:56
(5) Нет там этой инфы. Есть тоже что выше выложил, только в виде структуры.
   DmitrO
 
7 - 18.12.17 - 16:58
А в свойстве Причина что?
   mTema32
 
8 - 18.12.17 - 17:03
(7)Ошибка проверки данных XDTO:
Значение: 'тест1' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer

Остальные поля пустые.
   mTema32
 
9 - 18.12.17 - 17:06
Причина, значение ИнформацияОбОшибке. Имя модуля - пусто, ИсходнаяСтрока - пусто, НомерСтроки- 0, Описание - выше писал, Причина - неопределено.
   Cyberhawk
 
10 - 18.12.17 - 17:26
Ты что, первое вхождение "тест1" в файле не можешь найти?
 
 Рекламное место пустует
   mTema32
 
11 - 18.12.17 - 17:37
(10) А при чем тут это? В другом файле будет "тест125". В третьем "ололоо". У меня есть свойство, точнее так - мнооого свойств в схеме, которые хотелось бы однозначно с типом определить. И врукопашную не делать проверки, потому что фабрика это сама умеет делать на основании схемы.
Есть например 20 свойств, все типа int. Прилетит мне файл, где одно из этих свойств с буквами залетело из внешней системы, как я определю в какое конкретно свойство попал не тот тип данных?
   Fragster
 
12 - 18.12.17 - 17:38
(11) в подавляющем большинстве случаев загрузить часть информации по последствиям (в т.ч. долговременным) хуже, чем не загрузить ничего
   mTema32
 
13 - 18.12.17 - 17:42
(12) Так я не спорю. Но весьма странно, что метод прочитатьXML() "видя" несоответствие в схеме и файле, не может вернуть имя свойства, а вот значение может.
   Kuzmich123
 
14 - 18.12.17 - 17:43
(0) топикастер, а тебе надо один раз отловить ошибку или автоматизировать это? Если один раз, то выгрузи xsd из фабрикиXDTO, да натяни на xml в какой-нить студии или альтове
   mTema32
 
15 - 18.12.17 - 17:45
(14) Надо автоматизировать.
   Cyberhawk
 
16 - 18.12.17 - 18:12
(11) Ну как при чем - ошибку же нужно устранить
   DES
 
17 - 18.12.17 - 20:05
возьми notepad++ Загрузи плагин XMLTools
Получишь инструмент работы с XML
Мне здорово помогает.
Им можно проверить твой XML на соответствие схемы.
   mTema32
 
18 - 19.12.17 - 12:23
(16) Не нужно ничего устранять, нужно просто зафиксировать факт косяка и где он произошел. Если первое работает, то второе вот пока не знаю.
   mTema32
 
19 - 19.12.17 - 12:24
(17) Мне нужно это делать:
а) Программно.
б) Максимально быстро, в виду обработки очереди из файлов xml, которые автоматом залетают в сервис.
   Cyberhawk
 
20 - 19.12.17 - 12:28
(18) Ну тогда (10) сам бог велел
   Serginio1
 
21 - 19.12.17 - 13:18
   mTema32
 
22 - 19.12.17 - 13:48
(20) Я возможно чет не понимаю, но каким образом (10) поможет?

(21) Спасибо, посмотрю. Но зачем тогда ОбъектXDTO нужен если все равно приходится сторонними компонентами пользоваться?
   mTema32
 
23 - 19.12.17 - 13:49
+(22) (21) Совсем забыл. У нас сервер на линуксе и соответствующая обработка, так что этот вариант не подойдет.
   Cyberhawk
 
24 - 19.12.17 - 14:29
(22) Зная значение, на котором спотыкается платформенный парсер, ты без труда найдешь и имя свойства / атрибута, в котором это значение сидит
   Serginio1
 
25 - 19.12.17 - 14:59
(23) Ну можно и на линуксе через ВК.
Я пока не делал, под линукс, но там суть та же http://catalog.mista.ru/public/544232/
   Serginio1
 
26 - 19.12.17 - 15:00
Проще конечно сделать отдельный сервис
   mTema32
 
27 - 19.12.17 - 15:13
(24) Так я не знаю это значение.
   Cyberhawk
 
28 - 19.12.17 - 16:21
(27) Оно указано в тексте ошибки как бы
   mTema32
 
29 - 19.12.17 - 17:44
(28) Указано значение(!) поля. Оно может быть любой строкой.
   Cyberhawk
 
30 - 19.12.17 - 18:30
(29) Лол?
   mTema32
 
31 - 19.12.17 - 19:10
(30) Я понял о чем речь. Туплю чет, на старость лет.
Но это даст только первый косячный тэг, в случаях два и более в текст ошибки все равно попадает только первый.

Ладно, спасибо.
Все же этот вариант лучше чем ничего.
   France
 
32 - 19.12.17 - 23:38
я бы сопкаст установил, и оттуда тянул бы.. и там ошибки легче ловить..
   jedbez
 
33 - 20.12.17 - 01:15
Если используете фабрикуXDTO, то в файле XML должна быть ссылка на пространство имен.
Пример:
<PERS>
    <ID_PAC>102</ID_PAC>
    <FAM>Фамилия</FAM>
    <IM>Имя</IM>
    <OT>От</OT>
</PERS>

Надо заменить заголовок:

ТекСтрока = СтрЗаменить(ТекСтрока,"<PERS>","<PERS xmlns=""uri:TFOMS_PK"" >")

Иначе Фабрика чаще всего будит крашиться с ошибкой неправильных типов в файле.
 
 
   mTema32
 
34 - 20.12.17 - 09:33
(32) А можно по-подробнее? Что такое сопкаст и как его едят?
(33) С пространством имен все в порядке, заменяю.
   George Wheels
 
35 - 20.12.17 - 10:03
Фабрика.Пакеты.Получить(ПространствоИмен).КорневыеСвойства...
   mTema32
 
36 - 20.12.17 - 10:30
(35) Это к чему ваще?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Миста — веселый ресурс со своими эксклюзивными тараканами Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует