Имя: Пароль:
1C
1С v8
Группировка строк для отчета на СКД
0 NikePopov
 
26.06.15
13:49
Добрый день!

Столкнулся со следующей проблемой:
У меня есть отчет на СКД, при его выводе не требуется показывать все группировки отчета, то есть требуется попросту свернуть до уровня 1.
В настройках СКД я никаких методов на этот счет не нашел. Форму менять не хочу(используется стандартная для всей конфигурации). То есть все варианты, которые у меня есть для манипулирования - процедура "ПриКомпоновкеРезультата".

Для того, чтобы реализовать сворачивание я придумал следующий код:

Перем СтатусФормированияОтчета;

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Если СтатусФормированияОтчета = Неопределено Тогда
    
        СтандартнаяОбработка = Ложь;
        СтатусФормированияОтчета = "Исполнение";
        СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
        ДокументРезультат.ПоказатьУровеньГруппировокСтрок(1);
    
    КонецЕсли;
    
    
    
КонецПроцедуры

Он работает, но очень мне не нравится. Никто не знает, каким образом возможно выполнить действие "ПослеКомпановкиРезультата" без извращений?
1 fisher
 
26.06.15
13:52
А чем не нравится?
ЗЫ. Другого способа не знаю.
2 Mitriy
 
26.06.15
13:52
а просто настроить вывод не комильфо?
3 fisher
 
26.06.15
13:53
Только не понял, что это за пляски со СтатусФормированияОтчета.
4 fisher
 
26.06.15
13:55
Хотя я знаю, чем не нравится. Убивается фоновое формирование.
5 fisher
 
26.06.15
13:57
(2) Комильфо. Подсказывай, чего и где настраивать, чтобы работало.
6 NikePopov
 
26.06.15
14:19
(1) Не нравится своей неочевидностью. Другой человек не поймет, что я делаю, если отчет будет чуть посложнее.
(2) Идеальный вариант! Как?
7 fisher
 
26.06.15
14:54
(6) Насчет читабельности можешь не волноваться.
Для СКД это стандарт де-факто. Если нужна пост-обработка, то она делается в ПриКомпоновкеРезультата после программной компоновки.
8 NikePopov
 
26.06.15
15:08
(7) У меня уже есть конфигурация с кучей непонятного программного кода, куда очень боязно лазать. Сам написал - сам боюсь))

Я бы очень согласился на вариант:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

РаботаСОтчетами.СкомпоноватьРезультатОтчета(ЭтотОбъект, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
ДокументРезультат.ПоказатьУровеньГруппировокСтрок(1);

КонецПроцедуры

Но не знаю как написать содержимое процедуры "СкомпоноватьРезультатОтчета" в общем модуле аналогично стандартной обработке.
9 Sereja
 
26.06.15
15:44
Процедура СвернутьВсеГруппировки(ПолеТД)
    КоличествоГруппировок = ПолеТД.КоличествоУровнейГруппировокСтрок();
    Пока КоличествоГруппировок>0 Цикл
        ПолеТД.ПоказатьУровеньГруппировокСтрок(КоличествоГруппировок);
        КоличествоГруппировок = КоличествоГруппировок-1;
    КонецЦикла;    
    ПолеТД.ПоказатьУровеньГруппировокСтрок(КоличествоГруппировок);
КонецПроцедуры
10 NikePopov
 
26.06.15
15:48
(9) Это к чему ты? Формы у меня нет. В процедуре "ПриКомпоновкеРезультата" еще нет табличного документа.А метод "ПоказатьУровеньГруппировокСтрок" работет так же, но в одной строке.
11 Sereja
 
26.06.15
15:53
(10) Не так же он работает. Он сворачивает только первую группировку, а все остальные остаются развернутыми. Т.е. если 6 группировок, то когда ты развернешь 1 уровень, то все остальные будут развернуты
12 Sereja
 
26.06.15
15:54
+(10) а так все будет свернуто по очереди. с 6 по 1
13 NikePopov
 
26.06.15
16:00
(12) Согласен. При моих 2-х группировках разницы не видно)) Но вопрос не в этом.
14 NikePopov
 
26.06.15
16:07
Нашел такой код, но теперь вопрос с инициализацией пользовательских настроек:

    //Из схемы возьмем настройки по умолчанию
    Настройки = КомпоновщикНастроек.Настройки;
    
    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
15 NikePopov
 
26.06.15
16:21
Все! Ответ найден!

В модуле объекта отчета:
[code]
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    
    ОтчетыСКД.СкомпоноватьРезультат(ЭтотОбъект, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
    
    ДокументРезультат.ПоказатьУровеньГруппировокСтрок(1);
    
КонецПроцедуры
[/code]

В общем модуле "ОтчетыСКД":

[code]
Процедура СкомпоноватьРезультат(ОтчетОбъект, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) Экспорт

    СтандартнаяОбработка = Ложь;
    
    //Из схемы возьмем настройки по умолчанию
    Настройки = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
    
    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

КонецПроцедуры

[/code]
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший