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

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

Как в 1С посмотреть результирующий запрос СКД

Как в 1С посмотреть результирующий запрос СКД: конструктор схемы компоновки, закладка «Запрос», консоль СКД, отладка через параметры и временные таблицы.

Результирующий запрос СКД (системы компоновки данных) — это итоговый текст запроса, который платформа фактически формирует и выполняет при построении отчёта. Он отличается от запроса, который разработчик видит на закладке «Наборы данных»: СКД добавляет отборы, параметры, вычисляемые поля, итоги и обёртки, поэтому итоговый текст может заметно отличаться от исходного. Знание того, где посмотреть этот запрос, критично при отладке медленных отчётов и поиске неверных данных.

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

Зачем вообще смотреть результирующий запрос

Исходный запрос набора данных показывает только «скелет» выборки. В момент выполнения СКД подставляет в него параметры, добавляет условия отборов пользователя, формирует временные таблицы, оборачивает запрос для группировок и итогов. Если отчёт выводит не те данные или работает медленно, причина почти всегда видна именно в результирующем запросе, а не в исходном.

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

Способ 1. Конструктор СКД в конфигураторе

Откройте схему компоновки данных отчёта в конфигураторе: основная схема отчёта → кнопка «Открыть схему компоновки данных». На закладке «Наборы данных» вы увидите исходный запрос. Это не результирующий запрос, но он — отправная точка: здесь можно через конструктор запроса проверить корректность базовой выборки.

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

Способ 2. Просмотр запроса в режиме «1С:Предприятие»

В типовых конфигурациях на управляемых формах многие отчёты позволяют увидеть схему и настройки прямо в пользовательском режиме. Откройте отчёт, нажмите «Ещё» → «Изменить вариант...» (или «Прочее» → «Изменить вариант отчёта»). В открывшейся форме настроек видны отборы и параметры, которые СКД подставит в запрос.

В некоторых конфигурациях доступен пункт «Ещё» → «Изменить схему компоновки» или расширенный режим настроек, где отображается текст запроса набора данных с учётом текущих настроек. Доступность зависит от прав пользователя (нужны права на изменение вариантов или административные права) и от конкретной конфигурации.

Способ 3. Консоль СКД

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

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

Отладка через консоль СКД
  1. 1
    Сохраните схему компоновки данных из конфигуратора в файл XML
  2. 2
    Откройте консоль СКД и загрузите схему
  3. 3
    Установите параметры и отборы, воспроизводящие проблему
  4. 4
    Выполните компоновку и откройте результирующий запрос
  5. 5
    Скопируйте запрос в консоль запросов и выполните с теми же параметрами
  6. 6
    Сравните результат с данными отчёта

Способ 4. Отладка в конфигураторе через макет компоновки

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

В макете компоновки (МакетКомпоновки) наборы данных содержат уже готовый результирующий запрос. В отладчике через «Вычислить выражение» (Shift+F9) обратитесь к структуре макета: МакетКомпоновки.НаборыДанных — у элементов есть свойство Запрос, где лежит итоговый текст со всеми подстановками СКД.

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

bsl
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    Для Каждого Набор Из Макет.НаборыДанных Цикл
        Сообщить(Набор.Запрос);
    КонецЦикла;
КонецПроцедуры

Способ 5. Технологический журнал для реального SQL

Если нужно увидеть не запрос на языке 1С, а фактический SQL, который уходит в СУБД, используйте технологический журнал. Включите в logcfg.xml события DBMSSQL (для MS SQL Server), DBPOSTGRS, DBORACLE или DBV8DBENG в зависимости от используемой СУБД, выполните отчёт и найдите в логе соответствующий запрос.

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

Проверка результата и типичные ошибки

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

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

Типичные ошибки
01
Анализ исходного запроса набора данных вместо результирующего — отборы и параметры СКД остаются незамеченными
02
Сравнение результата без учёта параметров: в консоли запросов заданы другие значения, чем в отчёте
03
Игнорирование автоматических отборов СКД по периоду в виртуальных таблицах регистров
04
Постоянно включённый технологический журнал на продуктивном сервере — переполнение диска
Контрольные точки

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

Текст запроса в макете компоновки
Норма

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

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

Отборы из настроек в запросе отсутствуют

Результат в консоли запросов
Норма

Совпадает с детальными данными отчёта при тех же параметрах

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

Расходится — параметры переданы иначе

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

Сопоставимо с выполнением запроса в консоли

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

Отчёт намного медленнее запроса — проблема в компоновке, а не в SQL

FAQ

Почему запрос в конструкторе отличается от выполняемого?

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

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

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

Как увидеть SQL-запрос, который 1С отправляет в СУБД?

Через технологический журнал: включите события DBMSSQL, DBPOSTGRS или аналог для вашей СУБД в файле logcfg.xml, выполните отчёт и найдите запрос в логе. Лог включайте только на время диагностики — объём записей очень большой.

Что делать, если в макете компоновки несколько наборов данных?

Переберите все элементы коллекции НаборыДанных макета компоновки — у каждого набора свой результирующий запрос. Наборы могут объединяться связями, поэтому анализировать нужно все запросы вместе, а не только первый.

Почему запрос в консоли работает, а в отчёте — ошибка?

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

Безопасно ли добавлять отладочный код в ПриКомпоновкеРезультата?

Да, если делать это в тестовой копии базы или временно с последующим удалением кода. На рабочей базе вывод запроса через Сообщить() будет показываться пользователям и замедлять формирование отчёта, поэтому отладочный код нельзя оставлять в продуктиве.

Итог

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

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