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