При построении отчетов в Системе Компоновки Данных (СКД) разработчики часто сталкиваются с задачей отображения данных из разных группировок в рамках одного и того же поля. Стандартный механизм СКД по умолчанию разделяет показатели разных уровней по отдельным колонкам, что не всегда удобно, если необходимо визуально сравнить, например, оклад по позиции штатного расписания и фактический оклад сотрудника.
Рассмотрим детально, как с помощью вычисляемых полей и механизмов языка выражений СКД реализовать вывод данных в одну колонку.
Этот способ является наиболее эффективным с точки зрения производительности, так как он не требует перестройки структуры запроса и изменения наборов данных. Суть метода заключается в создании дополнительного поля, значение которого будет динамически вычисляться в зависимости от того, в какой группировке отчета мы находимся.
ОкладДляСравнения.Уровень(). Важно помнить, что нумерация уровней в СКД начинается с 0.Реализуем следующее выражение:
ВЫБОР
КОГДА Уровень() = 0 ТОГДА [ОкладПоПозиции]
ИНАЧЕ [ОкладСотрудника]
КОНЕЦ
При такой настройке отчет будет проверять текущую глубину иерархии. Если мы находимся на уровне позиции (верхний уровень), СКД выведет оклад из штатного расписания. Если мы находимся на уровне сотрудника, будет выведен индивидуальный оклад. Таким образом, в отчете формируется единая вертикальная колонка с данными разного происхождения.
Важное замечание: При использовании агрегатных функций или в сложных отчетах, где данные могут дублироваться, оберните выражение в функцию Максимум() или Сумма(), чтобы гарантировать корректное отображение значений:
Максимум(ВЫБОР
КОГДА Уровень() = 0 ТОГДА [ОкладПоПозиции]
ИНАЧЕ [ОкладСотрудника]
КОНЕЦ)
Если задача требует более сложной логики, чем простое сравнение, можно пойти по пути предварительной обработки данных в запросе. Этот метод полезен, когда нужно избежать «пустых» ячеек и обеспечить строгую типизацию данных.
Наборе данных - запрос используем оператор ОБЪЕДИНИТЬ ВСЕ.NULL.После этого с помощью Условного оформления можно скрыть пустые значения или настроить цвета фона для разных уровней группировки, чтобы сделать отчет более наглядным для пользователя.
Иногда проблему можно решить упрощением структуры самого отчета. Если вам нужно сравнить два показателя, подумайте над созданием одной иерархической группировки Позиция + Сотрудник. Это позволит вывести обе колонки рядом, не прибегая к сложным вычислениям.
Если же визуальная компактность критична, то описанный выше метод с Уровень() — это лучший выбор. Помните, что для проверки того, какой уровень возвращает ваша группировка, можно временно вывести в отчет поле СистемныеПоля.Уровень. Это поможет не ошибиться при написании формулы в ВЫБОР КОГДА.
Применяя данные подходы, вы сможете создавать гибкие и наглядные отчеты, которые не будут перегружены лишними колонками и позволят пользователю быстро выявить «выпавших» из процесса повышения окладов сотрудников.