Имя: Пароль:
1C
 
КД 2.0 DOM xpath
0 kai17
 
17.09.08
10:59
Пишу правила конвертации 8.1 -> 8.1
После загрузки объекта "организации" хочу на основании данных XML  файла сделать дополнительные действия .
для  этого  в обработчике "ПослеЗагрузкиОбъекта"  пишу:
Нпп = одАтрибут(ФайлОбмена, одТипСтрока, "Нпп");
DOMПостроитель =  Новый ПостроительDOM() ;
ЧтениеXML = Новый ЧтениеXML ;
ЧтениеXML.ОткрытьФайл(ИмяФайлаОбмена) ;
DOMФайлОбмена = DOMПостроитель.Прочитать(ЧтениеXML) ;
ТекстЗапросаXPath = "/Объект[@Нпп="""+Нпп+"""][@Тип=""СправочникСсылка.Организации""][@ИмяПравила=""Организации""]" ;
XPathЗапрос = DOMФайлОбмена.СоздатьВыражениеXPath(ТекстЗапросаXPath,DOMФайлОбмена.СоздатьРазыменовательПИ(DOMФайлОбмена)) ;  
РезультатЗапросаXPath = DOMФайлОбмена.ВычислитьВыражениеXPath(XPathЗапрос ,DOMФайлОбмена ,,DOMФайлОбмена.СоздатьРазыменовательПИ(DOMФайлОбмена)) ;//XPathЗапрос.Вычислить(DOMФайлОбмена);  //
КоличествоНайденныхЭлеметов = РезультатЗапросаXPath.РазмерСнимка ;
Сообщить("КоличествоНайденныхЭлеметов = "+КоличествоНайденныхЭлеметов+"
| ТекстЗапросаXPath : "+ТекстЗапросаXPath) ;
Сообщить("ПолучитьСледующий  = "+РезультатЗапросаXPath.ПолучитьСледующий()) ;
Пока НЕ(РезультатЗапросаXPath.ПолучитьСледующий()= Неопределено)  Цикл
   Сообщить("РезультатЗапросаXPath "+РезультатЗапросаXPath) ;
КонецЦикла

в итоге выдаёт что свойство РазмерСнимка не существует у объекта РезультатЗапросаXPath .
Что я делаю не правильно ?
1 Defender aka LINN
 
17.09.08
11:02
(0) Ипануться... Ниче, что в этом событии "Приемник" - это ЗаписьXML? Не говоря уж о том, что файл еще не записан, а может и не создан?
2 borik
 
17.09.08
11:04
(0) Если уж ты формируешь динамически запрос по объектам, может пойти дальше и формировать его аналогично и по реквизитам объекта, а там и выборку также сделать, глядишь проблема и снимется.
3 kai17
 
17.09.08
11:06
(1) Переменная "Приемник" используется при выгрузке .
Событие вызывается при загрузке.
Используются переменные :
ИмяФайлаОбмена - строка с полным именем файла обмена .
Нпп - порядковый номер текущего загруженного объекта.
4 Defender aka LINN
 
17.09.08
11:08
(3) При загрузке? Ладно, ошибся, там не "Приемник", а "ФайлоОбмена". И что ж ты хочешь сделать-то? Есть мнение, что пытаешься очередной велосипед изобрести.
5 kai17
 
17.09.08
11:09
(2) выборка (xpath) как раз  и не работает. Формировать дополнительные данные  в xml на этапе выгрузки пока не требуется (использую только стандартные реквизиты объектов).
6 kai17
 
17.09.08
11:11
(4) Согласен , велосипед . но хочу его сделать на xpath через DOM .
Необходимо получить атрибут "наименование" у объекта с атрибутом НПП =<например 3>
7 Defender aka LINN
 
17.09.08
11:12
(6) Так что является целью: "сделать на xpath через DOM", или все же "получить атрибут "наименование" у объекта с атрибутом НПП =<например 3>"?
8 kai17
 
17.09.08
11:16
(6) основная задача - получить аттрибут .
для  упрощения выборки данных был выбран  инструмент xpath (как наиболее удобный для запросов по параметрам в XML) .  
Каким образом  можно получить аттрибут  без использования прямого перебора узлов ?
9 Defender aka LINN
 
17.09.08
11:18
(8) Я бы тупо запоминал при загрузке в параметры :) Или стандартными методами обработки.
10 kai17
 
17.09.08
11:25
(8) если данные произвольные , то можно и в параметры . в данном случае данные типовые (код , наименование , реквизиты) . Стандартные методы обработки не позволяют получить предыдущий объект/узел (по НПП) .
11 Defender aka LINN
 
17.09.08
11:32
(10) А ты так уверен, что предыдущий узел - это тот объект, что тебе нужен? Делай средствами 1С и не парься.
12 kai17
 
17.09.08
11:45
(10)  задам вопрос по другому , xpath вообще в 1с работает ? где взять пример? (типовые xpath'ом не польузются , везде ПолучитьАтрибут по имени/номеру )
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший