Имя: Пароль:
1C
1С v8
СКД: группировка колонок в таблице
0 moonq4
 
10.06.16
19:22
Помогите, пожалуйста, разобраться с настройкой отчета.
Есть поля:
1. Склад (например, склад №1 и склад №2)
2. Месяц (например, январь, февраль, март)
2. ресурс А
3. ресурс В
4. вычисляемое поле Процент=А/В*100

У меня без проблем получается таблица, в которой в строка идут склады, а в столбцах идут месяцы, на пересечении получаем значения ресурсов.
Но вот совсем непонятно как сделать вариант, когда в столбцах идет 2 уровня группировки: на первом уровне ресурсы (А, В и Процент), а уровнем ниже группировка по месяцам (думаю на картинке все будет понятно)?

https://dropmefiles.com/kgnnS
1 Chameleon1980
 
10.06.16
19:45
может похимичить в ресурсах рассчитывать по. Ну там еще кое-что может понадобиться
2 Chameleon1980
 
10.06.16
19:46
смотря какой вообще запрос. складов динамическое кол-во?
3 echo77
 
12.06.16
10:45
(0) Без постобработки табличного документа - пока никак.
Суть метода такая:
Делаем настройку Кросс-таблицу:
  Группировки строк:
      Склад
  Группировки колонок:
      Месяц    - выбранные поля, Ресурс А
      Месяц    - выбранные поля, Ресурс B
      Месяц    - выбранные поля, Прцоент A/B

после того как отчет построился, делаем постобработку табличного документа - меняем местами строку заголовка ресурса A и названия месяцев, затем ячейки с заголовками ресурса A - объединяем, например следующим кодом:

Процедура ПоменятьОбластиМестами(ТабличныйДокумент, ИскомыйТекст)
    Если 1=0 Тогда ТабличныйДокумент = Новый ТабличныйДокумент КонецЕсли;// dummy
    
    НижняяСтрокаШапки = ТабличныйДокумент.ФиксацияСверху;
    
    // Определяем где у нас область с надписью ИскомыйТекст
    НачалоОбласти=0;
    КонецОбласти=0;
    Для н=2 По ТабличныйДокумент.ШиринаТаблицы Цикл
        АдресЯчейки = "R"+НижняяСтрокаШапки+"C"+н;
        // Определяем начало области
        Если ТабличныйДокумент.Область(АдресЯчейки).Текст=ИскомыйТекст
        И     НачалоОбласти=0 Тогда
                        НачалоОбласти = н;
        КонецЕсли;
        // Определяем окончание области
        Если ТабличныйДокумент.Область(АдресЯчейки).Текст<>ИскомыйТекст
        И     НачалоОбласти<>0
        И     КонецОбласти =0 Тогда
                        КонецОбласти = н-1;
        КонецЕсли;
        // Если дошли до конца и не определили окончание обласи, то вот он конец
        Если н=ТабличныйДокумент.ШиринаТаблицы
        И     КонецОбласти =0 Тогда
                        КонецОбласти = н;
        КонецЕсли;
    КонецЦикла;
    
    // Проверяем, корректно ли определи начало/конец области
    Если НачалоОбласти=0 ИЛИ КонецОбласти=0 Тогда
        Возврат
    КонецЕсли;
    
    АдресИсходнойОбласти    ="R"+(НижняяСтрокаШапки-1)+"C"+НачалоОбласти+":"+"R"+(НижняяСтрокаШапки-1)+"C"+КонецОбласти;
    АдресВставляемойОбласти    ="R"+(НижняяСтрокаШапки)  +"C"+НачалоОбласти+":"+"R"+(НижняяСтрокаШапки)  +"C"+КонецОбласти;
    ИсхОбласть = ТабличныйДокумент.Область(АдресИсходнойОбласти);
    ВстОбласть = ТабличныйДокумент.Область(АдресВставляемойОбласти);
    ТабличныйДокумент.ВставитьОбласть(ИсхОбласть, ВстОбласть);
    
    // Затем верхнюю строку с валютами объединяем и замещаем на текст
    ОбластьНадписи = ТабличныйДокумент.Область(АдресИсходнойОбласти);
    ОбластьНадписи.Объединить();
    ОбластьНадписи.Текст = ИскомыйТекст;
    ОбластьНадписи.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
    ОбластьНадписи.ПараметрРасшифровки=0;
КонецПроцедуры
4 Chameleon1980
 
12.06.16
14:37
еще как как
5 moonq4
 
14.06.16
11:34
(2) да, список складов может быть не постоянным.

(3) ой )))
6 echo77
 
14.06.16
17:56
збс
2 + 2 = 3.9999999999999999999999999999999...