|   |   | 
| 
 | Импорт xml файла в виде дерева значений | ☑ | ||
|---|---|---|---|---|
| 0
    
        sergejkonet 28.07.14✎ 09:46 | 
        Всем доброго времени суток! необходимо выполнить импорт дерева чертежей, представленного в виде xml-файла в справочник чертежи 1С. создал табличное поле с типом дерево значений, в табличное поле добавил необходимые столбцы, прописал следующий код на открытие файла XML. 
 Процедура ЗагрузитьИзЛоцманаXML_Иерархически() Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); Фильтр = "Файл данных (*.xml)|*.xml"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл загрузки"; ДиалогОткрытияФайла.ПредварительныйПросмотр = Ложь; Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла; Иначе Возврат; КонецЕсли; ТаблицаЗагрузки.Строки.Очистить(); XML_Документ = Новый ЧтениеXML; XML_Документ.ОткрытьФайл(ИмяФайла); Пока XML_Документ.Прочитать() Цикл Если XML_Документ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда //Если XML_Документ.Имя = "object" Тогда ТипЭлемента = XML_Документ.ПолучитьАтрибут("Type"); Если ТипЭлемента = "Сборочная единица" Тогда Стр = ТаблицаЗагрузки.Строки.Добавить(); //Стр.ЭтоГруппа = Истина; Стр.ID = СокрЛП(XML_Документ.ПолучитьАтрибут("Id")); Стр.Наименование = СокрЛП(XML_Документ.ПолучитьАтрибут("Name")); Стр.НомерЧертежа = СокрЛП(XML_Документ.ПолучитьАтрибут("Product")); //ПрочитатьВложенныеУровни(XML_Документ, Стр) ИначеЕсли ТипЭлемента = "Деталь" Тогда Стр = ТаблицаЗагрузки.Строки.Добавить(); //Стр.ЭтоГруппа = Ложь; Стр.ID = СокрЛП(XML_Документ.ПолучитьАтрибут("Id")); Стр.Наименование = СокрЛП(XML_Документ.ПолучитьАтрибут("Name")); Стр.НомерЧертежа = СокрЛП(XML_Документ.ПолучитьАтрибут("Product")); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Но файл открывается в виде неранжированного списка, а как ы мне его представить в виде дерева значений? Что бы потом можно было дальше это дерево экспортировать в систему. | |||
| 1
    
        Asmody 28.07.14✎ 10:01 | 
        Если это дерево, то должны быть уровни где-то как-то. 
 В 1С у строки дерева значений тоже есть свойство Строки. | |||
| 2
    
        Asmody 28.07.14✎ 10:03 | 
        Если xml-файл небольшой, то его можно открыть через документ DOM, который имеет "деревянную" структуру.     | |||
| 3
    
        sergejkonet 28.07.14✎ 10:10 | 
        (2) Ну размер файлов колеблется от 200 до 400 кб. С уровнями в xml файле уровни есть, но никаких общих ID на этих уровнях я не прослеживаю, т.е. как перенести эти уровни в 1С?     | |||
| 4
    
        Asmody 28.07.14✎ 10:22 | 
        пример xml кинь. только не сюда, а на http://pastebin.com/     | |||
| 5
    
        acsent 28.07.14✎ 10:23 | 
        (2) Думаешь большой файл проще в дерево загнать без дома?     | |||
| 6
    
        acsent 28.07.14✎ 10:24 | 
        А вообще юзай XDTO - 2 строчки кода и объект с данными готов     | |||
| 7
    
        Asmody 28.07.14✎ 10:30 | 
        (6) для XDTO схему надо рисовать     | |||
| 8
    
        sergejkonet 28.07.14✎ 10:43 | ||||
| 9
    
        sergejkonet 28.07.14✎ 10:44 | 
        (6)Думал про XDTO, но там надо точную схему нарисовать, а xml не из 1с((     | |||
| 10
    
        Asmody 28.07.14✎ 10:47 | 
        (8) там что, в значениях атрибутов правда кавычки неэкранированные, или это pastebin перевирает?     | |||
| 11
    
        sergejkonet 28.07.14✎ 10:53 | 
        нет, pastebin вставил все верно.     | |||
| 12
    
        sergejkonet 28.07.14✎ 10:54 | 
        (10) значения атрибутов там и правда в неэкранированных кавычках.     | |||
| 13
    
        Asmody 28.07.14✎ 10:56 | 
        (12) Я тебя "поздравляю". Чините выгрузку, с таким ни один нормальный xml-парсер работать не будет.     | |||
| 14
    
        sergejkonet 28.07.14✎ 11:08 | 
        (13) ну данные вроде как он извлекает, значения атрибутов Product, Name, Id. он мне выдает, но выдает в виде неранжированной таблицы.     | |||
| 15
    
        Asmody 28.07.14✎ 11:11 | 
        (14) так для этого тебе либо надо самому анализировать что это за узел, есть ли у него вложенные узлы, отслеживать текущий уровень вложенности, либо пользоваться DOM.     | |||
| 16
    
        sergejkonet 28.07.14✎ 11:23 | 
        (15) а для использования DOM необходимо навести с неэкранированными кавычками? Т.к. навести порядок с этим практически нереально, т.к. как мне сказали конструктора работающие с лоцманом, править xml загрузки нельзя, то остается только описывать вручную все уровни вложенные. в данном файле их вроде как 7, но вот привязать иерархию к какому-то ID, тут так просто и не подцепишься, поля родитель и подавну нет.     | |||
| 17
    
        Asmody 28.07.14✎ 11:43 | 
        (16) а ты уверен, что у тебя ПолучитьАтрибут("Name") возвращает именно 
 [Автоматизированная газораспределительная станция (АГРС) "Снежеть" Q=85000м3 / /ч Комплекс технологического оборудования ТУ 3647-240-05772641-01] По-идее, должен на второй кавычке обрубаться. | |||
| 18
    
        sergejkonet 28.07.14✎ 11:59 | 
        (17) Нет, возвращает все верно. полностью все значение атрибута Name. Попробую сейчас через DOM дерево получить.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |