|   |   | 
| 
 | v7: Импорт данных из xml | ☑ | ||
|---|---|---|---|---|
| 0
    
        MaxStarkov 04.08.11✎ 14:26 | 
        Задача стоит следующая: 
  имеется xml файл следующего содержания: <?xml version="1.0" encoding="WINDOWS-1251"?> -<Корневой> <!--Выгрузка проводок за 31.01.2011 23:59:59--> <Проводка Примечание="#Выгрузка проводок за 31.01.2011 ОсновныеНачисления" Сумма="15 000" СубконтоКт3="" СубконтоКт2="заработная плата" СубконтоКт1="Сотрудник" Кредит="70" СубконтоДт3="" СубконтоДт2="" СубконтоДт1="Заработная плата без НДФЛ" Дебет="26" Дата="31.01.2011"/> </Корневой> понятно, что элементов в файле в действительности значительно больше. Этот файл нужно загрузить в 1С 7.7, загрузить просто хотя бы для того, чтобы в дальнейшем с этими данными можно было бы выполнять различные действия. И вроде бы все понятно, вот мой код по загрузке: Процедура Сформировать() // Формирование таблицы проводок // Проверка на загрузку внешней компоненты Если гВнешняяКомпонента_Загрузить("v7plus.dll")=0 Тогда Возврат; КонецЕсли; // Проверка на заполнение пути и имени файла Если ПустоеЗначение(ПутьФайл)=1 Тогда Предупреждение("Не выбран файл!"); Возврат; КонецЕсли; // Импорт данных Анализатор=СоздатьОбъект("AddIn.XMLParser"); Д=Анализатор.СоздатьДокумент(); Д.Загрузить(Каталог+Файл); Узел=Д.ВыбратьУзел("Корневой"); Для i=1 По Узел.КоличествоПодчиненных() Цикл ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i); Сообщить(ТекУзел.ПолучитьАтрибут("Сумма")); КонецЦикла; КонецПроцедуры файл загружается и код работает до строчки: Сообщить(ТекУзел.ПолучитьАтрибут("Сумма")); на этой строчке все прерывается и выдается сообщение: Поле агрегатного объекта не обнаружено (ПолучитьАтрибут) смысл ошибки мне понятен, но как все же прочитать данные из файла о сумме, дебете, кредите и т.д.? И ведь применяю к элементу ТекУзел действующий метод, но все равно получается ошибка. А вот если например применить метод ПредставлениеXML(), то в окне сообщений выводится строка со всеми атрибутами элемента, но как обратиться и получить данные каждого из них по отдельности? В качестве xml парсера обычная v7plus.dll | |||
| 1
    
        Ёпрст гуру 04.08.11✎ 14:32 | 
        (0)
  Для i=0 По Узел.КоличествоПодчиненных()-1 Цикл ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i); | |||
| 2
    
        andrewks 04.08.11✎ 14:33 | 
        -<Корневой>
  что за тире? | |||
| 3
    
        Ёпрст гуру 04.08.11✎ 14:33 | 
        +1
  Параметры: <НомерУзла> - числовое выражение, содержащее номер требуемого узла. Нумерация узлов начинается с нуля ©СП ЗЫ: СП купить у ДенисЧ | |||
| 4
    
        ЧеловекДуши 04.08.11✎ 14:35 | ||||
| 5
    
        andrewks 04.08.11✎ 14:40 | 
        лучше юзать msxml     | |||
| 6
    
        MaxStarkov 04.08.11✎ 14:41 | 
        что за тире?
  это просто из експлорера копировал файл. тире на самом деле нет) Для i=0 По Узел.КоличествоПодчиненных()-1 Цикл ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i); не работает, пробовал уже. да, видимо придется воспользоваться OpenXML. В итоге можно сказать, что парсер v7plus.dll не рабочий? | |||
| 7
    
        andrewks 04.08.11✎ 14:43 | 
        парсер v7plus.dll рабочий. но не на любом файле и не на любом окружении     | |||
| 8
    
        MaxStarkov 04.08.11✎ 14:46 | 
        Ну хорошо, сделаю все на OpenXML. Делал даже когда то на нем...года два назад. Всем спасибо за оперативные ответы!     | |||
| 9
    
        andrewks 04.08.11✎ 15:16 | 
        Попытка
  //ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0"); ДОМ=СоздатьОбъект("MSXML2.DOMDocument"); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.async=0; ДОМ.validateOnParse=-1; ДОМ.resolveExternals=-1; ДОМ.load(ИмяФайла); Если (ДОМ.parseError.errorCode<>0) Тогда // ошибки при проверке валидности Сообщить("При проверке валидности файла "+ИмяФайла+" выявлены ошибки!","!"); Возврат 0; КонецЕсли; Элем1=ДОМ.getElementsByTagName("Корневой").item(0); Для ном=0 По Элем1.childNodes.length-1 Цикл ДочЭлем=Элем1.childNodes(ном); Если (ДочЭлем.nodeType=1) Тогда Сообщить("Атрибут Сумма = "+ДочЭлем.getAttribute("Сумма")); КонецЕсли; КонецЦикла; | |||
| 10
    
        andrewks 04.08.11✎ 15:24 | 
        (3) по-ходу, в СП пистёшь. с единицы принимает только
  а трабла в комменте. в7+, в силу своей ограниченности, не знает про камменты в хмл | |||
| 11
    
        MaxStarkov 04.08.11✎ 15:52 | 
        "а трабла в комменте."
  Точно!!! Без него все работает отлично. Огромное спасибо за помощь! | |||
| 12
    
        1Сергей 04.08.11✎ 16:26 | 
        В любом месте дерева может быть размещен элемент-комментарий. XML-комментарии размещаются внутри специального тега, начинающегося с символов <!-- и заканчивающегося символами -->. Два знака дефис (--) внутри комментария присутствовать не могут.
  wiki:XML | |||
| 13
    
        andrewks 04.08.11✎ 16:33 | 
        (12) и?     | |||
| 14
    
        1Сергей 04.08.11✎ 16:55 | 
        (13) а у него -<Корневой>     | |||
| 15
    
        andrewks 04.08.11✎ 17:00 | 
        (14) читай (2)(6)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |