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

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

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

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

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

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

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

Ладно, спасибо.
Все же этот вариант лучше чем ничего.
32 France
 
19.12.17
23:38
я бы сопкаст установил, и оттуда тянул бы.. и там ошибки легче ловить..
33 jedbez
 
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"" >")

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