Дано:
В бухгалтерских отчётах (например - "Анализ субконто") есть "галочка" - "по субсчетам".
Если её ("по субсчетам") установить, то отчёт на СКД выводит всю иерархию от класса счета до конкретного счета остатка (оборота).
Если субсчетов много - то повторяется много "одинаковых" строк.
ВОПРОС: Можно ли выводить только конкретный субсчет остатка/оборота (без всей вышестоящей иерархии)?
ПОДВОПРОСЫ:
1) Можно ли этого добиться настройками у пользователя?
2) Как этого можно добиться "минимальным" вмешательством в код отчета
На приведенном рисунке: красным - что я хочу "удалить", зеленым - что оставить
З.Ы. В коде отчета "модуль менеджера" единственное упоминание реквизита (параметра СКД) "ПоСубсчетам"
Процедура ПередКомпоновкойМакета(ПараметрыОтчета, Схема, КомпоновщикНастроек) Экспорт
//.............
Если Не ПараметрыОтчета.ПоСубсчетам Тогда
ЗначениеОтбора = БухгалтерскиеОтчетыКлиентСервер.ДобавитьОтбор(Структура.Отбор, "SystemFields.LevelInGroup", КоличествоУровнейСчет, ВидСравненияКомпоновкиДанных.МеньшеИлиРавно);
ЗначениеОтбора.Применение = ТипПримененияОтбораКомпоновкиДанных.Иерархия;
БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметрВывода(Структура, "ВыводитьОтбор", ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
КонецЕсли;
P.S.S. У счетов есть реквизит "ЗапретитьИспользоватьВПроводках" в отчете должны показываться только счета со значением "ЛОЖЬ"
Можно выкрутиться и на пользовательских настройках, через условное оформление.
Добавляете элемент условного оформления, в оформлении указываете максимальную высоту = 1. Оформляемые поля: счет и показатель. Использовать: в иерархической группировке.
Иерархия счетов после этого скрывается. Группировка по счетам остается (см скриншот Результат)
Конечно не идеальный вариант, но максимально дешевый и для его получения совсем не нужен программист.
(6) В общем-то (5) прав, да вы и сами уже даже нашли куда надо было подписаться. Достаточно изменить тип соответствующей группировки. У меня получилось сделать в расширении после ПередКомпоновкойМакета:
&После("ПередКомпоновкойМакета")
Процедура Расш1_ПередКомпоновкойМакета(ПараметрыОтчета, Схема, КомпоновщикНастроек)
Поле = Новый ПолеКомпоновкиДанных("Счет");
ПолеГруппировкиСчет = НайтиПолеГруппировкиРекурсивно(КомпоновщикНастроек.Настройки.Структура, Поле);
Если ПолеГруппировкиСчет <> Неопределено Тогда
ПолеГруппировкиСчет.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
КонецЕсли;
КонецПроцедуры
Функция НайтиПолеГруппировкиРекурсивно(Структура, Поле)
Для Каждого ЭлементСтруктуры Из Структура Цикл
Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") Тогда
Для Каждого ПолеГруппировки Из ЭлементСтруктуры.ПоляГруппировки.Элементы Цикл
Если ТипЗнч(ПолеГруппировки) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда
Если ПолеГруппировки.Поле = Поле Тогда
Возврат ПолеГруппировки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НайденноеПоле = НайтиПолеГруппировкиРекурсивно(ЭлементСтруктуры.Структура, Поле);
Если НайденноеПоле <> Неопределено Тогда
Возврат НайденноеПоле;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции