Как убрать пустую строку «Неопределено» в поле Регистратор в отчетах СКД?

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

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

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

Почему появляется значение «Неопределено»?

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

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

Способ 1. Изменение метода дополнения периодов

Одним из самых эффективных способов является управление параметрами виртуальной таблицы непосредственно в запросе или в настройках набора данных. Рассмотрим, как это влияет на результат.

  1. Откроем конструктор запроса в схеме компоновки данных.
  2. Перейдем к параметрам виртуальной таблицы ОстаткиИОбороты.
  3. Найдем параметр Метод дополнения. По умолчанию часто используется значение ДвиженияИГраницы. Именно оно заставляет систему генерировать строки для начальной и конечной даты периода.
  4. Установим значение Движения. В этом случае система будет выводить только те регистраторы, по которым реально прошли обороты в заданном интервале.

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


ВЫБРАТЬ
    ОстаткиИОбороты.Субконто1 КАК Номенклатура,
    ОстаткиИОбороты.Субконто2 КАК Склады,
    ОстаткиИОбороты.СуммаНачальныйОстаток,
    ОстаткиИОбороты.СуммаОборотДт КАК СуммаПриход,
    ОстаткиИОбороты.СуммаОборотКт КАК СуммаРасход,
    ОстаткиИОбороты.СуммаКонечныйОстаток,
    ОстаткиИОбороты.Регистратор,
    ОстаткиИОбороты.ПериодСекунда
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, Авто, , , &ВидыСубконто, ) КАК ОстаткиИОбороты

Замена метода дополнения на Движения убирает лишние пустые строки, сохраняя при этом корректность итоговых сумм в вышестоящих группировках.

Способ 2. Настройка иерархии периодов и ролей в СКД

Если нам необходимо оставить детальные записи, важно правильно объяснить системе иерархию временных полей. Рассмотрим ситуацию, когда в отчете используются и ПериодСекунда, и Регистратор. Чтобы строки выстраивались логично, необходимо выполнить следующие действия на вкладке «Наборы данных»:

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

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

Способ 3. Обработка значения в запросе (CASE/WHEN)

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

Изменим выборку поля регистратор в запросе:


ВЫБРАТЬ
    ...
    ВЫБОР
        КОГДА ОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
            ТОГДА NULL
        ИНАЧЕ ОстаткиИОбороты.Регистратор
    КОНЕЦ КАК Регистратор
    ...

После этого в настройках поля Регистратор на вкладке «Наборы данных» в колонке «Роль» можно установить свойство «Игнорировать значения NULL». Это гарантирует, что записи, не имеющие ссылочного значения регистратора, не будут выводиться в детальных строках, но их числовые показатели (остатки) все равно попадут в общие итоги по номенклатуре или складу.

Способ 4. Использование отборов на уровне группировки

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

  1. Перейдем на вкладку «Настройки» в схеме СКД.
  2. Выберем конкретную группировку по полю Регистратор (или Детальные записи).
  3. На вкладке «Отбор» (именно для этой группировки, а не для всего отчета!) добавим условие: Регистратор Заполнено.
  4. В некоторых случаях лучше работает условие ТипЗначения(Регистратор) <> Тип("Неопределено").

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

Способ 5. Настройка расположения реквизитов и итогов

Выясним еще одну причину: иногда строка «Неопределено» является заголовком или подвалом группировки, который СКД выводит по умолчанию. Проверим параметры во вкладке «Другие настройки»:

Обычно сочетание Способа 1 (Метод дополнения — Движения) и Способа 2 (Правильная расстановка порядковых номеров периодов в ролях) решает задачу в 90% случаев. Если же вы работаете со сложным бухгалтерским регистром, где остатки должны «перетекать» между регистраторами, используйте Способ 3 с подменой на NULL, чтобы сохранить целостность данных.

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

← На главную