|
XML фильтр | ☑ | ||
---|---|---|---|---|
0
МикаМ
21.01.13
✎
14:38
|
Люди добрые, подскажите плиз, кто сталкивался - а то уже третий день мозги пухнут.....
Есть XML файл с выгрузкой остатков и документов... Там где идут ссылки на записи регистров в файле через фильтр указывается какому документу принадлежит эта запись..... Примерно вот так: <AccumulationRegisterRecordSet.ТоварыОрганизаций> <Filter> <Recorder xsi:type="DocumentRef.КорректировкаЗаписейРегистров">a4d26e9a-5c8b-11e2-9d9e-00e04d815445</Recorder> </Filter> <Records/> </AccumulationRegisterRecordSet.ТоварыОрганизаций> А теперь собственно сам вопрос - как сделать фильтрацию по конкретному документу при чтении информации из файла или хотя бы при чтении записи подглядеть какой у нее документ в фильтре??? |
|||
1
МикаМ
21.01.13
✎
14:42
|
Читаю файл вот так...
Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ПолеИмениФайла); Пока ВозможностьЧтенияXML(Чтение) Цикл Типус=Чтение.ЛокальноеИмя; Если Типус="AccumulationRegisterRecordSet.ПартииТоваровНаСкладах" Тогда // и вот в этот момент нужно знать значение фильтра // ТекСкл=""; ТтЗ=ЗаписанноеЗначение.Выгрузить(); Для Каждого СтрокаИсходнойТаблицы Из ТтЗ Цикл НоваяСтрока = ТЗ.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла; КонецЕсли; КонецЦикла; Чтение.Закрыть(); |
|||
2
МикаМ
21.01.13
✎
14:50
|
Совсем никаких вариантов??? :(
|
|||
3
vmv
21.01.13
✎
14:59
|
я так делал для консолидации персонификации из филиалов для Украины в 8.1, но не столь важно для какой задачи
// Методы обработки XML, грузим хмл-файл в свое Дз Процедура ЧитатьXML(ИмяФайлаЧтение, РодительскаяСтрокаXML) // очистим дерево РодительскаяСтрокаXML.Строки.Очистить(); XML = Новый ЧтениеXML(); XML.ОткрытьФайл(ИмяФайлаЧтение); текСтрока = РодительскаяСтрокаXML.Строки.Добавить(); ЗаполнитьЗначенияСвойств(текСтрока, РодительскаяСтрокаXML); текСтрока.Параметр = ИмяФайлаЧтение; СтрокиДерева = текСтрока.Строки; Пока XML.Прочитать() Цикл Если XML.ТипУзла = ТипУзлаXML.Текст Тогда // текст элемента, может быть только после начала элемента // в ТекСтрока сейчас должен быть узел текСтрока.Значение = XML.Значение; ИначеЕсли XML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда СтрокиДерева = ДобавитьУзел(СтрокиДерева, XML, РодительскаяСтрокаXML); ИначеЕсли XML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // установим родителя Если СтрокиДерева.Родитель.Родитель = Неопределено Тогда // нет узла верхнего уровня СтрокиДерева = СтрокиДерева.Родитель.Строки; Иначе СтрокиДерева = СтрокиДерева.Родитель.Родитель.Строки; КонецЕсли; КонецЕсли; Пока XML.ПрочитатьАтрибут() Цикл текСтрока = СтрокиДерева.Добавить(); ЗаполнитьЗначенияСвойств(текСтрока, РодительскаяСтрокаXML); текСтрока.Параметр = XML.Имя; текСтрока.Значение = XML.Значение; а=1; КонецЦикла; КонецЦикла; XML.Закрыть(); //Дерево = Новый ХранилищеЗначения(ДеревоXML); КонецПроцедуры Функция ДобавитьУзел(СтрокиДерева, XML, РодительскаяСтрокаXML) текСтрока = СтрокиДерева.Добавить(); ЗаполнитьЗначенияСвойств(текСтрока, РодительскаяСтрокаXML); далее выборки из своего Дз Отбор = Новый Структура; Отбор.Вставить("ПолноеИмя", ТекПуть + "\XML\" + ИмяТаблицыPFZ); Отбор.Вставить("Параметр" , "PAY_TP"); Отбор.Вставить("Значение" , СтрокТзТипыНачислений.ТипНачисления); мНайденныеСтроки = ЭтаФорма.ДеревоФайлов.Строки.НайтиСтроки(Отбор, Истина); Если мНайденныеСтроки.Количество() = 0 Тогда Продолжить; КонецЕсли; Для Н = 0 По мНайденныеСтроки.ВГраница() Цикл мНайденныеСтроки[Н] = мНайденныеСтроки[Н].Родитель; КонецЦикла; .... Отбор = Новый Структура; Отбор.Вставить("ПолноеИмя", ТекПуть + "\XML\" + ИмяТаблицыPFZ); Отбор.Вставить("Параметр" , "ROW"); мНайденныеСтроки = ЭтаФорма.ДеревоФайлов.Строки.НайтиСтроки(Отбор, Истина); Если мНайденныеСтроки.Количество() = 0 Тогда Продолжить; КонецЕсли; ..... и т.д. текСтрока.Параметр = XML.Имя; Возврат текСтрока.Строки; КонецФункции |
|||
4
vmv
21.01.13
✎
15:02
|
Функция ДобавитьУзел(СтрокиДерева, XML, РодительскаяСтрокаXML)
текСтрока = СтрокиДерева.Добавить(); ЗаполнитьЗначенияСвойств(текСтрока, РодительскаяСтрокаXML); текСтрока.Параметр = XML.Имя; Возврат текСтрока.Строки; КонецФункции оборвалось, юзай |
|||
5
МикаМ
21.01.13
✎
15:09
|
Угу - по идее так должно взять, но это не через фильтр - очень затянет время обработки... Должен же существовать способ попроще...
|
|||
6
МикаМ
21.01.13
✎
15:10
|
не зря же там этот фильтр стоит, значит можно как-то к нему подобраться...
|
|||
7
МикаМ
22.01.13
✎
12:11
|
Не получается по предложенному варианту.... :( Может у кого-то еще будут идеи, ну хоть одна?
|
|||
8
МикаМ
22.01.13
✎
12:12
|
Может как-то через xdto можно? я им просто ни разу не пользовался...
|
|||
9
МикаМ
23.01.13
✎
15:03
|
Вроде разобрался - если кому-то будет нужно, то 1с этот фильтр - при выгрузке в таблицу значений - выгружает как поле "регистратор"... Откуда его и можно вытащить...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |