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

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

Как посмотреть запрос СКД в 1С

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

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

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

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

Где хранится запрос СКД: наборы данных схемы компоновки

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

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

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

Как посмотреть запрос в режиме 1С:Предприятие без конфигуратора

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

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

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

Консоль СКД: самый удобный способ увидеть итоговый запрос

Консоль системы компоновки данных — внешняя обработка (есть в составе подсистемы «Инструменты разработчика» и в открытых проектах), которая позволяет загрузить схему компоновки, задать настройки и увидеть результат. Это основной рабочий инструмент при отладке отчётов.

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

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

Просмотр запроса через консоль СКД
  1. 1
    Откройте обработку «Консоль СКД» в режиме предприятия
  2. 2
    Загрузите схему компоновки нужного отчёта
  3. 3
    Перейдите на закладку «Настройки» и задайте параметры и отборы как в проблемном запуске
  4. 4
    Сформируйте отчёт и откройте итоговый макет компоновки
  5. 5
    Найдите в макете текст запроса с подставленными параметрами и отборами

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

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

Итоговый текст запроса находится в макете компоновки: Макет.НаборыДанных — у каждого элемента есть свойство Запрос, а параметры — в Макет.ЗначенияПараметров. Поставив точку останова после формирования макета, можно в табло посмотреть полный текст с уже добавленными отборами.

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

Этот способ единственный даёт полную картину: видно, как СКД преобразовала отборы в условия ГДЕ, какие временные таблицы созданы и какие значения параметров подставлены. Именно такой текст имеет смысл переносить в консоль запросов для анализа плана выполнения.

Как проверить, что вы смотрите правильный запрос

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

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

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

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

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

Есть ли в тексте условия из отборов отчёта
Норма

Отборы присутствуют в виде условий ГДЕ или параметров

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

Отборов нет — это исходный запрос набора, а не итоговый

Значения параметров периода
Норма

Параметры заполнены реальными датами из настроек

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

Параметры пустые или не заданы — результат будет отличаться

Количество наборов данных в макете
Норма

Число наборов совпадает со схемой с учётом связей

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

Наборов больше или меньше — проверьте связи и объединения

Типичные ошибки и ограничения при работе с запросом СКД

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

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

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

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

Что выбрать в разных ситуациях

Для быстрого ответа «откуда берутся данные» достаточно открыть схему в конфигураторе и прочитать текст набора данных. Это занимает минуту и не требует дополнительных инструментов.

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

Маршрут решения

Как выбрать действие

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

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

Итог

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

Исходный запрос СКД находится на закладке «Наборы данных» схемы компоновки. Реально выполняемый запрос с отборами и параметрами виден только в макете компоновки — получите его через консоль СКД или программно через КомпоновщикМакета. Изменения схемы делайте только на копии базы.

Частые вопросы

Можно ли посмотреть запрос СКД без конфигуратора?

Да, если отчёт типовой и у вас есть права: откройте отчёт, перейдите в «Ещё → Изменить вариант» и найдите доступ к схеме компоновки. Если доступ закрыт, поможет консоль СКД в пользовательском режиме или выгрузка схемы администратором.

Почему запрос из схемы и результат отчёта не совпадают?

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

Где в итоговом макете найти текст запроса?

В объекте МакетКомпоновкиДанных есть коллекция НаборыДанных. У каждого элемента свойство «Запрос» содержит итоговый текст, а значения параметров лежат в коллекции ЗначенияПараметров макета.

Как сохранить схему компоновки перед изменениями?

В конфигураторе откройте схему и используйте сохранение в файл (меню «Файл → Сохранить копию» либо кнопка выгрузки в окне схемы, зависит от версии платформы). Файл формата XML можно загрузить обратно в любой момент.

Почему конструктор запроса не открывает текст из СКД?

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

Опасно ли менять запрос в схеме рабочей базы?

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