Имя: Пароль:
1C
1C 7.7
v7: XML - Выход за границы массива
0 Patrio_
O_Muerte
 
23.07.12
10:26
Доброго времени суток.
Есть вот такой обработчик xml файла.

   НомАв = Данные5.ВыбратьУзлы("Nomenclature");
   Для счНомАв = 0 по НомАв.КоличествоУзлов-1 Цикл
       
       ТекНом = НомАв.ПолучитьУзел(счНомАв);
       Сообщить(ТекНом.КоличествоПодчиненных()); //32
       Для СчУз = 0 По ТекНом.КоличествоПодчиненных()-1 Цикл
           Сообщить(СчУз); //0
           ПодчУзел = ТекНом.ПолучитьПодчиненныйПоНомеру(СчУз) ; //ошибка
           
       КонецЦикла ;
   КонецЦикла;


На той строке где написано слово ошибка, 1с-ка валится с ошибкой "Выход за границы массива". Где я допустил ошибку, если видно что в массиве подчиненных 32 элемента а валится на первой итерации (СчУз=0).

Вот кусок файла:


- <Nomenclature>
 <MATERIAL>582</MATERIAL>
 <ARTIKUL>72105</ARTIKUL>
 <NAME_MATERIAL>Мельница Dr.E ALIMENTARI 4 перца 35 гр</NAME_MATERIAL>
 <SHORT_NAME_MATERIAL>Мельница Dr. E ALIMENTARI 4 перца 35 гр</SHORT_NAME_MATERIAL>
 <KPK_NAME_MATERIAL>4 перца 35 гр</KPK_NAME_MATERIAL>
 <name_manufacturer>Мистраль</name_manufacturer>
 <Code_manufacturer>128</Code_manufacturer>
1 Надсмотрщик
 
23.07.12
10:36
Для счНомАв = 1 по НомАв.КоличествоУзлов Цикл


Не пробовал?
2 Надсмотрщик
 
23.07.12
10:39
+(1) "Мельница Dr. E ALIMENTARI 4 перца 35 гр" - можешь на мыло скинуть
3 Patrio_
O_Muerte
 
23.07.12
10:50
(1)Пробовал, но там все узлы отличаются по именам, а метод ВыбратьУзлы требует конкретного имени узла. Как то не кошерно будет каждый раз менять имя узла :)
4 Надсмотрщик
 
23.07.12
11:09
Лови "рыбку" Сейчас пишу себе обмены


//          //Заполним табличную часть
   Товары = СпРеквизитов.Получить("Товары");
   ТоварыXML = ДобавитьПодчиненныйЭлемент(ЭлСчет1С, "Товары");
   Для СЦ = 1 По Товары.КоличествоПодчиненных() Цикл
       Данные = Товары.ПолучитьПодчиненныйПоНомеру(СЦ);
       СпРеквизитов = СоздатьОбъект("СписокЗначений");
       Для СЦк = 1 По Данные.КоличествоПодчиненных() Цикл
           ДанныеТ = Данные.ПолучитьПодчиненныйПоНомеру(СЦк);
           СпРеквизитов.ДобавитьЗначение(ДанныеТ, ДанныеТ.Наименование);
       КонецЦикла;
       Если СпРеквизитов.РазмерСписка() = 0 Тогда
           Продолжить;
       КонецЕсли;
       СпрТовары = СоздатьОбъект("Справочник.Номенклатура");
       СпрТовары.НайтиПоКоду(СпРеквизитов.Получить("Ид").Значение);
       
       Счет.НоваяСтрока();
       Счет.Товар = СпрТовары.ТекущийЭлемент();
       Счет.Количество = Число(СпРеквизитов.Получить("Количество").Значение);
       Счет.Цена = Число(СпРеквизитов.Получить("ЦенаЗаЕдиницу").Значение);
       Счет.Сумма = Число(СпРеквизитов.Получить("Сумма").Значение);
       Счет.НДС = глПоказательДокумента(Счет, "НДС");
       Счет.НП = глПоказательДокумента(Счет, "НП");
       Счет.Всего = глПоказательДокумента(Счет, "СуммаСНалогами");
       
       Если ВыгрузитьТоварВСчет(ТоварыXML, Счет, Счет.Товар, Счет.Комментарий) = 0 Тогда Возврат 0 КонецЕсли;
   КонецЦикла;
5 Patrio_
O_Muerte
 
23.07.12
11:15
ВыбратьУзлы("./*");
... спасла отца русской демократии.
6 Patrio_
O_Muerte
 
23.07.12
11:15
7 Patrio_
O_Muerte
 
23.07.12
11:16
Спасибо за помощь.
Закон Брукера: Даже маленькая практика стоит большой теории.