При разработке отчетов на системе компоновки данных (СКД) часто возникает задача построения кросс-таблицы. Типичный пример: в строках должно быть оборудование, в колонках — даты, а на пересечении — статус или какой-то комментарий. Однако начинающие разработчики часто сталкиваются с ситуацией, когда запрос возвращает данные, но в самой таблице ячейки остаются пустыми или данные выводятся некорректно. Разберем пошагово, как решить эту проблему и правильно настроить визуализацию данных.
Первое, что нам необходимо сделать, — это правильно настроить структуру отчета на закладке Настройки. В СКД существует несколько типов элементов структуры: "Группировка", "Таблица" и "Диаграмма". Для решения нашей задачи нам нужна именно Таблица.
Проанализируем порядок действий:
Оборудование.Дата (или период).Многие разработчики на этом останавливаются, добавляя поле Статус в "Выбранные поля" группировки, и обнаруживают, что колонки создаются, строки создаются, но на пересечении пусто. Выясним причину этого поведения.
В системе компоновки данных ячейки, находящиеся на пересечении строк и колонок в таблице, могут отображать только значения Ресурсов. Если поле (даже текстовое, такое как "Статус") не добавлено на закладку "Ресурсы", СКД не "знает", как его агрегировать и вывести в область данных таблицы.
Рассмотрим, как правильно настроить текстовый ресурс:
Статус (или любое другое поле, которое должно быть в ячейках) в список ресурсов.Сумма(), мы используем Максимум() или Минимум().Пример выражения для текстового ресурса:
Максимум(Статус)
Если на одну дату и одно оборудование может приходиться несколько статусов, и мы хотим вывести их все через запятую, воспользуемся специальной функцией СКД:
СоединитьСтроки(Статус, ", ")
После того как поле стало ресурсом, оно автоматически появится в выбранных полях отчета и начнет отображаться в ячейках на пересечении строк и колонок.
Когда мы превращаем поле в ресурс, СКД по умолчанию начинает считать итоги по горизонтали (для строк) и по вертикали (для колонок). В случае с текстовыми данными или статусами эти итоги часто выглядят бессмысленно и только загромождают отчет. Рассмотрим способы их отключения.
Для управления общими итогами во всем отчете:
Нет.Если нам нужно убрать итоги только для конкретной группировки (например, чтобы не было колонки "Итого" в конце таблицы):
Нет.Если в вашем отчете несколько показателей (например, "Статус" и "Исполнитель"), они могут выводиться неудобно. Посмотрим, как управлять их расположением. В "Других настройках" есть важный параметр Расположение ресурсов:
Проанализируем ситуацию с пустыми значениями. Чтобы отчет не выглядел "дырявым", если данных на определенную дату нет, можно использовать условное оформление. Например, если ресурс не заполнен, выводить текст "---" или окрашивать ячейку в серый цвет. Это делается на закладке Условное оформление с условием Статус Не заполнено.
Часто требуется, чтобы в колонках отображались все дни периода, даже если по ним нет движений в базе данных. В настройках группировки по полю Дата выполним следующие действия:
День.Это заставит СКД принудительно "дорисовать" недостающие колонки в таблице, создавая полноценный календарный график.
Таким образом, комбинируя механизм ресурсов, структуру "Таблица" и тонкие настройки итогов, мы можем создавать сложные и наглядные отчеты, которые точно соответствуют требованиям пользователей.