К статье
Практический материал

Отчеты и Аналитика · 10 мин

Как удалить пустые строки в отчёте на СКД в 1С

Как убрать пустые строки в отчёте на СКД 1С: настройка отбора, группировок, параметров вывода и запроса. Пошаговые инструкции, типичные ошибки и FAQ.

Пустые строки в отчёте на системе компоновки данных (СКД) появляются по разным причинам: записи с незаполненными измерениями, группировки с нулевыми ресурсами, строки с NULL-значениями из левого соединения таблиц. Универсальной кнопки «удалить пустые строки» в СКД нет — результат зависит от того, что именно вы считаете пустой строкой и на каком этапе она возникает.

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

Ниже разобраны основные сценарии: от скрытия пустых значений в настройках пользователя до фильтрации на уровне запроса и программной обработки. Материал подходит для типовых конфигураций на управляемых формах и для самописных отчётов.

Определите, какие строки считаются пустыми

Прежде чем что-то удалять, важно понять природу пустых строк. В СКД встречаются три типовые ситуации: строка есть, но ключевое поле не заполнено (пустая ссылка, пустая строка); группировка существует, но все ресурсы равны нулю; строка возникла из-за левого соединения и содержит NULL в части полей.

Каждая ситуация решается по-разному. Пустую ссылку проще всего отсечь отбором, нулевые ресурсы — условием ИМЕЮЩИЕ в запросе или отбором по ресурсу, а NULL-значения — заменой соединения или функцией ЕСТЬNULL. Если применить не тот метод, можно либо не добиться результата, либо потерять нужные данные.

Пустое поле в группировкеНезаполненное измерение

Проверьте, есть ли в данных записи с пустой ссылкой или пустой строкой в группируемом поле

Строка с нулевыми суммамиРесурсы равны нулю

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

Пустые колонки справаNULL из соединения

Проверьте тип соединения таблиц в запросе набора данных

Уберите строки отбором в настройках отчёта

Самый простой способ, не требующий изменения схемы компоновки, — добавить отбор в варианте отчёта. Откройте настройки отчёта (кнопка «Настройки» или «Ещё — Изменить вариант»), перейдите на закладку «Отбор» и добавьте условие по полю, которое не должно быть пустым.

Для ссылочных полей используйте вид сравнения «Не равно» и оставьте значение пустым — СКД интерпретирует это как пустую ссылку. Для строковых полей подойдёт условие «Не равно» с пустой строкой либо «Заполнено», если такой вид сравнения доступен в вашей версии платформы. Для числовых ресурсов добавьте условие «Больше 0» или «Не равно 0».

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

Порядок действий для отбора
  1. 1
    Откройте отчёт и перейдите в расширенные настройки варианта
  2. 2
    На закладке «Отбор» добавьте условие по проблемному полю
  3. 3
    Установите вид сравнения «Не равно» с пустым значением или «Больше 0» для сумм
  4. 4
    Если фильтруются группы, а не детали — задайте отбор внутри нужной группировки
  5. 5
    Сформируйте отчёт и проверьте, что итоги не изменились неожиданно

Настройте вывод группировок без данных

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

Проверьте параметры вывода группировки: выделите группировку в структуре отчёта, откройте её настройки и посмотрите параметры «Тип макета», «Расположение итогов» и наличие полей без ресурсов. Если группа выводится только ради иерархии, а данные пустые, часто помогает перенос отбора на уровень этой группировки с условием по ресурсу.

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

Отфильтруйте данные в запросе набора данных

Если отчёт строится на собственной схеме компоновки, надёжнее всего удалить лишние строки на уровне запроса. Откройте схему компоновки данных (в конфигураторе или через «Ещё — Изменить схему компоновки» в некоторых типовых отчётах), перейдите на закладку «Наборы данных» и отредактируйте текст запроса.

Для исключения записей с пустыми полями добавьте условие в секцию ГДЕ. Для исключения групп с нулевыми итогами используйте секцию ИМЕЮЩИЕ после группировки — она проверяет агрегатные функции и отсекает группы, не прошедшие условие. Это особенно актуально для отчётов по продажам, где не нужны клиенты с нулевым оборотом за период.

bsl
ВЫБРАТЬ
	Продажи.Контрагент КАК Контрагент,
	СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
ГДЕ
	НЕ Продажи.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
	Продажи.Контрагент
ИМЕЮЩИЕ
	СУММА(Продажи.СуммаОборот) <> 0

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

Обработайте NULL-значения при соединении таблиц

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

Два рабочих приёма: заменить левое соединение на внутреннее, если строки без пары не нужны вовсе, или обернуть поля в функцию ЕСТЬNULL(Поле, ЗначениеПоУмолчанию), чтобы вместо NULL подставлялось осмысленное значение — например, 0 для сумм или строка «Не указано» для текстовых полей. Второй вариант сохраняет строки, но убирает визуальную «пустоту».

Учтите, что отбор по полю с NULL через «Не равно» в СКД может не сработать так, как ожидается: сравнение с NULL в логике запросов даёт неопределённый результат. Поэтому для таких полей надёжнее условие в запросе «Поле ЕСТЬ NULL» или предварительная обёртка в ЕСТЬNULL.

Программная фильтрация и проверка результата

В редких случаях, когда логика сложнее возможностей запроса и отборов, используют программную компоновку: формирование отчёта через объект КомпоновщикМакета и обработку в модуле объекта отчёта. Там можно перехватить процессор вывода и пропустить элементы результата по собственному условию. Это трудоёмкий путь, оправданный только при нестандартных требованиях, например когда «пустота» строки определяется комбинацией нескольких полей и вычисляемых значений.

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

Контрольные точки

Как проверить результат

Итоги отчёта
Норма

Итоги соответствуют видимым строкам и ожиданиям

Тревожный признак

Итоги больше суммы видимых строк — фильтр скрыл данные после расчёта

Расшифровка
Норма

Двойной щелчок открывает согласованные детальные данные

Тревожный признак

Расшифровка показывает записи, которых нет в отчёте

Пустые группировки
Норма

Нет заголовков групп без содержимого

Тревожный признак

Остались группы с пустым телом — проверьте настройки группировки

Типичные ошибки и ограничения

Наиболее частая ошибка — попытка убрать пустые строки общим отбором, когда фильтровать нужно сгруппированные данные. Общий отбор работает до группировки, поэтому группы с нулевым итогом остаются. Вторая распространённая ошибка — сравнение с пустой строкой для полей ссылочного типа: пустая ссылка и пустая строка — разные значения, и условие не сработает.

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

Типичные ошибки
01
Отбор задан на верхнем уровне, а фильтровать нужно группы — нулевые группы остаются в отчёте
02
Сравнение ссылочного поля с пустой строкой — условие никогда не выполняется
03
Фильтрация NULL через «Не равно» — NULL не сравнивается обычными операторами, строки не отсекаются
04
Правка запроса типового отчёта без копии схемы — потеря изменений при обновлении конфигурации
Итог

Что важно запомнить

Сначала определите природу пустой строки: незаполненное поле, нулевой ресурс или NULL из соединения. Простые случаи решаются отбором в настройках, группы с нулевыми итогами — отбором внутри группировки или ИМЕЮЩИЕ в запросе, NULL — через ЕСТЬNULL или внутреннее соединение. После правок сверяйте итоги и расшифровку.

Частые вопросы

Почему отбор «Не равно 0» не убирает строки с нулевой суммой?

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

Как убрать строку с пустым значением в шапке группировки?

Добавьте отбор по полю группировки с условием «Не равно» и пустым значением соответствующего типа. Если поле ссылочное, убедитесь, что сравниваете именно с пустой ссылкой, а не с пустой строкой.

Можно ли удалить пустые строки без изменения схемы компоновки?

Да, большинство сценариев закрывается настройками варианта отчёта: отборами по полям и ресурсам, отборами внутри группировок. Изменение схемы требуется только для фильтрации в запросе или обработки NULL на уровне соединений.

Почему после отбора изменились итоги отчёта?

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

Что делать, если пустые строки появляются только у части пользователей?

Проверьте ограничение доступа на уровне записей (RLS): пользователь может не видеть часть данных, и строки выглядят пустыми. Также сравните сохранённые варианты настроек отчёта у разных пользователей.