Как убрать пустые строки в СКД и вывести вычисляемые поля на уровень итогов?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с неприятным поведением системы: при выводе сложных вычисляемых показателей (например, «Сумма продаж», «ЛФЛ %» или различных аналитических коэффициентов) под строкой итогов или на уровне группировок образуются лишние пустые строки. Визуально это портит отчет и путает пользователей.

В этой статье мы подробно разберем природу возникновения этой проблемы, проанализируем структуру компоновки данных и рассмотрим несколько надежных способов ее решения — от правильной настройки ресурсов до создания индивидуальных макетов группировок.

Выясняем причину: откуда берутся пустые строки?

Прежде чем приступать к исправлению, давайте разберем логику работы СКД. Система компоновки данных строго разграничивает понятия детальных записей и ресурсов (итогов). Если вы добавили вычисляемое поле в список выбранных полей отчета, но не определили его как ресурс, СКД будет пытаться вывести это поле для каждой детальной записи.

Когда вычисляемое поле по своей сути является агрегированным показателем (то есть рассчитывается только для групп или отчета в целом), на уровне детальных записей у него просто нет данных. В результате система честно выводит строку детальной записи, но оставляет ячейку вычисляемого поля пустой. Таким образом, под красивой строкой общих итогов появляется шлейф из пустых или полупустых строк, привязанных к детальным записям или нижестоящим группировкам.

Способ 1. Превращение вычисляемых полей в Ресурсы (рекомендуемый метод)

Самый простой, быстрый и методологически верный способ убрать пустые строки — это объявить ваши вычисляемые поля ресурсами СКД. Когда поле становится ресурсом, СКД перестает выводить его в секциях детальных записей по умолчанию, если это не настроено явно, и рассчитывает его значение строго по формулам агрегации на уровнях группировок и итогов.

Рассмотрим по шагам, как это сделать:

  1. Откройте схему компоновки данных и перейдите на вкладку «Настройки», а затем на вкладку «Вычисляемые поля». Убедитесь, что ваше поле (например, ЛФЛ_Процент) корректно описано.
  2. Перейдите на вкладку «Ресурсы».
  3. Добавьте ваше вычисляемое поле в список ресурсов.
  4. В колонке «Выражение» задайте формулу расчета. Обратите внимание: для вычисления процентов или сложных коэффициентов нельзя использовать простое суммирование. Формула должна агрегировать исходные данные.

Посмотрим на пример правильного расчета процента «ЛФЛ» (Like-for-Like) в ресурсах. Нельзя просто написать Сумма(ЛФЛ_Процент), так как сложение процентов по строкам даст неверный математический результат. Мы должны разделить агрегированную сумму продаж текущего периода на агрегированную сумму продаж прошлого периода:


Выбор 
    Когда Сумма(ПродажиПрошлогоГода) = 0 
        Тогда 0 
    Иначе (Сумма(ПродажиТекущегоГода) / Сумма(ПродажиПрошлогоГода) - 1) * 100 
Конец

После того как вы определили поле как ресурс, СКД автоматически поднимет его расчет на уровень группировок и общих итогов, избавив отчет от пустых строк детальных записей.

Способ 2. Настройка расчета по группировкам

Бывают ситуации, когда вычисляемый показатель имеет смысл рассчитывать только для общего итога по всему отчету, а на уровнях промежуточных группировок (например, по контрагентам или номенклатурным группам) он не нужен и выводит пустые или некорректные данные.

В СКД предусмотрен удобный механизм ограничения расчета ресурсов. Разберем, как его настроить:

  1. На вкладке «Ресурсы» найдите ваше вычисляемое поле.
  2. Обратите внимание на колонку «Рассчитывать по...». По умолчанию там пусто, что означает расчет по всем доступным группировкам и общему итогу.
  3. Кликните по этой колонке и выберите из списка только те группировки, для которых расчет действительно необходим. Если вам нужен этот показатель исключительно в самом конце отчета, выберите только «Общий итог».

Этот простой шаг гарантирует, что на промежуточных уровнях группировок система не будет пытаться рассчитать показатель и выводить пустые ячейки.

Способ 3. Создание индивидуального макета группировки

Если стандартными настройками ресурсов и структуры не удается добиться желаемого визуального отображения (например, вам требуется вывести показатели в определенные ячейки, изменить структуру заголовков или жестко задать макет строки итогов), на помощь приходят макеты СКД. Этот способ более трудоемкий, но он дает стопроцентный контроль над выводом.

Многие разработчики опасаются использовать макеты, думая, что им придется перерисовывать весь отчет вручную. Это не так. Мы можем создать макет только для одной конкретной группировки или только для строки итогов.

Рассмотрим по шагам процесс создания и привязки макета:

  1. Перейдите во вкладку «Настройки» схемы компоновки данных.
  2. Выберите группировку, для которой хотите переопределить вывод (например, это могут быть детальные записи или итоговая строка группировки по датам).
  3. В свойствах этой группировки (в правой части экрана или внизу) найдите свойство «Имя» и задайте ей уникальное имя, например, МакетДетальныеЗаписи.
  4. Перейдите на вкладку «Макеты» в верхней части конструктора СКД.
  5. Нажмите кнопку «Добавить макет группировки». В появившемся окне укажите имя группировки, которое мы задали на шаге 3 (МакетДетальныеЗаписи), и тип макета (например, Макет заголовка группировки или Макет группировки).
  6. Нарисуйте в табличном документе макета структуру ячеек ровно так, как вы хотите видеть ее в готовом отчете. Например, объедините нужные ячейки, задайте границы и цвет фона.
  7. Чтобы вывести в макет динамические данные (значения вычисляемых полей), выделите ячейку, в свойствах укажите тип заполнения «Параметр» и впишите имя вашего поля (например, СуммаПродаж).
  8. В таблице параметров макета (в нижней части вкладки «Макеты») сопоставьте созданный параметр с выражением схемы компоновки данных.

Важный нюанс: Часто возникает вопрос, как указывать область макета, если количество колонок в отчете динамически меняется (например, зависит от выбранного пользователем периода). СКД решает эту проблему автоматически. Вы задаете шаблон одной строки или одной колонки, а СКД при генерации отчета масштабирует и размножает эту область согласно настройкам колонок таблицы, подставляя параметры по именам.

Способ 4. Очистка структуры выбранных полей и устранение лишней вложенности

Иногда пустые строки появляются из-за избыточной вложенности групп в настройках выбранных полей. Проанализируем структуру выбранных полей отчета. Если у вас создана сложная иерархия папок и групп в окне «Выбранные поля» (например, папка в папке ради красивого заголовка), СКД может генерировать под них дополнительные служебные строки-контейнеры.

Для устранения этой проблемы попробуйте сделать следующее:

  1. Перейдите в настройки отчета на вкладку «Выбранные поля».
  2. Разверните всю структуру. Если вы видите тройную или более глубокую вложенность групп (папок), постарайтесь упростить ее.
  3. Вынесите вычисляемые поля на самый верхний уровень выбранных полей отчета, либо поместите их непосредственно в настройки конкретной группировки, а не всей таблицы в целом.

Методика пошаговой отладки структуры отчета

Если пустые строки все равно продолжают выводиться, а структура отчета слишком запутанная, рекомендуем применить классический метод пошаговой отладки компоновки данных. Этот аналитический подход позволяет быстро локализовать источник проблемы:

Шаг 1. Полностью отключите в настройках отчета (снятием флажков видимости) все группировки и выбранные поля, кроме одного ключевого поля и одной базовой группировки.

Шаг 2. Сформируйте отчет. Убедитесь, что пустые строки отсутствуют, а структура выглядит плоской и аккуратной.

Шаг 3. Поочередно добавляйте по одному полю вне групп. На каждом шаге переформировывайте отчет и следите, после добавления какого именно поля или ресурса начинает ломаться верстка и появляются пустые строки.

Шаг 4. Как только проблемное поле найдено, проанализируйте его свойства: задано ли оно как ресурс, рассчитывается ли оно по группировкам и не участвует ли оно в детальных записях без агрегатных функций.

Использование этого системного алгоритма убережет вас от хаотичных правок настроек и позволит быстро привести структуру СКД к идеальному виду.

← На главную