Как убрать пустые строки перед отчетом в СКД (Системе компоновки данных)?

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

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

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

Выясняем причину: почему появляются пустые строки?

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

  1. Вывод заголовка отчета. Если система настроена на вывод заголовка, но сам текст заголовка не задан в параметрах вывода, на экране появится пустая строка.
  2. Вывод параметров. СКД по умолчанию пытается вывести список примененных параметров (например, период, организация) в шапке отчета. Если параметры заполнены программно или скрыты от пользователя, может сформироваться пустая "шапка" таблицы параметров.
  3. Вывод отборов. Аналогично параметрам, система резервирует строки под вывод информации о наложенных фильтрах и отборах.

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

Решение проблемы через «Другие настройки» СКД

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

  1. Откройте вашу схему компоновки данных (обычно это файл ОсновнаяСхемаКомпоновкиДанных.dcs).
  2. Перейдите на вкладку «Настройки» в нижней части конструктора СКД.
  3. В окне структуры отчета выберите самый верхний корневой элемент (он называется «Отчет»). Это критически важно: настройки нужно вносить именно на уровне всего отчета, а не на уровне отдельных группировок!
  4. В нижней части экрана перейдите на вкладку «Другие настройки».
  5. Найдите следующие три параметра и измените их значения:
    • Выводить заголовок — установите значение «Не выводить» (или «Авто», если вы гарантируете, что заголовок будет заполнен).
    • Выводить параметры — переведите в значение «Не выводить».
    • Выводить отбор — переведите в значение «Не выводить».

После сохранения этих настроек СКД перестанет резервировать строки под служебные данные, и таблица отчета начнется сразу с шапки данных.

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

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

Рассмотрим пример кода, который можно поместить в модуль объекта отчета перед компоновкой результата (например, в процедуре ПриКомпоновкеРезультата):


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Получаем настройки компоновщика
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Находим параметры вывода на уровне всего отчета
    ПараметрыВывода = Настройки.ПараметрыВывода;
    
    // Отключаем вывод заголовка
    ПараметрЗаголовок = ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("TitleOutput"));
    Если ПараметрЗаголовок <> Неопределено Тогда
        ПараметрЗаголовок.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
        ПараметрЗаголовок.Использование = Истина;
    КонецЕсли;
    
    // Отключаем вывод параметров
    ПараметрПараметры = ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ParametersOutput"));
    Если ПараметрПараметры <> Неопределено Тогда
        ПараметрПараметры.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
        ПараметрПараметры.Использование = Истина;
    КонецЕсли;
    
    // Отключаем вывод отборов
    ПараметрОтборы = ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("FilterOutput"));
    Если ПараметрОтборы <> Неопределено Тогда
        ПараметрОтборы.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
        ПараметрОтборы.Использование = Истина;
    КонецЕсли;
    
    // Выполняем стандартную компоновку с новыми настройками
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

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

Другие неочевидные причины появления пустых строк в СКД

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

1. Наличие пустой группировки «Детальные записи»

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

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

2. Группировка по Регистратору в таблицах остатков

При построении отчетов по остаткам и оборотам с периодичностью "Регистратор" часто возникает пустая строка в начале таблицы. Это происходит из-за того, что для начального остатка поле Регистратор не определено (имеет значение NULL). Система группирует этот начальный остаток в отдельную строку с пустым именем регистратора.

Решение: Перейдите на вкладку «Наборы данных», найдите поле Регистратор и в его свойствах (в колонке «Роли») установите флажок «Игнорировать NULL».

3. Ошибки в макетах оформления

Если вы используете индивидуальные макеты (вкладка «Макеты» в схеме СКД), обратите внимание на границы именованных областей в шаблоне табличного документа. Разработчики нередко случайно захватывают лишнюю пустую строку снизу или сверху при объединении ячеек или задании границ области макета.

Решение: Откройте макет и убедитесь, что именованная область (например, макет группировки или макет заголовка) включает в себя только значащие ячейки и не имеет скрытых пустых строк с фиксированной высотой.

← На главную