Имя: Пароль:
1C
1C 7.7
v7: Загрузка из xml
,
0 work92
 
18.05.16
11:59
Есть xml  файл нужно выгрузит информацию но вы всех сообщениях на данные выскакивает OLE в чем может быть проблема.

Процедура Выполнить()            
    Если ПустоеЗначение(ФайлЭксп)=1 Тогда
        Предупреждение("Выберете файл выгрузки!");
        Возврат;
    КонецЕсли;
    Если ФС.СуществуетФайл(ФайлЭксп) = 0 Тогда
        Предупреждение("Файл с таким именем не существует!");                    
        Возврат;
    КонецЕсли;
    Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда
    Предупреждение("Компонента не обнаружена");
    Возврат;
  КонецЕсли;
    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    ХМЛ =СоздатьОбъект("AddIn.XMLParser");
    ФайлДанных=Анализатор.СоздатьДокумент();
    Попытка
        ФайлДанных.Загрузить(ФайлЭксп);        
    Исключение
        Сообщить("Не выбран файл!!!");
    КонецПопытки;

    Попытка
        ВсеУзлы=ФайлДанных.ВыбратьУзлы(СокрЛП("Statements"));    
        Данные=ВсеУзлы.ПолучитьУзел(0);
    Исключение
        Предупреждение("Не правильный файл выписок!");
        Возврат;
    КонецПопытки;
    ДатаВыписки=Данные.ВыбратьУзлы(".//*");
    Сообщить("Количество"+ДатаВыписки.КоличествоУзлов()) ;
    Для ДатаВып=0 по ДатаВыписки.КоличествоУзлов()-1 Цикл
        ДатаТекущейВыписки=ДатаВыписки.ПолучитьУзел(0).Значение;
    КонецЦикла;    
    ЗагруженныеДанные.УдалитьСтроки();
    Если ПустоеЗначение(СтрокаЗапросаДок)=0 Тогда
        Документы=Данные.ВыбратьУзлы(СтрокаЗапросаДок);
        Сообщить("Документы"+Документы)  ;
        Для Док=0 по Документы.КоличествоУзлов()-1 Цикл
            Доки=Документы.ПолучитьУзел(Док);                                              
            Бенефициар=Данные.ВыбратьУзлы(СтрокаЗапросаБениф);                      
            Контрагент=Данные.ВыбратьУзлы(СтрокаЗапросаКонтр);                      
            Если (СокрЛП(Доки.ПолучитьПодчиненныйПоНомеру(5).Наименование)="Beneficiar") и (ДокОплаты=1)Тогда
                Сообщить("Сумма"+Доки.ПолучитьПодчиненныйПоНомеру(4).Значение);
                ЗагруженныеДанные.НоваяСтрока();
                ЗагруженныеДанные.Название =СокрЛП("Списание средств со счета");
                ЗагруженныеДанные.Date =ДатаТекущейВыписки;
                ЗагруженныеДанные.DocumentNumber =Доки.ПолучитьПодчиненныйПоНомеру(1).Значение;
                ЗагруженныеДанные.DocType=1;
                ЗагруженныеДанные.OperType =Доки.ПолучитьПодчиненныйПоНомеру(3).Значение;
                ЗагруженныеДанные.Amount =Доки.ПолучитьПодчиненныйПоНомеру(4).Значение;
                Для Бен=0 по Бенефициар.КоличествоУзлов()-1 Цикл
                    Контрики=Бенефициар.ПолучитьУзел(Бен);
                    Сообщить("Бен"+Бенефициар.ПолучитьУзел(Бен)) ;
                    Если (Док<>Бен) Тогда
                        Продолжить;
                    КонецЕсли;
                    Если Контрики.КоличествоПодчиненных()>0 Тогда
                        ЗагруженныеДанные.Account=СокрЛП(ЗагруженныеДанные.Account)+Контрики.ПолучитьПодчиненныйПоНомеру(1).Значение;    
                        ЗагруженныеДанные.BIC=СокрЛП(ЗагруженныеДанные.BIC)+Контрики.ПолучитьПодчиненныйПоНомеру(2).Значение;    
                        ЗагруженныеДанные.UNN=СокрЛП(ЗагруженныеДанные.UNN)+Контрики.ПолучитьПодчиненныйПоНомеру(3).Значение;    
                        ЗагруженныеДанные.BIC=СокрЛП(ЗагруженныеДанные.BIC)+Контрики.ПолучитьПодчиненныйПоНомеру(4).Значение;    
                        ЗагруженныеДанные.Name=СокрЛП(ЗагруженныеДанные.Name)+Контрики.ПолучитьПодчиненныйПоНомеру(5).Значение;    
                        ЗагруженныеДанные.Ground=СокрЛП(ЗагруженныеДанные.Ground)+Контрики.ПолучитьПодчиненныйПоНомеру(6).Значение;    
                    КонецЕсли;
                КонецЦикла;      
            КонецЕсли;
            
            Если (СокрЛП(Доки.ПолучитьПодчиненныйПоНомеру(5).Наименование)="Payer") и (ДокПоступления=1) Тогда
                ЗагруженныеДанные.НоваяСтрока();
                ЗагруженныеДанные.Название =СокрЛП("Поступление средств на счет");
                ЗагруженныеДанные.Date =ДатаТекущейВыписки;
                ЗагруженныеДанные.DocumentNumber =Доки.ПолучитьПодчиненныйПоНомеру(1).Значение;
                ЗагруженныеДанные.DocType=2;
                ЗагруженныеДанные.OperType =Доки.ПолучитьПодчиненныйПоНомеру(3).Значение;
                ЗагруженныеДанные.Amount =Доки.ПолучитьПодчиненныйПоНомеру(4).Значение;
                Для Контр=0 по Контрагент.КоличествоУзлов()-1 Цикл
                    Контрики=Контрагент.ПолучитьУзел(Контр);
                    Если (Док-Бенефициар.КоличествоУзлов())<>Контр Тогда
                        Продолжить;
                    КонецЕсли;
                    Если Контрики.КоличествоПодчиненных()>0 Тогда
                        ЗагруженныеДанные.Account=СокрЛП(ЗагруженныеДанные.Account)+Контрики.ПолучитьПодчиненныйПоНомеру(1).Значение;    
                        ЗагруженныеДанные.BIC=СокрЛП(ЗагруженныеДанные.BIC)+Контрики.ПолучитьПодчиненныйПоНомеру(2).Значение;    
                        ЗагруженныеДанные.UNN=СокрЛП(ЗагруженныеДанные.UNN)+Контрики.ПолучитьПодчиненныйПоНомеру(3).Значение;    
                        ЗагруженныеДанные.BIC=СокрЛП(ЗагруженныеДанные.BIC)+Контрики.ПолучитьПодчиненныйПоНомеру(4).Значение;    
                        ЗагруженныеДанные.Name=СокрЛП(ЗагруженныеДанные.Name)+Контрики.ПолучитьПодчиненныйПоНомеру(5).Значение;    
                        ЗагруженныеДанные.Ground=СокрЛП(ЗагруженныеДанные.Ground)+Контрики.ПолучитьПодчиненныйПоНомеру(6).Значение;    
                    КонецЕсли;
                КонецЦикла;      
            КонецЕсли;
        КонецЦикла;    
    Иначе
        Предупреждение("В строке запроса ничего нет!");
    КонецЕсли    
КонецПроцедуры
1 ДенисЧ
 
18.05.16
12:03
Что и куда выскакивает?
2 Ёпрст
 
18.05.16
12:03
(0) а что там должно быть, по-твоему ?
3 work92
 
18.05.16
12:04
Контрики=Бенефициар.ПолучитьУзел(Бен);
                    Сообщить("Бен"+Бенефициар.ПолучитьУзел(Бен)) ;
4 work92
 
18.05.16
12:05
Я первый раз загружаю их xml может есть примы
5 Ёпрст
 
18.05.16
12:06
(3)
да уж..
ПолучитьУзел(<?>)
Синтаксис:
ПолучитьУзел(<Номер>)
Назначение
Метод используется для организации доступа к отдельным узлам документа, вошедшим в выборку.
Возвращаемое значение:
Узел документа (элемент или атрибут).
Параметры:
<Номер> - числовое выражение, номер узла в выборке. Нумерация узлов в выборке начинается с нуля.


Если че, возвращаемые объекты - не "родные" для 1с, вот и видишь ты там всегда - ОЛЕ

Можно смотреть только простые типы - строка, дата, число
6 Ёпрст
 
18.05.16
12:06
Смотри, значение атрибута, хотя бы или Имя узла/элемента
7 work92
 
18.05.16
12:07
А как сделать чтобы было нужное значение
8 Ёпрст
 
18.05.16
12:08
Сообщить("Контрики " + Контрики.ИмяТега);
9 Ёпрст
 
18.05.16
12:10
Или так
Сообщить("Контрики " + Контрики.Наименование);Сообщить("Контрики " + Контрики.Значение);

и т.д.. я хз, пользовался лишь однажды 1с-овской приблудой. Через ДомДокумент понятнее сделано
10 work92
 
18.05.16
12:14
Тут вообще не выводит сообщение
11 Ёпрст
 
18.05.16
12:15
отладчик в рукти и вперёд