К статье
Практический материал

Отчеты и Аналитика · 12 мин

Построитель отчёта в 1С: что это и как с ним работать

Разбираем, что такое построитель отчёта в 1С: назначение, отличие от СКД и консоли отчётов, настройка полей и отборов, типичные ошибки и ответы на вопросы.

Построитель отчёта в 1С — это программный объект платформы, который автоматически формирует текст запроса к базе данных на основе заданных пользователем настроек: выбранных полей, отборов, сортировки и группировок. Проще говоря, это промежуточный механизм между пользователем и языком запросов: пользователь указывает, какие данные хочет видеть, а построитель сам собирает корректный запрос и передаёт его на выполнение.

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

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

Как построитель отчёта устроен и что он делает

В основе построителя лежит исходный текст запроса, который разработчик задаёт в свойстве Текст. Это обычный запрос на встроенном языке запросов 1С, но с одним дополнением: в нём можно использовать конструкции построителя — фигурные скобки {ВЫБРАТЬ ...}, {ГДЕ ...}, {УПОРЯДОЧИТЬ ПО ...}. Эти расширения помечают места, куда построитель подставит пользовательские настройки.

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

Ключевые элементы объекта: коллекции ВыбранныеПоля, Отбор, Порядок, а также методы Выполнить(), ПолучитьЗапрос() и Вывести(). Метод ПолучитьЗапрос() особенно полезен при отладке — он возвращает объект запроса с уже подставленными настройками, и можно посмотреть итоговый текст.

Где построитель отчёта встречается на практике

Классический пример — «Универсальный отчёт» в конфигурациях на обычных формах. Пользователь выбирает тип данных (документы, регистры, справочники), а построитель формирует запрос к выбранному источнику. Ещё одна типичная область — отчёты по остаткам и оборотам регистров с гибкими отборами по измерениям.

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

В конфигурациях на управляемых формах (УТ 11, ERP, БП 3.0) типовые отчёты построены на СКД, и построитель там встречается редко — в основном в унаследованном или самописном коде. Если вы поддерживаете старую базу, знание построителя обязательно; если пишете новый отчёт — выбирайте СКД.

Как создать простой отчёт на построителе: порядок действий

Минимальный сценарий программного использования построителя выглядит так: объявляется объект, задаётся текст запроса с расширениями построителя, выполняется настройка отборов, запрос выполняется, результат выводится. Ниже — типовой фрагмент кода.

Построитель = Новый ПостроительОтчета;

Построитель.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Товар,

| Номенклатура.Артикул

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|{ГДЕ

| (Номенклатура.Родитель = &Группа)}";

Построитель.ЗаполнитьНастройки();

ЭлементОтбора = Построитель.Отбор.Добавить("Родитель");

ЭлементОтбора.ВидСравнения = ВидСравнения.ВИерархии;

ЭлементОтбора.Значение = НужнаяГруппа;

ЭлементОтбора.Использование = Истина;

Построитель.Выполнить();

Построитель.Вывести(ТабличныйДокумент);

Порядок создания отчёта на построителе
  1. 1
    Сформулируйте исходный запрос и проверьте его в консоли запросов без расширений построителя
  2. 2
    Добавьте в запрос конструкции {ВЫБРАТЬ}, {ГДЕ}, {УПОРЯДОЧИТЬ ПО} в местах динамических настроек
  3. 3
    Создайте объект ПостроительОтчета, присвойте текст и вызовите ЗаполнитьНастройки()
  4. 4
    Настройте отборы программно или дайте пользователю форму настройки
  5. 5
    Выполните построитель и выведите результат в табличный документ
  6. 6
    Проверьте итоговый запрос через ПолучитьЗапрос() на контрольном наборе данных

Важный нюанс: метод ЗаполнитьНастройки() анализирует текст запроса и автоматически создаёт список доступных полей и отборов. Если вызвать его до задания текста или после ручного изменения настроек, можно получить рассинхронизацию настроек и запроса. Правильная последовательность: текст → заполнение настроек → корректировка отборов → выполнение.

Настройка отборов, полей и порядка

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

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

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

Чем построитель отчёта отличается от СКД и консоли отчётов

Эти три инструмента часто путают, потому что все они связаны с получением данных. Различия принципиальны, и от них зависит выбор технологии.

КритерийПостроитель отчётаСКДКонсоль отчётов
Тип инструментаОбъект встроенного языкаОтдельный механизм платформы со схемой компоновкиВнешняя обработка для разработчика
Настройки пользователяПоля, отборы, порядокПоля, отборы, группировки, ресурсы, диаграммы, варианты отчётаЗависит от реализации обработки
Оформление результатаПростое, в основном программноеБогатое: стили, макеты, условное оформлениеНе предназначена для конечных пользователей
Типовое применениеСтарые конфигурации, простые отчётыВсе новые типовые отчётыОтладка и ad-hoc-анализ

Что выбрать для нового отчёта

Построитель отчёта

Подходит для простых отчётов в конфигурациях на обычных формах и для динамических запросов внутри обработок. Ограничение: слабые возможности оформления и нет группировок с итогами по ресурсам.

СКД

Стандарт для новых отчётов: группировки, варианты, диаграммы, условное оформление без кода. Ограничение: выше порог входа и сложнее отладка нестандартных схем.

Ручной запрос + табличный документ

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

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

Типичные ошибки и ограничения построителя

Типичные ошибки
01
Отбор по полю, отсутствующему в запросе или в конструкции {ГДЕ} — построитель либо игнорирует условие, либо выдаёт ошибку, и пользователь получает неверные данные
02
Изменение текста запроса после ЗаполнитьНастройки() без повторного заполнения — настройки перестают соответствовать запросу
03
Использование отбора по невыбранному полю большой таблицы без индекса — запрос выполняется неприемлемо долго на больших базах
04
Попытка реализовать сложные группировки и итоги средствами построителя — для этого нужна СКД, построитель такие задачи не решает
05
Вывод результата без ограничения объёма — выгрузка миллионов строк в табличный документ приводит к зависанию клиентского приложения

Главное архитектурное ограничение: построитель не умеет группировки с иерархией, ресурсы, вычисляемые поля и варианты отчёта. Всё, что выходит за рамки «поля + отборы + сортировка», приходится доделывать вручную в коде, что быстро делает решение неподдерживаемым. Если требования выросли — переносите отчёт на СКД, а не надстраивайте построитель.

Как проверить, что отчёт работает правильно

Проверка начинается с итогового запроса. Вызовите Построитель.ПолучитьЗапрос() и выведите текст в сообщение или файл — так видно, какие условия реально попали в запрос. Несоответствие текста ожиданиям почти всегда означает ошибку в настройках или в расширениях построителя.

Контрольные точки

Как проверить результат

Текст итогового запроса через ПолучитьЗапрос()
Норма

Все включённые отборы присутствуют в секции ГДЕ, параметры заполнены

Тревожный признак

Условие отсутствует или параметр пуст — настройка не применилась

Количество строк результата
Норма

Соответствует контрольной выборке из консоли запросов с теми же условиями

Тревожный признак

Строк больше или меньше — проверяйте вид сравнения и иерархию отбора

Время выполнения
Норма

Отчёт формируется за приемлемое для пользователей время

Тревожный признак

Запрос выполняется минутами — нужны индексы, отбор по периоду или пересмотр запроса

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

При доработке старого отчёта на построителе сначала сохраните его настройки пользователя (они хранятся отдельно и могут сбрасываться при изменении текста запроса). Потеря накопленных настроек — самая частая жалоба пользователей после обновления отчётов.
ПЗ
Практическое замечание

Ответы на частые вопросы

Поддерживается ли построитель отчёта в актуальных версиях платформы 1С?

Да, объект ПостроительОтчета сохраняется в платформе и работает, в том числе в управляемом приложении. Однако развивать его фирма «1С» не планирует: вся функциональность новых отчётов сосредоточена в СКД. Поддерживать старый код можно, новые отчёты лучше делать на СКД.

Чем конструкции в фигурных скобках отличаются от обычного запроса?

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

Можно ли дать пользователю настройку отборов без программирования формы?

Да. Достаточно разместить на форме табличное поле, связанное с коллекцией Отбор объекта построителя, — платформа сама отрисует список условий с видами сравнения и значениями. Это стандартный приём в отчётах на обычных формах.

Почему отбор по полю «не подхватывается» построителем?

Чаще всего поле не описано в конструкции {ГДЕ} исходного запроса или путь к полю в отборе не совпадает с псевдонимом в запросе. Проверьте текст запроса и вызовите ЗаполнитьНастройки() заново после его изменения.

Стоит ли переписывать старые отчёты с построителя на СКД?

Если отчёт работает и требования не меняются — переписывать не обязательно. Миграция оправдана, когда нужны группировки, варианты отчёта, условное оформление или перенос на управляемые формы: реализовывать это на построителе дороже, чем собрать схему компоновки.

Где посмотреть итоговый запрос, который реально выполняет построитель?

Используйте метод ПолучитьЗапрос(): он возвращает объект Запрос с готовым текстом и параметрами. Выведите Свойство Текст этого запроса в сообщение или журнал — так вы увидите все условия, которые построитель подставил из настроек.

Итог

Что важно запомнить

Построитель отчёта — объект платформы 1С, который по исходному запросу с расширениями и настройкам пользователя формирует итоговый запрос и выводит результат. Он массово применяется в старых конфигурациях на обычных формах, а для новых отчётов стандартом является СКД. При работе с построителем проверяйте итоговый запрос через ПолучитьЗапрос() и не запускайте широкие выборки без отборов на рабочей базе.