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

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

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

Разбор проблемы: почему стандартный отбор не работает

Для начала проанализируем ситуацию. Представим, что у нас есть данные по физическому лицу, где начислено 345 рублей и удержано 345 рублей. В базе данных это две разные записи. Если мы установим отбор на уровне отчета Сумма <> 0, система проверит каждую запись по отдельности. Так как и 345, и -345 не равны нулю, обе записи попадут в отчет. Затем СКД сгруппирует их и выведет итог: 0. Мы увидим строку с именем сотрудника и пустую колонку суммы (или ноль).

Выясним причину: отбор на уровне отчета работает как условие ГДЕ в языке запросов SQL. Он отсекает данные на этапе выборки. Нам же нужно отсечь данные уже после того, как группировка сформирована и итоги подсчитаны — это аналог условия ИМЕЮЩИЕ (HAVING) в SQL. Рассмотрим, как реализовать это в настройках СКД.

Способ 1: Установка отбора на уровне группировки

Это самый эффективный и правильный метод решения задачи. Посмотрим на алгоритм действий в пользовательском режиме (через «Изменить вариант»):

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

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

Способ 2: Учет точности вычислений (числа с плавающей точкой)

Иногда мы сталкиваемся с ситуацией, когда визуально в отчете стоит ноль, но отбор Не равно 0 не срабатывает. Проанализируем ситуацию: это может происходить из-за особенностей хранения дробных чисел. В базе данных итог может быть равен 0.00000000001, что для системы не является нулем.

В этом случае рекомендуется использовать более гибкие условия в отборе группировки. Рассмотрим варианты:

Способ 3: Визуальное скрытие через условное оформление

Рассмотрим ситуацию, когда нам крайне важно сохранить итоговую сумму по всему отчету (Общий итог) неизменной, но при этом мы не хотим видеть строки с нулевыми значениями. Важно понимать: отбор в группировке исключает данные из общего итога. Если вам нужно просто скрыть строку, но оставить её вклад в общую сумму (хотя для нулей это не актуально, это полезно для других задач), используем «Условное оформление».

  1. В окне «Изменить вариант» перейдем на вкладку «Условное оформление».
  2. Добавим новый элемент оформления.
  3. В поле «Оформление» установим параметр «Минимальная высота» равным 0.1 или «Текст» — пустая строка.
  4. В поле «Условие» укажем Сумма Равно 0.
  5. В поле «Оформляемые поля» выберем те поля, которые нужно скрыть, или всю группировку.

Однако помните, что этот метод является «косметическим». Строка физически останется в табличном документе, просто она будет практически невидимой.

Влияние на производительность и общие итоги

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


// Логика работы отбора группировки (упрощенно)
Для Каждой СтрокаГруппировки Из РезультатКомпоновки Цикл
    Если СтрокаГруппировки.ИтогРесурса <> 0 Тогда
        ВывестиВОтчет(СтрокаГруппировки);
    КонецЕсли;
КонецЦикла;

Если в вашем отчете несколько ресурсов, например СуммаОплаты и КоличествоДней, и вы ставите отбор только по Сумме, то строки, где сумма ноль, но количество дней заполнено, тоже исчезнут. Чтобы этого избежать, всегда проверяйте совокупность условий. Вы можете сгруппировать условия отбора, используя логическое «И» или «ИЛИ» прямо в окне настроек группировки.

Использование системных полей

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

Резюме по шагам для пользователя

Подведем итог нашему исследованию. Чтобы быстро убрать пустые строки с нулевыми итогами, выполните следующие действия:

  1. Зайдите в настройки отчета (Настройки — Расширенный).
  2. Найдите нужную группировку в списке (не весь отчет!).
  3. На вкладке Отбор этой группировки добавьте условие по вашему ресурсу (например, Сумма (Остаток) Не равно 0).
  4. Завершите редактирование и сформируйте отчет.

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

← На главную