Как программно добавить колонку или группировку в Универсальный отчет 1С

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

При разработке отчетов на базе Универсального отчета в конфигурациях на обычных формах (таких как УПП 1.1, КА 1.1 или УТ 10.3) программисты часто сталкиваются с ситуацией, когда добавленное в запрос поле упорно отказывается выводиться в отчет программно. В этой статье мы подробно разберем, как правильно управлять составом группировок и колонок, проанализируем типичные ошибки и выясним, какую роль в этом играет ПостроительОтчета.

Понимание механизма Универсального отчета

Универсальный отчет является надстройкой над объектом ПостроительОтчета. Чтобы программно добавить новое измерение (группировку строк) или выбранное поле (колонку), недостаточно просто написать запрос. Необходимо, чтобы ПостроительОтчета «увидел» это поле как доступное для настроек. Разберем этот процесс по шагам.

Шаг 1. Правильное оформление запроса в секциях Построителя

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

Рассмотрим структуру правильного запроса для Универсального отчета:


Процедура НазначитьТекстПараметрыЗапроса()
    ТекстЗапроса = 
    "ВЫБРАТЬ
    |   ТоварыНаСкладах.Склад КАК Склад,
    |   ТоварыНаСкладах.Номенклатура КАК Номенклатура,
    |   ТоварыНаСкладах.Номенклатура.Артикул КАК Артикул
    |{ВЫБРАТЬ
    |   Склад.*,
    |   Номенклатура.*,
    |   Артикул}
    |ИЗ
    |   РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    |{ГДЕ
    |   ТоварыНаСкладах.Склад.*,
    |   ТоварыНаСкладах.Номенклатура.*}
    |{ИТОГИ ПО
    |   Склад.*,
    |   Номенклатура.*,
    |   Артикул}";

    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
КонецПроцедуры

Обратите внимание на секцию {ИТОГИ ПО ...}. Именно она определяет, какие поля ПостроительОтчета включит в коллекцию ДоступныеПоля с признаком Измерение = Истина. Если поля нет в этой секции, метод ДобавитьИзмерениеСтроки() может вернуть Ложь.

Шаг 2. Инициализация настроек и порядок вызова методов

Одной из самых распространенных ошибок является неправильный порядок инициализации. Проанализируем критически важную последовательность действий в процедуре УстановитьНачальныеНастройки:

  1. Сначала необходимо установить основной текст запроса или указать имя регистра.
  2. Затем вызывается метод УниверсальныйОтчет.ПостроительОтчета.ЗаполнитьНастройки(). Внимание: этот метод полностью очищает текущие настройки (группировки, отборы, колонки) и перестраивает их на основании структуры нового запроса.
  3. Только после вызова ЗаполнитьНастройки() можно добавлять свои измерения и поля.

Посмотрим на пример правильного кода:


// В модуле отчета
Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт

    // 1. Указываем источник данных
    УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";
    
    // 2. Заполняем настройки по умолчанию (важно!)
    УниверсальныйОтчет.ПостроительОтчета.ЗаполнитьНастройки();
    
    // 3. Добавляем программные группировки
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Склад");
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
    
    // Добавляем реквизит, который мы хотим видеть в группировках
    Если НЕ УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Реквизит") Тогда
        Сообщить("Не удалось добавить группировку 'Реквизит'. Проверьте наличие поля в запросе.");
    КонецЕсли;

КонецПроцедуры

Шаг 3. Анализ доступных полей при возникновении ошибок

Если метод ДобавитьИзмерениеСтроки возвращает Ложь, необходимо воспользоваться отладчиком и проверить коллекцию УниверсальныйОтчет.ПостроительОтчета.ДоступныеПоля. Найдем в ней интересующее нас поле и проверим два свойства:

Проверить это можно простой строкой кода в табло отладчика:

УниверсальныйОтчет.ПостроительОтчета.ДоступныеПоля.Найти("ИмяВашегоПоля").Измерение

Шаг 4. Типичные технические ловушки

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

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

Шаг 5. Отличие группировок от детальных колонок

Важно различать два способа вывода данных, которые предоставляет УниверсальныйОтчет:

Если ваша задача — просто увидеть доп. колонку с информацией в строке, лучше использовать второй метод, чтобы не перегружать структуру отчета лишней вложенностью.

Пример работы с табличными частями

Как отмечалось в обсуждении, если вам нужно вывести данные из табличных частей (например, характеристики или спецификации номенклатуры), лучше всего предварительно собрать эти данные во временную таблицу в основном запросе. Прямое обращение к ТЧ через точку от родительского объекта внутри Универсального отчета часто приводит к некорректному дублированию строк или невозможности построить итоги.

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

← На главную