Отчеты и Аналитика · 10 мин
Как посмотреть запрос СКД в 1С
Как посмотреть запрос СКД в 1С: настройки отчёта, консоль СКД, отладка в конфигураторе, программный способ. Разбор наборов данных и итогового текста запроса.
Запрос в системе компоновки данных (СКД) — основа любого отчёта: именно он определяет, какие данные будут получены из базы. Когда отчёт выдаёт неожиданный результат, пустые строки или работает медленно, первым делом нужно посмотреть текст запроса СКД и понять, какие таблицы и условия в нём используются.
Существует несколько способов увидеть запрос: через настройки самого отчёта в режиме предприятия, через схему компоновки в конфигураторе, через консоль СКД и программно — через отладчик. Каждый способ подходит под свою задачу: быстрый просмотр, анализ итогового запроса с учётом отборов или глубокая отладка.
Важно понимать разницу: в схеме компоновки хранится исходный запрос набора данных, а в момент формирования отчёта СКД достраивает его — добавляет отборы, группировки, соединения с наборами-объектами. Поэтому «текст в схеме» и «реально выполняемый запрос» могут отличаться, и ниже разобрано, как увидеть оба варианта.
Где хранится запрос СКД: наборы данных схемы компоновки
Основной источник — закладка «Наборы данных» в схеме компоновки данных. Чтобы открыть её в конфигураторе, найдите нужный отчёт в дереве конфигурации, откройте его и дважды щёлкните по «ОсновнаяСхемаКомпоновкиДанных» либо нажмите кнопку «Открыть схему компоновки данных».
В левой части закладки отображается список наборов данных. Набор типа «Запрос» содержит текст запроса в поле «Запрос» внизу окна. Нажав кнопку «Конструктор запроса», можно открыть тот же текст в визуальном конструкторе — удобно, если запрос большой и нужно разобрать его структуру по пакетам и соединениям.
Если в отчёте несколько наборов данных (например, «Продажи» и «План»), они связываются на закладке «Связи наборов данных». В этом случае итоговый SQL-подобный запрос строится СКД автоматически, и смотреть только текст одного набора недостаточно — нужно учитывать связи.
Как посмотреть запрос в режиме 1С:Предприятие без конфигуратора
В типовых конфигурациях (УТ, ERP, Бухгалтерия) отчёты на СКД позволяют добраться до запроса прямо из пользовательского режима, если у пользователя есть права на изменение варианта отчёта. Откройте отчёт, нажмите «Ещё → Изменить вариант» (или «Настройки → Расширенные» в зависимости от конфигурации).
В ряде типовых отчётов доступна кнопка «Изменить схему компоновки» или переход к структуре настроек. Если такой кнопки нет, значит разработчик закрыл доступ к схеме — тогда запрос можно увидеть только через конфигуратор или внешние инструменты.
Обратите внимание: в пользовательском режиме виден текст исходного запроса набора данных, но не итоговый запрос, который СКД формирует с учётом ваших отборов и параметров. Для анализа «почему отчёт тормозит» этого часто недостаточно.
Консоль СКД: самый удобный способ увидеть итоговый запрос
Консоль системы компоновки данных — внешняя обработка (есть в составе подсистемы «Инструменты разработчика» и в открытых проектах), которая позволяет загрузить схему компоновки, задать настройки и увидеть результат. Это основной рабочий инструмент при отладке отчётов.
Порядок работы: откройте консоль СКД, загрузите схему из отчёта (в консолях обычно есть команда «Загрузить схему из отчёта» или открытие файла схемы), задайте параметры и отборы, сформируйте отчёт. Многие консоли показывают итоговый макет компоновки, из которого видно, какой запрос реально выполняется.
Преимущество консоли перед отладчиком — скорость: не нужно ставить точки останова и перезапускать сеанс. Недостаток — это внешний инструмент, и в защищённых базах его использование может быть ограничено политиками безопасности.
- 1Откройте обработку «Консоль СКД» в режиме предприятия
- 2Загрузите схему компоновки нужного отчёта
- 3Перейдите на закладку «Настройки» и задайте параметры и отборы как в проблемном запуске
- 4Сформируйте отчёт и откройте итоговый макет компоновки
- 5Найдите в макете текст запроса с подставленными параметрами и отборами
Программный способ: получить итоговый запрос через отладчик
Когда нужен именно тот запрос, который уходит в СУБД, используют программную компоновку. В отладчике или во временной обработке выполняется последовательность: получить схему, компоновщик настроек, затем через КомпоновщикМакетаКомпоновкиДанных сформировать макет.
Итоговый текст запроса находится в макете компоновки: Макет.НаборыДанных — у каждого элемента есть свойство Запрос, а параметры — в Макет.ЗначенияПараметров. Поставив точку останова после формирования макета, можно в табло посмотреть полный текст с уже добавленными отборами.
Схема = Отчеты.МойОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
Компоновщик.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Компоновщик.ПолучитьНастройки());
// Текст итогового запроса:
Для Каждого Набор Из Макет.НаборыДанных Цикл
Сообщить(Набор.Запрос);
КонецЦикла;Этот способ единственный даёт полную картину: видно, как СКД преобразовала отборы в условия ГДЕ, какие временные таблицы созданы и какие значения параметров подставлены. Именно такой текст имеет смысл переносить в консоль запросов для анализа плана выполнения.
Как проверить, что вы смотрите правильный запрос
Частая ситуация: запрос из схемы открыт, но результат в отчёте не совпадает с ручным выполнением того же текста в консоли запросов. Причина почти всегда в том, что СКД достраивает запрос: добавляет отборы из настроек, условия по параметрам периода, дополнительные поля для группировок.
Проверочный признак: если в настройках отчёта есть отборы или параметры, а в просматриваемом тексте их нет — вы смотрите исходный запрос набора данных, а не итоговый. Для анализа производительности и расхождений нужен именно итоговый запрос из макета компоновки.
Также учитывайте дополнение периодов: если в настройках включено дополнение таблицы дат, СКД генерирует дополнительные обороты, которых нет в исходном тексте. При копировании запроса в консоль такие конструкции нужно воспроизводить вручную или отключать дополнение.
Как проверить результат
Отборы присутствуют в виде условий ГДЕ или параметров
Отборов нет — это исходный запрос набора, а не итоговый
Параметры заполнены реальными датами из настроек
Параметры пустые или не заданы — результат будет отличаться
Число наборов совпадает со схемой с учётом связей
Наборов больше или меньше — проверьте связи и объединения
Типичные ошибки и ограничения при работе с запросом СКД
Первая ошибка — правка запроса в схеме рабочей базы без копии. Изменение основной схемы влияет на все варианты отчёта, и откатить его без бэкапа сложно. Всегда экспериментируйте на копии базы или сохраните схему в файл перед изменениями.
Вторая ошибка — попытка выполнить исходный текст набора данных в консоли запросов и сравнить с отчётом «один в один». Без учёта отборов, параметров и связей наборов результаты будут различаться, что приводит к ложным выводам об «ошибке в запросе».
Третья группа проблем — ограничения конструктора: автополе «Автоупорядочивание», виртуальные таблицы с параметрами, характеристики. Конструктор запросов СКД не всегда корректно отображает сложные пакетные запросы, поэтому для анализа используйте текстовый режим.
Что выбрать в разных ситуациях
Для быстрого ответа «откуда берутся данные» достаточно открыть схему в конфигураторе и прочитать текст набора данных. Это занимает минуту и не требует дополнительных инструментов.
Для разбора расхождений и медленной работы используйте консоль СКД или программное получение макета — только итоговый запрос показывает реальную картину. Для оптимизации переносите итоговый текст в консоль запросов с анализом плана.
Как выбрать действие
Подводя итог: исходный запрос смотрят в схеме компоновки, итоговый — в макете компоновки через консоль СКД или отладчик. Выбор способа зависит от задачи, а главный риск — анализировать не тот текст и делать неверные выводы.
Что важно запомнить
Исходный запрос СКД находится на закладке «Наборы данных» схемы компоновки. Реально выполняемый запрос с отборами и параметрами виден только в макете компоновки — получите его через консоль СКД или программно через КомпоновщикМакета. Изменения схемы делайте только на копии базы.
Частые вопросы
Можно ли посмотреть запрос СКД без конфигуратора?
Да, если отчёт типовой и у вас есть права: откройте отчёт, перейдите в «Ещё → Изменить вариант» и найдите доступ к схеме компоновки. Если доступ закрыт, поможет консоль СКД в пользовательском режиме или выгрузка схемы администратором.
Почему запрос из схемы и результат отчёта не совпадают?
СКД достраивает запрос в момент формирования: добавляет условия из отборов, значения параметров, поля группировок и дополнение периодов. Исходный текст набора данных — только основа. Для сравнения берите итоговый запрос из макета компоновки.
Где в итоговом макете найти текст запроса?
В объекте МакетКомпоновкиДанных есть коллекция НаборыДанных. У каждого элемента свойство «Запрос» содержит итоговый текст, а значения параметров лежат в коллекции ЗначенияПараметров макета.
Как сохранить схему компоновки перед изменениями?
В конфигураторе откройте схему и используйте сохранение в файл (меню «Файл → Сохранить копию» либо кнопка выгрузки в окне схемы, зависит от версии платформы). Файл формата XML можно загрузить обратно в любой момент.
Почему конструктор запроса не открывает текст из СКД?
Конструктор не поддерживает некоторые конструкции: сложные пакетные запросы, специфические расширения языка запросов СКД, выражения с характеристиками. В таких случаях редактируйте запрос в текстовом режиме — это нормальная практика.
Опасно ли менять запрос в схеме рабочей базы?
Да, без копии это рискованно: изменение основной схемы влияет на все варианты отчёта и на всех пользователей сразу. Сохраните исходную схему в файл и проверяйте правки на тестовой копии базы.