Где увидеть запрос 1С 8.3 — в конфигураторе, отладчике и на стороне СУБД
Содержание
Текст запроса отчёта или обработки в 1С 8.3 смотрят в конфигураторе: откройте объект, затем схему компоновки данных, вкладку «Наборы данных». Если нужен запрос в момент выполнения, со значениями параметров, — поставьте точку останова и вычислите Запрос.Текст в отладчике (Shift+F9).
Пользователю без конфигуратора доступен только журнал регистрации, а он показывает события, а не тексты. SQL, который платформа реально отправляет в СУБД, видно в технологическом журнале (событие DBMSSQL или DBPOSTGRS) или в профайлере самой СУБД.
Какой способ посмотреть запрос выбрать
Способы отличаются тем, что именно вы увидите: исходный текст на языке запросов 1С, итоговый текст после компоновки или SQL для СУБД.
| Способ | Что видно | Кому доступен | Когда выбирать |
|---|---|---|---|
| Конфигуратор: схема, модуль | Исходный текст на языке 1С | Разработчик, права администратора | Понять логику отчёта, поправить запрос |
| Отладчик | Текст, параметры, результат в момент выполнения | Разработчик | Отчёт «показывает не то», нужна точная причина |
| Вывод из кода | Текст и параметры в сообщении, файле, журнале | Разработчик | Отладчик не подключить: рабочий сервер, редкий сбой |
| Журнал регистрации | Кто, когда, какие данные менял | Администратор базы | Найти момент и пользователя, а не текст |
| Технологический журнал | Запрос 1С (SDBL) и SQL (DBMSSQL), длительность | Администратор сервера | Тормоза, блокировки, «что за запрос висит» |
| Профайлер СУБД | Чистый SQL, план, нагрузка | Администратор СУБД | Анализ производительности на MS SQL, PostgreSQL |
Запрос на языке 1С и SQL — разные тексты. Один запрос 1С превращается в один или несколько SQL-запросов к таблицам вида _Document123, _Reference45, _Fld678. Для понимания логики берите текст 1С, для поиска тормозов — SQL.
Текст запроса отчёта, обработки и списка в конфигураторе
Это основной путь для разработчика. Нужны права администратора и запуск базы в режиме «Конфигуратор».
Отчёт на системе компоновки данных
Почти все типовые отчёты БП 3.0, ЗУП 3.1 и УТ 11 построены на СКД. Порядок такой:
- Откройте
Конфигурация → Открыть конфигурацию. - В дереве метаданных найдите ветку
Отчеты, а в ней нужный отчёт. Быстрый поиск — встаньте в дерево и начните печатать имя. - Откройте отчёт двойным щелчком, перейдите на вкладку
Макетыи откройтеОсновнаяСхемаКомпоновкиДанных. Тот же макет доступен кнопкойОткрыть схему компоновки данныхна основной вкладке. - В схеме перейдите на вкладку
Наборы данныхи выберите набор с типом «Запрос». Текст запроса — в поле справа. - Чтобы разобрать сложный запрос визуально, нажмите
Конструктор запроса...: он покажет таблицы, связи, условия и пакет временных таблиц по шагам.
Не сохраняйте изменения в типовой конфигурации на поддержке — правка снимет объект с поддержки и усложнит обновления. Для экспериментов скопируйте текст в консоль запросов или используйте расширение.
Внешний отчёт или обработка
Файл .erf или .epf открывают в конфигураторе через Файл → Открыть. Дальше всё так же: вкладка Макеты для СКД или модуль объекта, если запрос написан в коде.
В модуле ищите текст поиском Ctrl+F по слову ВЫБРАТЬ или Новый Запрос. Запросы в коде часто собираются из кусков через СтрЗаменить и +, поэтому полный текст надёжнее смотреть отладчиком.
Запрос динамического списка формы
Списки документов и справочников с настроенными колонками строятся динамическим списком.
- 🔹 Откройте форму списка в конфигураторе, вкладку
Реквизиты. - 🔹 Выделите реквизит
Списоки откройте его свойства (Alt+Enter), затемНастройка списка. - 🔹 Если включён флажок «Произвольный запрос», текст будет в поле запроса. Если флажка нет, список строится по основной таблице без отдельного текста.
Консоль запросов
Скопированный текст удобно запускать в консоли запросов — внешней обработке, которую используют почти все разработчики. Она позволяет задать параметры, выполнить запрос, посмотреть содержимое каждой временной таблицы и время выполнения. Запускайте её в копии базы, если запрос тяжёлый.
Отладчик: запрос, параметры и результат в момент выполнения
Отладчик показывает то, чего нет в конфигураторе: итоговый текст после всех подстановок и значения параметров.
Подготовка
- В конфигураторе откройте модуль, где выполняется запрос.
- Поставьте точку останова на строку с
Запрос.Выполнить()клавишейF9. - Запустите отладку
F5(«Начать отладку»). Откроется 1С:Предприятие, подключённое к отладчику. - Выполните в программе действие, которое запускает этот код: сформируйте отчёт, проведите документ.
В клиент-серверной базе сервер 1С должен быть запущен с разрешённой отладкой: агент сервера стартует с ключом -debug. Включение ключа требует перезапуска службы — перезапуск обрывает сеансы всех пользователей, делайте это вне рабочего времени и только на тестовом сервере.
Что вычислять в окне выражения
Когда выполнение остановилось, откройте Отладка → Вычислить выражение (Shift+F9) и введите:
- 📝
Запрос.Текст— полный текст запроса. Длинное значение можно открыть в отдельном окне просмотра и скопировать оттуда целиком. - 🔑
Запрос.Параметры— структура параметров: видно, с какой датой, организацией или складом выполняется запрос. - 📊
Запрос.Выполнить().Выгрузить()— результат в виде таблицы значений. Для пакетного запроса —Запрос.ВыполнитьПакет(), массив результатов по каждому запросу пакета.
Вычисление Запрос.Выполнить() в отладчике выполняет запрос повторно. Тяжёлый запрос к рабочей базе снова нагрузит сервер.
Итоговый запрос отчёта на СКД
В схеме компоновки хранится «шаблон» запроса. Перед выполнением компоновщик убирает неиспользуемые поля, добавляет отборы пользователя и подставляет параметры. Итоговый текст живёт в макете компоновки.
Найдите в модуле отчёта (или в общих модулях, которые его формируют) строку с КомпоновщикМакета.Выполнить, остановитесь сразу после неё и вычислите:
МакетКомпоновки.НаборыДанных[0].Запрос
Имя переменной в вашем коде может быть другим — смотрите, чему присваивается результат Выполнить. Этот приём объясняет частую загадку: «в схеме условие есть, а отчёт его не учитывает» — в итоговом запросе видно, какие отборы реально попали в текст.
Вывод текста запроса из кода
Когда отладчик не подключить — сбой бывает раз в день или только у одного пользователя на рабочем сервере, — текст выводят программно. Добавляйте такой код в копию конфигурации или в расширение и убирайте после диагностики.
Сообщение пользователю с текстом и параметрами:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Запрос.Текст;
Сообщение.Сообщить();
Для Каждого Параметр Из Запрос.Параметры Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Параметр.Ключ + " = " + Строка(Параметр.Значение);
Сообщение.Сообщить();
КонецЦикла;
Запись в журнал регистрации — удобно для фоновых заданий, где сообщения никто не увидит:
ЗаписьЖурналаРегистрации("Отладка.ТекстЗапроса",
УровеньЖурналаРегистрации.Информация, , , Запрос.Текст);
Сохранение в файл (на сервере файл появится в каталоге временных файлов сервера):
Текст = Новый ТекстовыйДокумент;
Текст.УстановитьТекст(Запрос.Текст);
Текст.Записать(КаталогВременныхФайлов() + "query.txt");
Итоговый запрос отчёта на СКД можно получить без отладчика — собрать макет и пройти по его наборам данных:
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Схема.НастройкиПоУмолчанию);
Для Каждого Набор Из Макет.НаборыДанных Цикл
Если ТипЗнч(Набор) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Набор.Запрос;
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
Код выполняется в модуле объекта отчёта, на сервере. Вместо настроек по умолчанию можно передать текущие настройки пользователя: КомпоновщикНастроек.ПолучитьНастройки().
Журнал регистрации: что он покажет вместо текста
Журнал регистрации не хранит тексты запросов. В нём записаны события: вход и выход пользователей, запись и удаление объектов, ошибки, проведение документов, а также то, что разработчик пишет туда сам через ЗаписьЖурналаРегистрации.
Где открыть:
- 🖥 В конфигураторе:
Администрирование → Журнал регистрации. - 🧭 В 1С:Предприятии: главное меню,
Функции для технического специалиста, веткаСтандартные → Журнал регистрации. Если этого пункта нет в меню, включите флажок «Режим технического специалиста» вСервис и настройки → Параметры.
Чем он полезен в поиске запроса:
- Отфильтруйте события по пользователю и интервалу, когда «завис» отчёт или упала ошибка.
- Найдите событие с ошибкой: в комментарии часто есть текст ошибки СУБД и имя модуля со строкой.
- По имени модуля откройте код в конфигураторе — там и будет нужный запрос.
Если в коде добавлена запись из предыдущего раздела, текст запроса появится прямо в комментарии события «Отладка.ТекстЗапроса».
Технологический журнал: запросы 1С и SQL на сервере
Технологический журнал — штатный механизм платформы для администратора. Он пишет события сервера и клиента в текстовые файлы, включая тексты запросов и их длительность. Включается файлом logcfg.xml.
Как включить
- Создайте файл
logcfg.xmlв каталогеconfплатформы, напримерC:\Program Files\1cv8\conf\. На сервере кладите его на тот компьютер, где работают рабочие процессы. - Заполните его настройками (пример ниже) и сохраните в кодировке UTF-8.
- Платформа перечитывает файл примерно раз в минуту, перезапуск не нужен.
- Воспроизведите проблему, затем удалите файл или закомментируйте секцию
log.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\techlog" history="2">
<event>
<eq property="name" value="SDBL"/>
</event>
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<event>
<eq property="name" value="DBPOSTGRS"/>
</event>
<property name="all"/>
</log>
</config>
Где искать текст
- 📂 Логи лягут в
D:\techlogв подкаталоги по процессам, напримерrphost_4512, файлы по часам26100714.log. - 🔤 В событиях
SDBLсвойствоSdblсодержит запрос на языке 1С во внутреннем представлении. - 🗄 В
DBMSSQL(MS SQL) иDBPOSTGRS(PostgreSQL) свойствоSql— готовый SQL-текст, аContextпоказывает модуль и строку кода, откуда пришёл запрос. - 💾 Для файловой базы событие называется
DBV8DBENG.
С фильтром all журнал за час может вырасти на гигабайты. Указывайте отдельный диск, держите history маленьким и сужайте сбор: условие <eq property="p:processName" value="имя_базы"/> внутри event оставит только одну базу, а <ge property="duration" value="..."/> — только долгие запросы.
Как связать SQL с объектами 1С
В SQL вместо «РеализацияТоваровУслуг» стоит _Document123. Расшифровать имена поможет функция платформы, выполненная на сервере:
Объекты = Новый Массив;
Объекты.Добавить("Документ.РеализацияТоваровУслуг");
Структура = ПолучитьСтруктуруХраненияБазыДанных(Объекты, Истина);
Для Каждого СтрокаТаблицы Из Структура Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрокаТаблицы.Метаданные + " — " + СтрокаТаблицы.ИмяТаблицыХранения;
Сообщение.Сообщить();
КонецЦикла;
Второй параметр Истина возвращает имена так, как они названы в СУБД. Поле Поля каждой строки расшифровывает колонки _Fld....
Внешние инструменты для мониторинга SQL-запросов
Если доступ есть только к серверу СУБД, SQL-запросы 1С ловят её собственными средствами.
| СУБД | Инструмент | Что настроить |
|---|---|---|
| MS SQL Server | Extended Events | Сессия с событиями rpc_completed и sql_batch_completed, фильтр по базе и длительности. 1С отправляет запросы через sp_executesql, поэтому главное событие — rpc_completed |
| MS SQL Server | SQL Server Profiler | Шаблон трассировки с теми же событиями. Сам Microsoft считает Profiler устаревшим, на нагруженном сервере он заметно тормозит работу |
| PostgreSQL | Журнал сервера | log_min_duration_statement = 1000 в postgresql.conf — запись всех запросов дольше 1 секунды; применить: SELECT pg_reload_conf(); |
| PostgreSQL | pg_stat_statements | Статистика по запросам: число вызовов, суммарное время. Нужна строка в shared_preload_libraries и перезапуск СУБД |
Перезапуск PostgreSQL для подключения pg_stat_statements обрывает все сеансы 1С, планируйте его на нерабочее время.
Для постоянного мониторинга используют специализированные системы: «1С:Центр управления производительностью» из комплекта «1С:КИП» и сторонние сервисы анализа техжурнала. Они собирают те же события DBMSSQL, группируют одинаковые запросы и показывают, какой из них занимает больше всего времени.
Веб-клиент, тонкий клиент и мобильное приложение
Запросы в 1С 8.3 всегда выполняются на сервере, поэтому тип клиента не меняет сам запрос. Меняется только то, как подключить отладчик.
- 🌐 Веб-клиент. Код сервера отлаживается так же, как для тонкого клиента
: точка останова в серверной процедуре, отладка сервера. Для отладки клиентского кода веб-клиент запускают с параметром
DebuggerURLв адресе базы и подключают его в конфигураторе черезОтладка → Подключение. - 💻 Тонкий клиент в клиент-серверной базе. Отлаживается сервер 1С с ключом
-debug, техжурнал пишется на сервере рабочих процессов. - 📱 Мобильное приложение на мобильной платформе. В автономном режиме запросы выполняются к локальной базе на устройстве. Техжурнала там нет; для отладки мобильная платформа подключается к серверу отладки по HTTP, а текст удобнее выводить из кода сообщением.
- 📲 Мобильный клиент к обычной базе. Работает как тонкий клиент: запросы на сервере, смотреть их тем же техжурналом.
Частые промахи и вопросы
Что чаще всего мешает увидеть нужный запрос:
- ❌ Смотрят текст в схеме СКД и удивляются, что отчёт выдаёт другое: выполняется итоговый запрос из макета, а не шаблон из схемы.
- ❌ Ищут SQL-текст в журнале регистрации — его там нет, это задача техжурнала.
- ❌ Оставляют
logcfg.xmlсallна рабочем сервере, и через сутки заканчивается место на диске. - ❌ Правят запрос типового отчёта прямо в конфигурации на поддержке вместо копии или расширения.