Имя: Пароль:
1C
1C 7.7
v7: Проблема с разбором XML
0 Sashgun
 
29.07.11
08:39
Столкнулся с такой проблемой. Вот ошибка
Документ № БПЮА0000257
Номенклатура = Номен.ВыбратьУзел("Номенклатура").Значение;
{C:\USERS\AVOCHKASOV\DESKTOP\ЗАГРУЗКА ПОСТУПЛЕНИЙ ИЗ БУХ.ERT(68)}: Значение не представляет агрегатный объект (Значение)

Мой код :
Процедура Выполнить()                              
    Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда
         Предупреждение("Внешняя компонента не найдена");
         Возврат;
    КонецЕсли;                              
         //
         Анализатор=СоздатьОбъект("AddIn.XMLParser");
         ДокXML=Анализатор.СоздатьДокумент();
         ДокXML.Загрузить(ИмяФайлаДанных);
         Выборка = ДокXML.ВыбратьУзел("ФайлОбмена");
         
        //Поехали, цикл по подчиненным объектам
         Для а= 1 по Выборка.КоличествоПодчиненных() Цикл
           НомерДокумента=Выборка.ПолучитьПодчиненныйПоНомеру(а);
           Номер=НомерДокумента.ВыбратьУзел("Номер").Значение;
           ДатаДок=НомерДокумента.ВыбратьУзел("Дата").Значение;
           Сообщить("Документ № "+Номер);
       
            //Создаем новый документ
            Докум= СоздатьОбъект("Документ.РасходнаяНакладная");
            Докум.Новый();

            Для б = 1 по НомерДокумента.КоличествоПодчиненных() Цикл  
               СтрокаТек=НомерДокумента.ПолучитьПодчиненныйПоНомеру(б);
               
                   
                   Для в = 1 по  СтрокаТек.КоличествоПодчиненных() Цикл
                        Номен= СтрокаТек.ПолучитьПодчиненныйПоНомеру(в);
                      Номенклатура = Номен.ВыбратьУзел("Номенклатура").Значение;
                        Количество = Номен.ВыбратьУзел("Количество").Значение;
                      Цена = Номен.ВыбратьУзел("Цена").Значение;
                      Сообщить("Номенклатура: "+Номенклатура+"/  Кол-во: "+Количество+"/  Цена: "+Цена);
           
                 
       //                      
           СпрНомен=СоздатьОбъект("Справочник.Номенклатура");
           СпрНомен.НайтиПоНаименованию(Номен.ВыбратьУзел("Номенклатура").Значение,0);
      Если СпрНомен.НайтиПоНаименованию(Номен.ВыбратьУзел("Номенклатура").Значение,0)=1 Тогда
           НайденнаяНоменклатура=СпрНомен.ТекущийЭлемент();
      КонецЕсли;
           СпрСклад=СоздатьОбъект("Справочник.МестаХранения");
           СпрСклад.НайтиПоНаименованию("Управление торговлей",0);
      Если СпрСклад.НайтиПоНаименованию("Управление торговлей",0)=1 Тогда
          НайденныйСклад=СпрСклад.ТекущийЭлемент();
      КонецЕсли;
           СпрНалог=СоздатьОбъект("Справочник.ВариантыРасчетаНалогов");
           СпрНалог.НайтиПоКоду(7);
      Если СпрНалог.НайтиПоКоду(7)=1 Тогда
           НайденныйНалог=СпрНалог.ТекущийЭлемент();
      КонецЕсли;
   
           Докум.Контрагент=Контрагент;
           Докум.Договор=Договор;
           Докум.МестоХранения=НайденныйСклад;
           Докум.ВидОтгрузки = 11;
           Докум.ВариантРасчетаНалогов=НайденныйНалог;
           Докум.Комментарий="Документ № "+НомерДокумента.ВыбратьУзел("Номер").Значение;
           Докум.ДатаДок=НомерДокумента.ВыбратьУзел("Дата").Значение;
             Докум.НоваяСтрока();
           Докум.Товар= НайденнаяНоменклатура;
           Докум.Количество=Номен.ВыбратьУзел("Количество").Значение;
           Докум.Цена=Номен.ВыбратьУзел("Цена").Значение;
           Докум.Сумма=Докум.Цена* Докум.Количество;
           Докум.НДС = глПоказательДокумента(Докум, "НДС");
           Докум.Всего = глПоказательДокумента(Докум, "СуммаСНалогами");
             Докум.Записать();
         
          КонецЦикла;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Причем если в третьем цикле поставить не с 1 а со втрого все отрабатывает, но выкидываем первый элемент..

Вот XML файл :

<?xml version="1.0" encoding="windows-1251" standalone="no"?>
<ФайлОбмена>
<Документ>
<Номер>БПЮА0000257</Номер>
<Дата>21.07.2011 10:36:51</Дата>
<ТЧ>
<СтрокаТЧ>
<Номенклатура>XXXXXXXXXXX</Номенклатура>
<Количество>9</Количество>
<Цена>1 648,38</Цена>
</СтрокаТЧ>
</ТЧ>
</Документ>
<Документ>
<Номер>БПЮА0000258</Номер>
<Дата>25.07.2011 10:32:46</Дата>
<ТЧ>
<СтрокаТЧ>
<Номенклатура>XXXXXXXXXXX</Номенклатура>
<Количество>3</Количество>
<Цена>4 316</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>13</Количество>
<Цена>947,03</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>19</Количество>
<Цена>1 054,93</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>5</Количество>
<Цена>766,92</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>661,6</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>3</Количество>
<Цена>742,85</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>18</Количество>
<Цена>863,2</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>1 859,2</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>4</Количество>
<Цена>78,85</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>10</Количество>
<Цена>162,68</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>12</Количество>
<Цена>235,72</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>30</Количество>
<Цена>207,5</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>3</Количество>
<Цена>497,17</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>839,96</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>7</Количество>
<Цена>1 178,6</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>4</Количество>
<Цена>1 261,6</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>2</Количество>
<Цена>1 392,74</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>3</Количество>
<Цена>2 049,6</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>4</Количество>
<Цена>115,75</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>2</Количество>
<Цена>262</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>10</Количество>
<Цена>289,67</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>4</Количество>
<Цена>2 138,08</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>3</Количество>
<Цена>2 415,3</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>4 271,18</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>4</Количество>
<Цена>1 516,41</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>5 299,55</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>1 738,02</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>4 755,9</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>5</Количество>
<Цена>1 648,38</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>1</Количество>
<Цена>5 419,9</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>7</Количество>
<Цена>1 926,43</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>5</Количество>
<Цена>120,35</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>18</Количество>
<Цена>63,08</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>72</Количество>
<Цена>134,46</Цена>
</СтрокаТЧ>
<СтрокаТЧ>
<Номенклатура>YYYYYYYYYYYY</Номенклатура>
<Количество>3</Количество>
<Цена>7 069,11</Цена>
</СтрокаТЧ>
</ТЧ>
</Документ>
</ФайлОбмена>
1 andrewks
 
29.07.11
08:47
ТЧ=НомерДокумента.ВыбратьУзел("ТЧ")
Для б = 1 по ТЧ.КоличествоПодчиненных() Цикл
2 Sashgun
 
29.07.11
08:59
(1) Получается для  3 цикла тож нужно писать
СтрокаТЧ=СтрокаТек.ВыбратьУзел("СтрокаТЧ")
Для в = 1 по СтрокаТЧ.КоличествоПодчиненных() Цикл ???
3 Sashgun
 
29.07.11
09:16
Все разобрался. 3 ий цикл и не нужен. спасибо тебе
4 Sashgun
 
29.07.11
09:30
Удаляем 3 цикл а во втором деламе такеи изменения
ТЧ=НомерДокумента.ВыбратьУзел("ТЧ");
            Для б = 1 по ТЧ.КоличествоПодчиненных() Цикл  
              Номен=ТЧ.ПолучитьПодчиненныйПоНомеру(б);
               Номенклатура = Номен.ВыбратьУзел("Номенклатура").Значение;
                Количество = Номен.ВыбратьУзел("Количество").Значение;
                   Цена = Номен.ВыбратьУзел("Цена").Значение;
                  Сообщить("Номенклатура: "+Номенклатура+"/  Кол-во: "+Количество+"/  Цена: "+Цена);