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