Отчеты и Аналитика · 12 мин
Построитель отчёта в 1С: что это и как с ним работать
Разбираем, что такое построитель отчёта в 1С: назначение, отличие от СКД и консоли отчётов, настройка полей и отборов, типичные ошибки и ответы на вопросы.
Построитель отчёта в 1С — это программный объект платформы, который автоматически формирует текст запроса к базе данных на основе заданных пользователем настроек: выбранных полей, отборов, сортировки и группировок. Проще говоря, это промежуточный механизм между пользователем и языком запросов: пользователь указывает, какие данные хочет видеть, а построитель сам собирает корректный запрос и передаёт его на выполнение.
Объект ПостроительОтчета появился в платформе 1С:Предприятие 8 и активно применялся в типовых конфигурациях на обычных формах — например, в «Управлении торговлей 10.3» и «УПП» большинство универсальных отчётов построено именно на нём. В современных конфигурациях на управляемых формах его место заняла система компоновки данных (СКД), однако построитель отчёта никуда не исчез: он поддерживается платформой, встречается в старом коде и остаётся удобным инструментом для быстрых несложных отчётов.
Понимание построителя отчёта важно по двум причинам. Во-первых, огромный массив действующих баз работает на конфигурациях, где отчёты построены на этом механизме, и их нужно поддерживать. Во-вторых, построитель — хорошая учебная ступень: он наглядно показывает, как из пользовательских настроек рождается запрос, и упрощает переход к изучению СКД.
Как построитель отчёта устроен и что он делает
В основе построителя лежит исходный текст запроса, который разработчик задаёт в свойстве Текст. Это обычный запрос на встроенном языке запросов 1С, но с одним дополнением: в нём можно использовать конструкции построителя — фигурные скобки {ВЫБРАТЬ ...}, {ГДЕ ...}, {УПОРЯДОЧИТЬ ПО ...}. Эти расширения помечают места, куда построитель подставит пользовательские настройки.
Когда пользователь в форме отчёта добавляет отбор или меняет состав полей, построитель анализирует настройки и динамически переписывает текст запроса: добавляет условия в секцию ГДЕ, расширяет список выбираемых полей, меняет сортировку. Затем запрос выполняется, а результат выгружается в таблицу значений или сразу в табличный документ.
Ключевые элементы объекта: коллекции ВыбранныеПоля, Отбор, Порядок, а также методы Выполнить(), ПолучитьЗапрос() и Вывести(). Метод ПолучитьЗапрос() особенно полезен при отладке — он возвращает объект запроса с уже подставленными настройками, и можно посмотреть итоговый текст.
Где построитель отчёта встречается на практике
Классический пример — «Универсальный отчёт» в конфигурациях на обычных формах. Пользователь выбирает тип данных (документы, регистры, справочники), а построитель формирует запрос к выбранному источнику. Ещё одна типичная область — отчёты по остаткам и оборотам регистров с гибкими отборами по измерениям.
Также построитель часто используется в обработках и печатных формах, где нужно быстро отобрать данные по динамическим условиям: например, сформировать список контрагентов по произвольному набору фильтров, который задаёт оператор. В таких сценариях разработчик экономит время: не нужно вручную склеивать текст запроса из строк.
В конфигурациях на управляемых формах (УТ 11, ERP, БП 3.0) типовые отчёты построены на СКД, и построитель там встречается редко — в основном в унаследованном или самописном коде. Если вы поддерживаете старую базу, знание построителя обязательно; если пишете новый отчёт — выбирайте СКД.
Как создать простой отчёт на построителе: порядок действий
Минимальный сценарий программного использования построителя выглядит так: объявляется объект, задаётся текст запроса с расширениями построителя, выполняется настройка отборов, запрос выполняется, результат выводится. Ниже — типовой фрагмент кода.
Построитель = Новый ПостроительОтчета;
Построитель.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Товар,
| Номенклатура.Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|{ГДЕ
| (Номенклатура.Родитель = &Группа)}";
Построитель.ЗаполнитьНастройки();
ЭлементОтбора = Построитель.Отбор.Добавить("Родитель");
ЭлементОтбора.ВидСравнения = ВидСравнения.ВИерархии;
ЭлементОтбора.Значение = НужнаяГруппа;
ЭлементОтбора.Использование = Истина;
Построитель.Выполнить();
Построитель.Вывести(ТабличныйДокумент);
- 1Сформулируйте исходный запрос и проверьте его в консоли запросов без расширений построителя
- 2Добавьте в запрос конструкции {ВЫБРАТЬ}, {ГДЕ}, {УПОРЯДОЧИТЬ ПО} в местах динамических настроек
- 3Создайте объект ПостроительОтчета, присвойте текст и вызовите ЗаполнитьНастройки()
- 4Настройте отборы программно или дайте пользователю форму настройки
- 5Выполните построитель и выведите результат в табличный документ
- 6Проверьте итоговый запрос через ПолучитьЗапрос() на контрольном наборе данных
Важный нюанс: метод ЗаполнитьНастройки() анализирует текст запроса и автоматически создаёт список доступных полей и отборов. Если вызвать его до задания текста или после ручного изменения настроек, можно получить рассинхронизацию настроек и запроса. Правильная последовательность: текст → заполнение настроек → корректировка отборов → выполнение.
Настройка отборов, полей и порядка
Отборы — самая востребованная часть настроек. Каждый элемент отбора имеет путь к данным (имя поля), вид сравнения, значение и флаг использования. Поддерживаются стандартные виды сравнения: равно, не равно, в списке, в иерархии, содержит (для строк) и другие. Отборы, описанные в конструкции {ГДЕ}, доступны пользователю для редактирования.
Выбранные поля определяют, что попадёт в результат. Поля, перечисленные в конструкции {ВЫБРАТЬ ...}, пользователь может включать и отключать. Поля вне фигурных скобок выводятся всегда. Порядок строк управляется коллекцией Порядок и конструкцией {УПОРЯДОЧИТЬ ПО ...}.
Для удобства пользователей в типовых решениях форма настройки строится на табличном поле, связанном с коллекцией Построитель.Отбор. Это даёт готовый интерфейс «из коробки»: добавление условий, смену вида сравнения, флажки использования. При самостоятельной разработке такой подход сильно дешевле, чем рисовать собственные элементы управления.
Чем построитель отчёта отличается от СКД и консоли отчётов
Эти три инструмента часто путают, потому что все они связаны с получением данных. Различия принципиальны, и от них зависит выбор технологии.
| Критерий | Построитель отчёта | СКД | Консоль отчётов |
|---|---|---|---|
| Тип инструмента | Объект встроенного языка | Отдельный механизм платформы со схемой компоновки | Внешняя обработка для разработчика |
| Настройки пользователя | Поля, отборы, порядок | Поля, отборы, группировки, ресурсы, диаграммы, варианты отчёта | Зависит от реализации обработки |
| Оформление результата | Простое, в основном программное | Богатое: стили, макеты, условное оформление | Не предназначена для конечных пользователей |
| Типовое применение | Старые конфигурации, простые отчёты | Все новые типовые отчёты | Отладка и ad-hoc-анализ |
Что выбрать для нового отчёта
Подходит для простых отчётов в конфигурациях на обычных формах и для динамических запросов внутри обработок. Ограничение: слабые возможности оформления и нет группировок с итогами по ресурсам.
Стандарт для новых отчётов: группировки, варианты, диаграммы, условное оформление без кода. Ограничение: выше порог входа и сложнее отладка нестандартных схем.
Подходит, когда настройки пользователя не нужны вовсе. Ограничение: любой новый отбор придётся программировать вручную.
Практическое правило: если отчёт создаётся в современной конфигурации на управляемых формах — используйте СКД. Построитель оправдан, когда нужно доработать существующий отчёт в старой конфигурации или когда требуется программно собрать запрос с динамическими условиями внутри обработки.
Типичные ошибки и ограничения построителя
Главное архитектурное ограничение: построитель не умеет группировки с иерархией, ресурсы, вычисляемые поля и варианты отчёта. Всё, что выходит за рамки «поля + отборы + сортировка», приходится доделывать вручную в коде, что быстро делает решение неподдерживаемым. Если требования выросли — переносите отчёт на СКД, а не надстраивайте построитель.
Как проверить, что отчёт работает правильно
Проверка начинается с итогового запроса. Вызовите Построитель.ПолучитьЗапрос() и выведите текст в сообщение или файл — так видно, какие условия реально попали в запрос. Несоответствие текста ожиданиям почти всегда означает ошибку в настройках или в расширениях построителя.
Как проверить результат
Все включённые отборы присутствуют в секции ГДЕ, параметры заполнены
Условие отсутствует или параметр пуст — настройка не применилась
Соответствует контрольной выборке из консоли запросов с теми же условиями
Строк больше или меньше — проверяйте вид сравнения и иерархию отбора
Отчёт формируется за приемлемое для пользователей время
Запрос выполняется минутами — нужны индексы, отбор по периоду или пересмотр запроса
Эталон для сверки — консоль запросов: выполните исходный запрос с теми же условиями вручную и сравните количество строк и ключевые суммы с результатом построителя. Расхождение на этом этапе локализует проблему: либо в настройках построителя, либо в самой логике запроса.
При доработке старого отчёта на построителе сначала сохраните его настройки пользователя (они хранятся отдельно и могут сбрасываться при изменении текста запроса). Потеря накопленных настроек — самая частая жалоба пользователей после обновления отчётов.
Ответы на частые вопросы
Поддерживается ли построитель отчёта в актуальных версиях платформы 1С?
Да, объект ПостроительОтчета сохраняется в платформе и работает, в том числе в управляемом приложении. Однако развивать его фирма «1С» не планирует: вся функциональность новых отчётов сосредоточена в СКД. Поддерживать старый код можно, новые отчёты лучше делать на СКД.
Чем конструкции в фигурных скобках отличаются от обычного запроса?
Конструкции {ВЫБРАТЬ}, {ГДЕ}, {УПОРЯДОЧИТЬ ПО} — это расширение языка запросов, которое понимает только построитель (и частично СКД). Они помечают фрагменты, доступные для динамической настройки. Обычный запрос с такими скобками выполнить нельзя — их обрабатывает именно построитель.
Можно ли дать пользователю настройку отборов без программирования формы?
Да. Достаточно разместить на форме табличное поле, связанное с коллекцией Отбор объекта построителя, — платформа сама отрисует список условий с видами сравнения и значениями. Это стандартный приём в отчётах на обычных формах.
Почему отбор по полю «не подхватывается» построителем?
Чаще всего поле не описано в конструкции {ГДЕ} исходного запроса или путь к полю в отборе не совпадает с псевдонимом в запросе. Проверьте текст запроса и вызовите ЗаполнитьНастройки() заново после его изменения.
Стоит ли переписывать старые отчёты с построителя на СКД?
Если отчёт работает и требования не меняются — переписывать не обязательно. Миграция оправдана, когда нужны группировки, варианты отчёта, условное оформление или перенос на управляемые формы: реализовывать это на построителе дороже, чем собрать схему компоновки.
Где посмотреть итоговый запрос, который реально выполняет построитель?
Используйте метод ПолучитьЗапрос(): он возвращает объект Запрос с готовым текстом и параметрами. Выведите Свойство Текст этого запроса в сообщение или журнал — так вы увидите все условия, которые построитель подставил из настроек.
Что важно запомнить
Построитель отчёта — объект платформы 1С, который по исходному запросу с расширениями и настройкам пользователя формирует итоговый запрос и выводит результат. Он массово применяется в старых конфигурациях на обычных формах, а для новых отчётов стандартом является СКД. При работе с построителем проверяйте итоговый запрос через ПолучитьЗапрос() и не запускайте широкие выборки без отборов на рабочей базе.