|   |   | 
| 
 | Узнать тип документа по первому флагу в XML через ФабрикуXDTO | ☑ | ||
|---|---|---|---|---|
| 0
    
        DiFas 14.08.19✎ 14:19 | 
        Добрый день. Нужна ваша помощь! Предисловие: партнер компании присылает нам файл XML для того, чтобы мы внесли его себе в базу в виде одного из трёх документов.
 Есть три типа таких документов: ЗаявкаПокупателя, ВозвратТоваровОтПокупателя и ПоступлениеТоваровУслуг. Вопрос такой: я переписываю обработку, которая загружает этот файл. Раньше она была через ПостроительDOM, а надо через ФабрикуXDTO. Ну не то, что бы надо. Просто построитель медленный, а файлы большие. Поэтому лучше через фабрику считывать. Примерный вид этого XML: <ЗаявкаПокупателя> <Документ> <ДатаДокумента> <НомерДоговора> и т.д. В ПостроительDOM я понимал вид документа "ЗаявкаПокупателя" через условие: Источник = Новый ЧтениеXML; Источник.ОткрытьФайл(Путь); Построитель = Новый ПостроительDOM; Документ = Построитель.Прочитать(Источник); Если Документ.ЭлементДокумента.ИмяУзла="ЗаказПотребителя" Тогда... и т.д. А ФабрикаXDTO сразу начинается считывать с флага <Документ>. То есть ну прям вообще ни в каком свойстве или методе это не видно. Может быть не всё знаю Помогите разобраться... База УТ 10.3, обычные формы | |||
| 1
    
        DiFas 14.08.19✎ 14:21 | 
        Ошибся в условии: Если Документ.ЭлементДокумента.ИмяУзла="ЗаявкаПокупателя" Тогда... и т.д     | |||
| 2
    
        DiFas 14.08.19✎ 14:55 | 
        Никто не знает?     | |||
| 3
    
        DiFas 14.08.19✎ 15:16 | 
        Походу такой хренью только я занимаюсь...     | |||
| 4
    
        Вафель 14.08.19✎ 15:20 | 
        А что говорит ОбъектXDTO.Тип() | |||
| 5
    
        unbred 14.08.19✎ 15:20 | ||||
| 6
    
        Вафель 14.08.19✎ 15:22 | 
        (5) Это спукс вниз, а нужно наверх     | |||
| 7
    
        unbred 14.08.19✎ 15:23 | 
        (6) там как раз про тип в начале топика.     | |||
| 8
    
        DiFas 14.08.19✎ 15:25 | ||||
| 9
    
        Вафель 14.08.19✎ 15:29 | 
        (8) в отладчике смотрел?     | |||
| 10
    
        DiFas 14.08.19✎ 15:39 | 
        (9) конечно!     | |||
| 11
    
        DiFas 15.08.19✎ 07:46 | 
        А если мой XML-файл перевести в строку?     | |||
| 12
    
        DiFas 15.08.19✎ 08:08 | 
        Тогда новый вопрос такой: как первые 2-3 строки XML-файла перенести в строку и уже оттуда узнавать какой тип документа?     | |||
| 13
    
        infosoft-v 15.08.19✎ 08:35 | 
        Я делаю так:
 -- с помощью ресурса в интернете изготавливаю из документа XML схему XSD. При изготовлении схемы нужно использовать структуру "Венецианские жалюзи". 1С с такой структурой работает лучше всего. -- загружаю схему XSD в пакет XDTO, устанавливаю пространство имен, проверяю и если нужно уточняю типы атрибутов пакета. -- по "каким то" признакам понимаю тип документа и добавляю в файл XML атрибут пространства имен NS. Для каждого типа документа свое пространство имен в соответствии с пакетами XDTO -- делаю фабрику из пакета и объект из документа XML | |||
| 14
    
        infosoft-v 15.08.19✎ 08:38 | 
        Тогда новый вопрос такой: как первые 2-3 строки XML-файла перенести в строку
 Можно воспользоваться последовательным чтением XML через объект ЧтениеXML | |||
| 15
    
        DiFas 15.08.19✎ 08:51 | 
        (14) я уже ранее писал, что сейчас обработка работает через последовательное чтение через ПостроительDOM     | |||
| 16
    
        DiFas 15.08.19✎ 09:26 | 
        Короче, всё оказалось куда проще:
 Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ВыбФайл.ПолноеИмя); Пока Чтение.Прочитать() Цикл КонецЦикла; Первый проход цикла и будет со значением "ЗаявкаПокупателя"... Всем спасибо и хорошего дня | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |