Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

XML фильтр

XML фильтр
Я
   МикаМ
 
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
Совсем никаких вариантов??? :(
   vmv
 
3 - 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.Имя;
    Возврат текСтрока.Строки;
КонецФункции
   vmv
 
4 - 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с этот фильтр - при выгрузке в таблицу значений - выгружает как поле "регистратор"... Откуда его и можно вытащить...

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует