Почему Построитель отчета не выводит группировки колонок и как это исправить?

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

При доработке типовых отчетов на базе объекта ПостроительОтчета (а также механизма «Универсальный отчет» в конфигурациях вроде «Управление торговлей 10.3» или «Комплексная автоматизация 1.1») разработчики нередко сталкиваются с ситуацией: новое добавленное поле появляется в доступных измерениях колонок или строк в настройках, но при формировании отчета структура колонок не меняется, либо данные не выводятся вовсе. Разберем детально причины такого поведения и пошагово выясним, как правильно настроить запрос и параметры построителя.

Причина 1. Директивы построителя в фигурных скобках во вложенных запросах

Проанализируем главную ошибку, возникающую при усложнении текста запроса. Если запрос отчета содержит вложенные подзапросы (секции ИЗ (...) КАК ВложенныйЗапрос), внутри них часто оставляют синтаксические конструкции построителя отчета, заключенные в фигурные скобки:


ВЫБРАТЬ
    Вложенный.Контрагент КАК Контрагент,
    Вложенный.Зона КАК Зона
ИЗ
    (ВЫБРАТЬ
        Документ.Контрагент КАК Контрагент,
        Документ.Зона КАК Зона
    {ВЫБРАТЬ
        Контрагент.*,
        Зона}
    ИЗ
        Документ.РеализацияТоваровУслуг КАК Документ) КАК Вложенный
{ГДЕ
    Вложенный.Контрагент.*,
    Вложенный.Зона}
{ИТОГИ ПО
    Контрагент.*,
    Зона}

Когда построитель отчета анализирует такой текст, механизмы оптимизации пытаются динамически модифицировать секции выборки. Наличие директив {ВЫБРАТЬ ...} во вложенном запросе приводит к тому, что при отсутствии явного обращения к связанным полям (например, документам расчетов) внутренний подзапрос «схлопывается» или отсекает необходимые поля выборки. В результате во внешнем запросе поле теряет связь с данными, и группировка колонок попросту не строится.

Решение: полностью очистить все вложенные запросы от фигурных скобок. Директивы построителя ({ВЫБРАТЬ}, {ГДЕ}, {ИТОГИ ПО}) должны находиться только на самом верхнем уровне итогового запроса.


ВЫБРАТЬ
    Вложенный.Контрагент КАК Контрагент,
    Вложенный.Зона КАК Зона,
    Вложенный.СуммаОстаток КАК СуммаОстаток
{ВЫБРАТЬ
    Контрагент.*,
    Зона,
    СуммаОстаток}
ИЗ
    (ВЫБРАТЬ
        Взаиморасчеты.Контрагент КАК Контрагент,
        Взаиморасчеты.Зона КАК Зона,
        Взаиморасчеты.СуммаОстаток КАК СуммаОстаток
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(...) КАК Взаиморасчеты) КАК Вложенный
{ГДЕ
    Вложенный.Контрагент.*,
    Вложенный.Зона}
{ИТОГИ ПО
    Контрагент.*,
    Зона}

Причина 2. Неправильное указание полей примитивных типов (звездочка .*)

Синтаксис Поле.* в директивах построителя предназначен исключительно для ссылочных типов данных (справочники, документы, планы видов характеристик). Он указывает платформе, что пользователь может обращаться через точку к любым реквизитам этой ссылки.

Если поле является примитивным типом (Строка, Число, Дата), добавление к нему звездочки (например, Зона.*) является синтаксической ошибкой логики построителя. Для строкового поля следует использовать только его чистое имя:


// Неправильно для строки:
{ВЫБРАТЬ Зона.*}
{ИТОГИ ПО Зона.*}

// Правильно для строки:
{ВЫБРАТЬ Зона}
{ИТОГИ ПО Зона}

Причина 3. Особенности инициализации измерений в «Универсальном отчете»

Если отчет строится на базе стандартной библиотеки «Универсальный отчет», добавления поля в текст запроса недостаточно. Проверим программную инициализацию в модуле отчета. Для добавления измерений колонок и строк используются специализированные экспортные методы:


// Добавление возможности группировки строк
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Зона");

// Добавление возможности группировки колонок
УниверсальныйОтчет.ДобавитьИзмерениеКолонки("Зона");

Для примитивных типов измерений убедимся, что тип измерения установлен как ТипИзмеренияПостроителяОтчета.Элементы. Использование типа Иерархия для строк приведет к пустому результату при компоновке.

Причина 4. Отсутствие агрегатов (числовых показателей) и значения NULL

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

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

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

← На главную