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

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

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

Прямой доступ через конфигуратор

Самый очевидный и надежный способ увидеть исходный код — открыть объект непосредственно в режиме конфигуратора. Это дает доступ ко всем свойствам отчета без ограничений режима пользователя. Вам потребуется найти нужный отчет в дереве метаданных и открыть его форму или макет.

Если отчет написан с использованием СКД, то текст запроса обычно хранится в макете с именем СхемаКомпоновкиДанных. Открыв этот макет, вы увидите визуальное представление набора данных. Однако для просмотра именно SQL-подобного текста 1С нужно переключиться на вкладку «Запрос» или использовать контекстное меню набора данных.

В некоторых случаях, особенно в старых конфигурациях или при использовании внешнего отчета, запрос может быть сформирован динамически в модуле объекта. Тогда стоит проверить модуль формы или модуль менеджера на наличие функции ПолучитьМакет и последующей обработки схемы. Наличие жестко заданного текста запроса упрощает анализ, но снижает гибкость.

⚠️ Внимание: Прямое редактирование текста запроса в макете СКД может привести к нарушению связи между полями и параметрами. Вносите изменения только если понимаете структуру схемы.

Анализ через схему компоновки данных

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

Внутри конструктора вы увидите список наборов данных. Каждый набор данных содержит свой запрос. Выбрав нужный набор, вы можете перейти к редактору запроса. Здесь система позволяет строить запрос визуально, перетаскивая поля из таблиц, но также предоставляет доступ к текстовому представлению.

  • 🔍 В редакторе запроса можно увидеть список используемых виртуальных таблиц и регистров.
  • 📝 Текстовое представление позволяет скопировать код для использования в других местах конфигурации.
  • ⚙️ Здесь же настраиваются параметры, которые подставляются в текст запроса при выполнении.

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

💡

Используйте кнопку "Проверить" в редакторе запросов, чтобы убедиться в синтаксической корректности текста перед сохранением изменений в макете.

Просмотр через обработку печатной формы

Часто пользователи сталкиваются с необходимостью посмотреть запрос уже сформированного отчета в режиме предприятия, не имея доступа к конфигуратору. В штатном режиме работы 1С скрытие текста запроса является мерой безопасности и защиты интеллектуальной собственности разработчика.

Тем не менее, существуют легальные способы анализа. Если у вас есть права на изменение отчетов или доступ к расширению конфигурации, вы можете добавить кнопку на форму отчета, которая будет выводить текст запроса в сообщение или внешнюю обработку. Для этого используется свойство КомпоновщикНастроек.

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

Метод доступа Необходимые права Сложность Где применимо
Конфигуратор Полные права Низкая Разработка и отладка
Расширение Администрирование Средняя Доработка без снятия с поддержки
Внешняя обработка Запуск внешних отчетов Высокая Аудит и анализ

⚠️ Внимание: Извлечение запроса в режиме предприятия возможно только если отчет не защищен специальными механизмами обфускации или если у вас есть права на отладку.

Использование технологического журнала

Для глубокого анализа производительности и просмотра реального текста запроса, уходящего в СУБД, лучшим инструментом является Технологический журнал (ТЖ). Этот метод позволяет увидеть не просто текст запроса СКД, а тот SQL-код или внутренний запрос платформы, который фактически выполняется.

Чтобы включить логирование, необходимо настроить файл logcfg.xml в каталоге платформы. Вам нужно активировать событие DBMSSQL (для SQL Server) или аналогичное для вашей СУБД, а также событие QueryBuilder. После воспроизведения проблемы в базе данных в логах появится полная информация.

<event name="QB" >

<property name="all" />

</event>

В логах вы найдете секцию, где отображается текст запроса, сгенерированный СКД. Это особенно полезно, когда нужно понять, как система оптимизирует запрос или почему не используется индекс. Анализ ТЖ требует высокой квалификации, так как объем данных может быть огромным.

📊 Какой способ просмотра запроса вы используете чаще всего?
Конфигуратор
Технологический журнал
Внешняя обработка
Не смотрю запросы

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

Если вы разрабатываете свои инструменты для работы с 1С, вам может понадобиться программно получить текст запроса из объекта СКД. Класс КомпоновщикНастроекКомпоновкиДанных предоставляет необходимые методы для работы со схемой.

Загрузив макет схемы в объект компоновщика, вы можете обратиться к коллекции наборов данных. Каждый элемент коллекции имеет свойство Запрос, которое содержит текст в виде строки. Это позволяет динамически анализировать структуру отчетов.

  • 🚀 Метод ПолучитьМакет возвращает объект макета, который можно передать в компоновщик.
  • 💾 Свойство Текст у объекта запроса содержит исходный код на языке запросов 1С.
  • 🔄 Можно программно заменять параметры в тексте запроса перед его выполнением.

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

Пример кода получения запроса

Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных();

Компоновщик.ЗагрузитьСхему(Отчет.ПолучитьМакет("СхемаКомпоновкиДанных"));

ТекстЗапроса = Компоновщик.НаборыДанных[0].Запрос.Текст;

Частые ошибки при анализе запросов

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

Другая ошибка заключается в игнорировании параметров. Текст запроса часто содержит ссылки на параметры, например, &ПериодНачала. Если вы копируете запрос в консоль запросов для проверки, не забудьте объявить эти параметры, иначе выполнение завершится ошибкой.

⚠️ Внимание: При копировании запроса из СКД в консоль запросов убедитесь, что все используемые виртуальные таблицы доступны в вашей текущей базе данных.

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

💡

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

Оптимизация и доработка запросов

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

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

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

☑️ Проверка запроса перед сохранением

Выполнено: 0 / 4
Можно ли посмотреть запрос встроенного отчета без прав конфигуратора?

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

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

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

Как найти запрос, если отчет формируется динамически?

Если запрос формируется в модуле, ищите вызов метода КомпоновщикНастроек.ЗагрузитьСхему или формирование объекта Запрос программно. В таких случаях текст запроса может собираться из частей или храниться в константах.

Влияет ли изменение текста запроса на скорость работы отчета?

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