Имя: Пароль:
1C
1С v8
Как прочитать в XML тег Документ.ТегКоторыйМожетОтсутствовать через ФабрикаХДТО?
,
0 totparen
 
29.06.17
15:02
Ребята, подскажите как правильно читать значение тега, если он не обязательный?

Например:

    ХМЛ = Новый ЧтениеXML();
    ХМЛ.ОткрытьФайл(ДанныеПредзаказа.Файл.ПолноеИмя);
    ФайлХДТО = ФабрикаXDTO.ПрочитатьXML(ХМЛ);
    лЗначение = ФайлХДТО.Документ.ТегКоторыйМожетОтсутсовать; // Здесь возникает исключение.

Создание фабрики на основе XSD схемы не помогает.
1 totparen
 
29.06.17
15:04
Ищется не способ, как это обойти, а как по фен-шую значение получать.
2 totparen
 
29.06.17
15:05
Обойти я могу так:

лЗначение = СвойствоХДТО(ФайлХДТО.Документ,"ТегКоторыйМожетОтсутсовать");



Функция СвойствоХДТО(ОбъектХДТО,ИмяСвойства,ЗначениеПоУмолчанию = Неопределено)
    
    КоллекцияСвойств = ОбъектХДТО.Свойства();
    СвойствоХДТО = КоллекцияСвойств.Получить(ИмяСвойства);
    Если СвойствоХДТО = Неопределено Тогда
        Возврат ЗначениеПоУмолчанию;
    Иначе
        Возврат ОбъектХДТО.Получить(СвойствоХДТО);
    КонецЕсли;
    
КонецФункции
3 Имитация работы
 
29.06.17
15:31
емнип ПолучитьXDTO(), если там неопределено, то идти в тип этого свойства и брать оттуда ЗначениеПоУмолчанию
4 Имитация работы
 
29.06.17
15:32
возможно в тип ходить и не придется, надо проверить
5 Вафель
 
29.06.17
15:40
а чем попытка не по феншую?
6 totparen
 
29.06.17
15:46
(3) Нифига. Если свойства нет, то исключение.
7 totparen
 
29.06.17
15:47
(5) Если у меня в ХМЛ будет 20 не обязательных реквизитов, то, нутром чую, что 20 попыток лепить - это через чур.
8 тарам пам пам
 
29.06.17
16:01
В (2) у тебя все "по фэншую", разве что можно сразу написать
СвойствоХДТО = ОбъектХДТО.Получить(ИмяСвойства);

а не через коллекцию свойств
9 тарам пам пам
 
29.06.17
16:06
+(8) вот так:

Функция СвойствоХДТО(ОбъектХДТО,ИмяСвойства,ЗначениеПоУмолчанию = Неопределено)
    
    ЗначениеСвойства = ОбъектХДТО.Получить(ИмяСвойства);
    Если ЗначениеСвойства = Неопределено Тогда
        Возврат ЗначениеПоУмолчанию;
    Иначе
        Возврат ЗначениеСвойства;
    КонецЕсли;
    
КонецФункции
10 totparen
 
29.06.17
16:15
(9)

Враки.

ОбъектХДТО.Получить("ТраЛяЛя) - будет исключение.
11 тарам пам пам
 
29.06.17
16:18
(10) если в схеме свойство описано (пусть даже как не обязательное) - то не будет
12 totparen
 
29.06.17
16:21
(11) Допустим. Не проверял ещё.
Тогда придется всегда всегда значения из ХМЛ дёргать через "СвойствоХДТО" ?
13 тарам пам пам
 
29.06.17
16:23
(12) да. Ну или можно напрямую, если поле обязательное.
14 totparen
 
29.06.17
16:24
Может как-то можно сгенерировать структуру на основе ХМЛ, и дополнить её недостающими ключами на основе ХСД?  (Хотя мне кажется где-то тут собачка зарыта...)