СКД — очень мощная и удобная штука. Но зачастую, для решения некоторых вопросов, приходится изобретать что-то немыслимое. Вот и в данной публикации один из примеров.
Задача состоит в том, чтобы в иерархическом отчете на СКД, вывести нумерацию строк по иерархии. Например:
Проект 1.
Проект 1.1.
Проект 1.1.1.
Проект 1.1.2.
… и т.д.
Мне не хотелось заниматься нумерацией программно, как представлено в некоторых публикациях на инфостарте, а сделать это средствами СКД.
Так вот решение данного вопроса лежит в макете , точнее в оформлении поля, где можно в выражении писать что угодно.
Текст выражения выглядит так:
Выбор
когда Уровень()=0 Тогда
НомерПоПорядкуВГруппировке() // получаем номер группировка текущего уровня
когда Уровень()=1 Тогда
Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()","Строка1")) // получаем номер группировки первого уровня
+ "." + Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()")) // получаем номер группировка текущего уровня
когда Уровень()=2 Тогда
Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()","Строка1")) // получаем номер группировки первого уровня
+ "." + Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()","Строка2")) // получаем номер группировки второго уровня
+ "." + Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()")) // получаем номер группировки текущего уровня
Конец
В примере представлен вариант для 3-х уровней отчета, собственно если отчет имеет больше уровней, то нужно будет дописать выражение по аналогии. В итоге получаем отчет вот такого вида.
Отчет разрабатывался на платформе 8.3.13.1644.
Подумал, что у Вас действительно по иерархии каким-то образом нумерация выводится.
Даже скачал файл…
Ну, увы, не иерархическая группировка у Вас, а обычная структура группировок из нескольких уровней.
А я уж подумал — не знаю чего-то.
Кстати, макет использовать не обязательно, можно то же выражение написать в вычисляемом поле или в ресурсах. Результат будет тем же.
(1) Добавил еще 1 скриншот с настройками, чтобы не было дезинформации.
(1)
Да, можно, но всегда корректно отрабатывает.
Чудненько, но для «настоящей» иерархии бы проверить. Да и количество уровней вложенности заранее неизвестно может быть.
(1) Есть у меня статья в черновиках для произвольной иерахии, но там программный вывод.
(3) надо попробовать что-то придумать, сложность только в определении наименования предыдущей группировки.
(5) Если просто группировка, то это не столь большая проблема. А вот если группировка иерархическая, то в настройках группировка одна, а при выводе отчета вложенных группировок от ноля до бесконечности.
(6) ага, я про это и говорю.
(7) Было бы здорово найти решение без программирования. Когда задача появилась я до последнего пытался пытался это сделать. Но, в итоге, решил через программный вывод. Через «уровни» не смог спастись в иерархических группировках.
(8) Да, можно использовать твой метод. Только сделать процедуру универсальную, чтобы из СКД вызвать ее.
(9) Не понял идею — как через СКД вызывать процедуру?
(10) Использовать общую процедуру для вычисления чего-либо (пример во вложении)
(11) Для вычисления надо «контекст» запоминать либо передавать. Слишком много костылей придется придумать.
Добавлением системных полей «НомерПоПорядку», «НомерПоПорядкуВГруппировке» в настройках СКД это прекрасно решается, разве нет?
(13) нет