Как убрать пустые строки в отчете 1С

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

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

Метод 1. Настройка отбора на уровне группировок СКД

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

Разберем по шагам, как это сделать в настройках СКД:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. Выберем конкретную группировку, в которой появляются пустые строки.
  3. В нижней части окна перейдем на закладку Отбор.
  4. Добавим условие, например: ПолеГруппировки Заполнено или Сумма Оборот Не равно 0.

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

Метод 2. Использование условий в тексте запроса

Проанализируем структуру нашего запроса. Одной из наиболее частых причин появления пустых значений является использование ЛЕВОГО СОЕДИНЕНИЯ. Если в правой таблице нет соответствующих данных, система подставляет NULL. Если такие строки не несут полезной информации, рассмотрим возможность замены ЛЕВОЕ СОЕДИНЕНИЕ на ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

Если же соединение должно остаться левым, добавим условие в секцию ГДЕ. Посмотрим на пример кода, который помогает корректно обработать поля, содержащие NULL или НЕОПРЕДЕЛЕНО:


ВЫБОР
    КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
        ТОГДА NULL
    ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор
КОНЕЦ КАК Регистратор,
ХозрасчетныйОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда

После такого преобразования в настройках СКД достаточно будет установить отбор: Регистратор Не равно NULL. Это гарантирует, что строки без документов-оснований не попадут в финальную форму.

Метод 3. Флаг Игнорировать значения NULL

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

Метод 4. Визуальное скрытие через Условное оформление

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

  1. Зайдем в Условное оформление отчета или конкретной группировки.
  2. Добавим новое условие (например, Количество Равно 0).
  3. В параметрах оформления найдем пункты Минимальная высота и Максимальная высота.
  4. Установим оба значения в 0.1 или 0.

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

Метод 5. Программная очистка Табличного документа

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

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


// Пример программной очистки пустот
Для Счетчик = ТабДок.ВысотаТаблицы По 1 Шаг -1 Цикл
    // Проверяем значение в ключевой колонке (например, во второй)
    ОбластьПроверки = ТабДок.Область(Счетчик, 2);
    
    Если ПустаяСтрока(ОбластьПроверки.Текст) Тогда
        // Удаляем строку целиком
        ТабДок.УдалитьОбласть(ТабДок.Область(Счетчик, , Счетчик, ), ТипСмещенияТабличногоДокумента.ПоВертикали);
    КонецЕсли;
КонецЦикла;

Этот метод универсален и позволяет удалять строки даже по сложным визуальным критериям, которые трудно описать в запросе или настройках СКД.

Метод 6. Исправление итогов в базе данных

В редких случаях причиной пустых строк может быть логическое повреждение таблиц итогов в самой СУБД. Это случается при изменении типов измерений в регистрах или после некорректного обновления конфигурации. Если запрос к виртуальным таблицам (например, ОстаткиИОбороты) возвращает пустые записи, которые нельзя отсечь обычным NULL, проанализируем состояние базы:

Метод 7. Работа с иерархией

Если пустые строки появляются при использовании иерархических группировок, воспользуемся функцией ВычислитьВыражение. Мы можем создать вычисляемое поле, которое будет проверять наличие данных в подчиненных записях. Если сумма по иерархии равна нулю и детальных записей нет, мы можем скрыть родительскую ветку, установив соответствующий отбор на уровне группировки-родителя.

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

← На главную