Иерархическая нумерация в отчете СКД с помощью макета поля

Публикация № 1084494

Программирование - Практика программирования

СКД Иерархия группировка настройки отчет нумерация

22
Представляю Вашему вниманию вариант решения задачи нумерации строк иерархического отчета на СКД.

СКД - очень мощная и удобная штука. Но зачастую, для решения некоторых вопросов, приходится изобретать что-то немыслимое. Вот и в данной публикации один из примеров.

Задача состоит в том, чтобы в иерархическом отчете на СКД, вывести нумерацию строк по иерархии. Например:

Проект 1.

      Проект 1.1.

            Проект 1.1.1.

            Проект 1.1.2.

... и т.д.

 

Мне не хотелось заниматься нумерацией программно, как представлено в некоторых публикациях на инфостарте, а сделать это средствами СКД.

Так вот решение данного вопроса лежит в макете , точнее в оформлении поля, где можно в выражении писать что угодно.

Текст выражения выглядит так:

Выбор 
  когда Уровень()=0 Тогда 
      НомерПоПорядкуВГруппировке() // получаем номер группировка текущего уровня
  когда Уровень()=1 Тогда 
      Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()","Строка1")) // получаем номер группировки первого уровня
         + "." + Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()")) // получаем номер группировка текущего уровня
  когда Уровень()=2 Тогда 
      Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()","Строка1")) // получаем номер группировки первого уровня
         + "." + Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()","Строка2")) // получаем номер группировки второго уровня
            + "." + Строка(ВычислитьВыражение("НомерПоПорядкуВГруппировке()")) // получаем номер группировки текущего уровня
Конец 

 

В примере представлен вариант для 3-х уровней отчета, собственно если отчет имеет больше уровней, то нужно будет дописать выражение по аналогии. В итоге получаем отчет вот такого вида.

Отчет разрабатывался на платформе 8.3.13.1644.

22

Скачать файлы

Наименование Файл Версия Размер
Иерархическая нумерация в отчете СКД с помощью макета поля:
.erf 6,35Kb
27.06.19
1
.erf 6,35Kb 1 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. ids79 3081 28.06.19 17:05 Сейчас в теме
Подумал, что у Вас действительно по иерархии каким-то образом нумерация выводится.
Даже скачал файл...
Ну, увы, не иерархическая группировка у Вас, а обычная структура группировок из нескольких уровней.
А я уж подумал - не знаю чего-то.
Кстати, макет использовать не обязательно, можно то же выражение написать в вычисляемом поле или в ресурсах. Результат будет тем же.
2. Isonic 138 01.07.19 07:56 Сейчас в теме
(1) Добавил еще 1 скриншот с настройками, чтобы не было дезинформации.

(1)
Кстати, макет использовать не обязательно, можно то же выражение написать в вычисляемом поле или в ресурсах. Результат будет тем же
Да, можно, но всегда корректно отрабатывает.
4. lmnlmn 50 01.07.19 17:23 Сейчас в теме
(1) Есть у меня статья в черновиках для произвольной иерахии, но там программный вывод.
3. lmnlmn 50 01.07.19 17:22 Сейчас в теме
Чудненько, но для "настоящей" иерархии бы проверить. Да и количество уровней вложенности заранее неизвестно может быть.
5. Isonic 138 02.07.19 07:58 Сейчас в теме
(3) надо попробовать что-то придумать, сложность только в определении наименования предыдущей группировки.
6. lmnlmn 50 02.07.19 13:05 Сейчас в теме
(5) Если просто группировка, то это не столь большая проблема. А вот если группировка иерархическая, то в настройках группировка одна, а при выводе отчета вложенных группировок от ноля до бесконечности.
7. Isonic 138 02.07.19 14:07 Сейчас в теме
(6) ага, я про это и говорю.
8. lmnlmn 50 02.07.19 15:14 Сейчас в теме
(7) Было бы здорово найти решение без программирования. Когда задача появилась я до последнего пытался пытался это сделать. Но, в итоге, решил через программный вывод. Через "уровни" не смог спастись в иерархических группировках.
9. Isonic 138 02.07.19 15:30 Сейчас в теме
(8) Да, можно использовать твой метод. Только сделать процедуру универсальную, чтобы из СКД вызвать ее.
10. lmnlmn 50 02.07.19 17:19 Сейчас в теме
(9) Не понял идею - как через СКД вызывать процедуру?
11. Isonic 138 03.07.19 08:03 Сейчас в теме
(10) Использовать общую процедуру для вычисления чего-либо (пример во вложении)
Прикрепленные файлы:
12. lmnlmn 50 03.07.19 09:00 Сейчас в теме
(11) Для вычисления надо "контекст" запоминать либо передавать. Слишком много костылей придется придумать.
13. dtripleh 04.07.19 08:41 Сейчас в теме
Добавлением системных полей "НомерПоПорядку", "НомерПоПорядкуВГруппировке" в настройках СКД это прекрасно решается, разве нет?
14. Isonic 138 04.07.19 09:03 Сейчас в теме
Оставьте свое сообщение