Имя: Пароль:
1C
1С v8
Как определить иерархию в Экселе?
0 Domovoi
 
24.04.15
09:47
Есть эксель файл в одной колонке указана номенклатура и группы. Сбоку от поля с ячейками есть группировки: на крестик нажал - группа раскрылась. Как считать с Эксельфайла эти группировки? Или как понять какая строка является группой и в какую строку включается?
1 Stim
 
24.04.15
09:49
посмотри здесь, я решал подобную проблему:
http://forum330.com/forum/1696/0
2 Stim
 
24.04.15
09:51
+ код.
В нем я загружаю с иерархического файла эксель данные в номенклатуру - с произвольным количеством иерархии(ограничено 10 уровнями вложенности)

ИмяФайла = "C:\вет\1.xls";
Док = ПолучитьCOMОбъект(ИмяФайла);    
счСтрок = 2;       
Наим = Док.Sheets(1).Cells(счСтрок,1).Value;

ТаблицаРодителей = Новый ТаблицаЗначений;
ТаблицаРодителей.Колонки.Добавить("Ссылка");

//проинициализируем таблицу
Текиндекс = 0;
пока Текиндекс <> 10 цикл
    Строка = ТаблицаРодителей.Вставить(Текиндекс);
    Строка.Ссылка = Справочники.Номенклатура.ПустаяСсылка();
    Текиндекс = Текиндекс + 1;
КонецЦикла;

ЭтоЭлемент = ЛОЖЬ;

Пока ЗначениеЗаполнено(Наим) Цикл
    
    Наименование    = Док.Sheets(1).Cells(счСтрок,1).Value;
    Код = Док.Sheets(1).Cells(счСтрок,2).Value;
    //..пр реквизиты
    ЕдиницаДляОтчетов= Док.Sheets(1).Cells(счСтрок,8).Value;
    
    
    Уровень = Док.Sheets(1).Cells(счСтрок,1).IndentLevel ;
    
    Уровень = Уровень + 2;//потому что начинается уровень с 0, а нулевой у нас это корень
    
    ЭтоЭлемент = ЗначениеЗаполнено(ЕдиницаДляОтчетов) ;    
    
    // все уровни - четные, группы идут по убывающей в разрезе иерархии
    //поэтому алгоритм такой:
    //если это группа - создаем, родителя получаем из таблицы по индекс-2
    //записываем или перезаписываем группу в таблицу со своим индексом
    //если элемент - создаем, родителя получаем из таблицы по индекс-2
    
    
    Родитель = ТаблицаРодителей.Получить(уровень-2).ссылка;
    
    Если  ЭтоЭлемент Тогда
        //создаем элемент
        
    Иначе
        //создаем группу  
        
        Строка = ТаблицаРодителей.Получить(Уровень);
        Строка.Ссылка = Группа.Ссылка;        
    КОнецЕсли;
    
    счСтрок =          счСтрок +1;            
    Наим    = Док.Sheets(1).Cells(счСтрок,1).Value;
КОнецЦикла;
3 Domovoi
 
24.04.15
09:51
Спасибо
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший