Как в отчете СКД объединить несколько значений группировки в одну строку и избежать пустых заголовков?

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

При разработке сложных отчетов в Системе компоновки данных (СКД) часто возникает задача перегруппировки данных "на лету". Например, когда в информационной базе объекты разделены по трем разным признакам (1, 2 и 3), но в конкретном отчете требуется объединить данные по признакам 1 и 3 в одну общую группу, оставив признак 2 без изменений. Разберем подробно, как реализовать такую логику, и проанализируем, почему могут возникать пустые строки в заголовках группировок.

Решение 1: Использование вычисляемых полей в СКД

Самый быстрый способ изменить логику группировки без правки основного запроса — это создание вычисляемого поля. Рассмотрим этот процесс по шагам. Допустим, у нас есть поле Признак, принимающее значения 1, 2 или 3.

Перейдем на вкладку "Вычисляемые поля" в схеме компоновки данных и добавим новое поле, назовем его МойПризнак. В колонке "Выражение" пропишем логику объединения. Нам необходимо, чтобы система воспринимала значения 1 и 3 как один и тот же элемент для целей группировки. Воспользуемся конструкцией ВЫБОР:


ВЫБОР 
    КОГДА Признак = 1 ИЛИ Признак = 3 
        ТОГДА 1 
    ИНАЧЕ Признак 
КОНЕЦ

После создания этого поля нам нужно изменить настройки самого отчета. Перейдем на вкладку "Настройки" и в структуре отчета заменим старую группировку по полю Признак на наше новое вычисляемое поле МойПризнак. Теперь система автоматически сложит ресурсы (суммы, количества) для объектов с признаками 1 и 3 и выведет их под единым заголовком "1".

Решение 2: Перенос логики в текст запроса (Набор данных)

Проанализируем ситуацию, когда вычисляемое поле работает нестабильно или вызывает ошибки при расчете итогов. Опытные разработчики рекомендуют переносить подобную логику непосредственно в текст SQL-запроса набора данных. Это позволяет системе заранее подготовить структуру данных, что снижает вероятность ошибок визуализации.

В тексте запроса мы можем создать аналогичное поле. Рассмотрим пример фрагмента запроса:


ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.СуммаОборот КАК Сумма,
    ВЫБОР
        КОГДА Продажи.ПризнакОбъекта = &Признак1 ИЛИ Продажи.ПризнакОбъекта = &Признак3
            ТОГДА &Признак1
        ИНАЧЕ Продажи.ПризнакОбъекта
    КОНЕЦ КАК ПризнакДляГруппировки
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК Продажи

Здесь мы создаем поле ПризнакДляГруппировки на уровне базы данных. Это гарантирует, что СКД получит уже "схлопнутые" данные. Важно помнить, что если Признак является ссылочным типом (например, СправочникСсылка или ПеречислениеСсылка), то в конструкции ТОГДА следует возвращать объект того же типа, а не просто число или строку.

Устранение проблемы пустых строк в группировках

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

Рассмотрим методы исправления этой ситуации:

  1. Настройка Выражения представления: В схеме СКД на вкладке "Вычисляемые поля" найдите колонку "Выражение представления". Если ваше поле МойПризнак после вычисления возвращает число (например, 1), а исходное поле было ссылкой, система может "потерять" текстовое описание. Пропишите в выражении представления логику отображения, например: ВЫБОР КОГДА МойПризнак = 1 ТОГДА "Признак 1 (объединенный)" ИНАЧЕ Строка(МойПризнак) КОНЕЦ.
  2. Проверка выбранных полей группировки: Проанализируем настройки группировки на вкладке "Выбранные поля". Часто ошибка кроется в том, что в саму группировку добавлено новое поле МойПризнак, а в список отображаемых полей (внутри этой группировки) по ошибке добавлено старое поле Признак. Так как для группы "1" исходные данные содержат и "1", и "3", система выдает NULL или пустоту, не зная, какое именно исходное значение показать. Убедитесь, что в выбранных полях группировки указано именно вычисляемое поле.
  3. Типизация значений: Если вы используете конструкцию ВЫБОР, старайтесь приводить все результаты к одному типу данных. Если одно условие возвращает Число, а другое — Ссылку, СКД создаст поле неопределенного типа, что приведет к дублированию строк в отчете (одна пустая строка для чисел, другая — для ссылок). Используйте функцию ВЫРАЗИТЬ() в запросе или убедитесь, что все ветки условия ТОГДА возвращают одинаковый тип данных.

Обработка значений NULL при объединении

Посмотрим на ситуацию, когда один из признаков может отсутствовать в выборке (например, при левом соединении таблиц). Если Признак имеет значение NULL, группировка также может выглядеть как пустая строка. Чтобы этого избежать, всегда используйте функцию ЕСТЬNULL. Модернизируем наше вычисляемое поле:


ВЫБОР 
    КОГДА ЕСТЬNULL(Признак, 0) = 1 ИЛИ ЕСТЬNULL(Признак, 0) = 3 
        ТОГДА 1 
    ИНАЧЕ ЕСТЬNULL(Признак, 0) 
КОНЕЦ

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

← На главную