СКД. Как программно узнать число группировок? #639416


#0 by napagokc
1С8.2.13 Хочу зафиксировать шапку в отчете, но используя стандартную кнопку "Сформировать". Обрабатываю событие: Дело еще усложняется тем, что в одной группировке может быть сразу несколько реквизитов. Скрин шапки прилагаю, чтобы было понятно о чем говорю [url= [img]
#1 by napagokc
вот верная ссылка скрина:
#2 by Cube
Баян.
#3 by acsent
так сама же фиксируется
#4 by napagokc
С 8.2.14 сама фиксируется, а у меня 8.2.13
#5 by napagokc
Я тебе прямые ссылки могу дать, но там нет ответа на мой вопрос. Вчитайся сначала, а потом говори баян или нет
#6 by abjurer
) Писано для принудительной фиксации строки итогов, но этот кусок (ИтогиРасположеныВверху) убери и будет щастье.
#7 by napagokc
Еще раз: "..используя стандартную кнопку "Сформировать"." Ваш вариант подходит при замене стандартной кнопки своей собственной. Этот вариант я знаю, но как раз не хочу его использовать. Вопрос заключается в том, как добиться желаемого по-минимому прилагая собственных усилий. Думаю, это всем полезно будет
#8 by napagokc
В принципе, если всегда точно знаешь количество группировок, то вполне подходит приведенный мной выше код: вне зависимости от числа отбора он будет верно фиксировать шапку
#9 by napagokc
Да, чтобы не постили подобные ссылки дальше, сразу приведу прямую ссылку с разбором этой проблемы на 1ССКД:
#10 by Cube
Я тебе тоже могу прямых ссылок дать, но лень одолевает меня. Вон уже пожевал тебе... А на счет стандартной кнопки - так положи код из в ПриКомпоновкеРезультата если сам не догадался...
#11 by ДемонМаксвелла
[1c] Процедура ПолучитьВсеПоляГруппировок(МассивПолейГруппировок) Для Каждого Стр Из КомпоновщикНастроек.Настройки.Структура Цикл         Для Каждого ПолеГруппировки Из Стр.ПоляГруппировки.Элементы Цикл Если ПолеГруппировки.Использование=Истина Тогда                МассивПолейГруппировок.Добавить(Строка(ПолеГруппировки.Поле)); КонецЕсли; КонецЦикла;                ДобавитьВсеПодчиненныеПоляВМассив(Стр,МассивПолейГруппировок);             КонецЦикла;         КонецПроцедуры Процедура ДобавитьВсеПодчиненныеПоляВМассив(Строка,МассивПолейГруппировок)     КоллекцияСтрок = Строка.Структура;         Для Каждого Стр Из КоллекцияСтрок Цикл Если Стр.Использование=Истина Тогда             Для Каждого ПолеГруппировки Из Стр.ПоляГруппировки.Элементы Цикл Если ПолеГруппировки.Использование=Истина Тогда                    МассивПолейГруппировок.Добавить(Строка(ПолеГруппировки.Поле)); КонецЕсли; КонецЦикла;                        ДобавитьВсеПодчиненныеПоляВМассив(Стр,МассивПолейГруппировок);     КонецЕсли; КонецЦикла;         КонецПроцедуры [1c]
#12 by ДемонМаксвелла
так можно обойти все группировки, если немного допилить, то можно вычислить глубину
#13 by napagokc
Понимаешь в чем дело... Количество группировок всяко где-то хранится в настройках СКД. И если это так, то мне достаточно одной строчки кода, которая, к слову, будет не только более читабельной, но и быстрее работать. Вот этого я и хочу добиться. А писать цикл не хочу. Знаю, что можно им, но не хочу. Все должно быть просто, надо только узнать где это все хранится...
#14 by napagokc
А точно нет какого-нибудь свойства, типа "Количество"? Печалька ;(
#15 by Cube
Если б искал в поиске, то понял бы, что нет такого волшебного хранилища высоты шапки... Нету...
#16 by Cube
+ Поэтому я и сказал, что баян.
#17 by napagokc
Я про группировку спрашивал, а не про шаку. Ога?
#18 by ДемонМаксвелла
там структура, элементами которой могут быть структуры. так что надо обходить, и проверять использование.
#19 by acsent
КомпоновщикНастроек.Настройки.Структура - дерево группировок
#20 by napagokc
фигово. Ясно, спасибо.
#21 by napagokc
Так вот, граждане! Вы не верили, а я допилил: Получилось довольно компактненько =)
#22 by Cube
Да-да, а я в доступных полях папок насоздаю, вот весело будет...
#23 by Cube
+ Точнее в выбранных полях.
#24 by napagokc
Код рабочий, можешь проверить по отладчику. Все верно считает. Доступные поля я не смотрю, если что
#25 by napagokc
+ Может быть добавлена отдельная статическая группировка, например, для вывода названия отчета и периода. Но она всегда имеет фиксированную глубину. Я ее не учитываю в функции, но можно и с ней допилить, так-то. Одну строчку добавить.
#26 by ДемонМаксвелла
но это не глубину он у тебя считает, а общее число группировок. хотя видимо тебе это и нужно.
#27 by ДемонМаксвелла
и ты флаг "Использование" не учитываешь. Если его снять у одной из верхних группировок, то твоя функция покажет больше группировок, чем выведется в отчете.
#28 by napagokc
Да, ты прав, этот флаг я не учел. Исправил. Заодно добавил учет отдельной статической группировки в одну строчку. В цикле использую "Прервать" потому, что если отключить одну группировку, то все группировки, входящие в нее, тоже отключаются.
#29 by ДемонМаксвелла
тогда не Прервать, а Продолжить.
#30 by Cube
Ну, во первых, на платформе 8.2.16.368 не фурычит (разбираться не стал). А во вторых, то, про что я говорил в демонстрирую на примере: Как думаешь, твой код справится? Вряд ли...
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С