Имя: Пароль:
1C
1С v8
Программная работа из 1С в Excel, как определить количество группировок
0 slasher
 
03.05.17
17:32
Доброго всем дня! Ситуевина такая! Отчет на СКД с 2 группировками, сохраняется в Эксель. Потом средствами 1С проставляются формулы в этом отчете, уже в экселевском. Столкнулся с проблемой, как средствами 1с, из группировки 1-го уровня, определить количество группировок 2-го уровня? Кто-нибудь может подсказать?
1 Heckfy
 
03.05.17
17:45
"Я" справа от темы нажмите пожалуйста!!!
2 Tatitutu
 
03.05.17
18:08
(0) кидай код в студию (как к файлу цепляешся)
3 Heckfy
 
03.05.17
18:10
(2) "цепляешся" - черезь "шься" пишется!
4 Tatitutu
 
03.05.17
18:12
(3) Спасибо, мил человек !
На 8 языках разговариваю, а вот писать так и не научился без ошибок.
5 slasher
 
03.05.17
18:22
(2)

Процедура ДействияФормыСохранитьВExcel(Кнопка)
    Файл = "D:\temp\proba.xlsx";
    ЭлементыФормы.Результат.Записать(Файл, ТипФайлаТабличногоДокумента.XLSX);
    
    Попытка
        Эксель = Новый COMОбъект("Excel.Application");
    Исключение
        Возврат;
    КонецПопытки;
    Эксель.DisplayAlerts = 0;
    Эксель.Visible = 0;  
    
    // Открытие файла
    Попытка
        Эксель.Application.Workbooks.Open(Файл);
    Исключение
        Возврат;
    КонецПопытки;
    
    // Перебор строк узнать максимальную группировку
    КоличествоСтрок = Эксель.Cells(1,1).SpecialCells(11).Row;
    МаксимальныйУровеньГруппировки = 0;
    Для Сч = 1 По КоличествоСтрок Цикл
        ТекущийУровеньГруппировки = Эксель.Rows(Сч).OutlineLevel;
        Если ТекущийУровеньГруппировки > МаксимальныйУровеньГруппировки Тогда
            МаксимальныйУровеньГруппировки = ТекущийУровеньГруппировки;
        КонецЕсли;    
    КонецЦикла;
    //Сообщить(МаксимальныйУровеньГруппировки);
    //Сообщить(КоличествоСтрок);
    
    // Перебор строк проставить формулы
    Для Сч = 1 По КоличествоСтрок Цикл
        ТекущийУровеньГруппировки = Эксель.Rows(Сч).OutlineLevel;
        Если ТекущийУровеньГруппировки = МаксимальныйУровеньГруппировки-1 Тогда//группировка первая
            Эксель.Cells(Сч, 11).FormulaR1C1 = "=СУММ(R[1]C:R[5]C)"; //Сумма прихода
            
            
        КонецЕсли;
        Если ТекущийУровеньГруппировки = МаксимальныйУровеньГруппировки Тогда//группировка вторая
            Эксель.Cells(Сч, 11).FormulaR1C1 = "=RC[-3] * RC[-1]"; //Сумма прихода
            
            
        КонецЕсли;
    КонецЦикла;
    Эксель.Save();
    // Закрытие файла
    Эксель.ActiveWorkbook.Close();
    Эксель.Quit();
        
    ЗапуститьПриложение(Файл);
КонецПроцедуры
6 slasher
 
03.05.17
18:24
(2)
вот где //группировка первая
мне непонятно, как узнать сколько ниже идёт деталей (вторых группировок)
7 Ц_У
 
03.05.17
18:31
8 slasher
 
03.05.17
18:33
(7), круто, но это не в СКД надо делать, а в экселе
9 MaxS
 
03.05.17
20:17
Зачем Excel использовать? 1С давно умеет без него обходится. Тогда вопрос сведётся к тому, как в табличном документе определить количество уровней.
10 slasher
 
03.05.17
20:28
(9) Excel нужен чтобы "поиграть" с ценами, посмотреть в нем как изменится выручка. Как в 1С-ном отчете СКД это сделаю?
11 slasher
 
04.05.17
10:16
а есть ещё варианты?