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