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

Разработка и Конфигурация · 11 мин

Как посмотреть результат запроса в отладчике 1С

Как посмотреть результат запроса 1С в отладчике: точка останова после Выполнить(), окно Вычислить выражение, Табло и выгрузка в таблицу значений. Пошаговая инструкция.

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

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

Материал применим к конфигуратору 1С:Предприятие 8.3 в обычном и управляемом приложении. Предполагается, что у вас есть права на отладку и отладка на сервере разрешена администратором, если код выполняется в серверном контексте.

Подготовка: включение отладки и постановка точки останова

Откройте конфигуратор, перейдите в меню «Отладка» и убедитесь, что отладка разрешена. Для файловой базы достаточно запустить отладку клавишей F5 — конфигуратор сам откроет сеанс предприятия. Для клиент-серверного варианта проверьте, что на сервере 1С включён режим отладки (параметр запуска агента сервера с ключом -debug), иначе серверные процедуры останавливаться не будут.

Найдите в модуле строку, где выполняется запрос — обычно это РезультатЗапроса = Запрос.Выполнить(); или Выборка = Запрос.Выполнить().Выбрать();. Точку останова ставьте на строку, следующую за выполнением запроса: если поставить её на саму строку Выполнить(), в момент остановки запрос ещё не отработает и результат будет недоступен.

Установите точку останова клавишей F9 или кликом по левому полю редактора модуля. Запустите отладку (F5), выполните в предприятии действие, которое приводит к выполнению кода, и дождитесь остановки. Жёлтая стрелка на строке означает, что выполнение приостановлено и можно анализировать состояние переменных.

Быстрая проверка через «Вычислить выражение»

Самый быстрый способ — диалог «Вычислить выражение», который открывается комбинацией Shift+F9 или через меню «Отладка — Вычислить выражение». В поле «Выражение» введите имя переменной с результатом запроса и нажмите «Вычислить» (Enter). В таблице результата появится объект «РезультатЗапроса» со списком его свойств: «Пустой», «Колонки» и другие.

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

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

bsl
РезультатЗапроса.Выгрузить()
РезультатЗапроса.Пустой
РезультатЗапроса.Выбрать().Количество()
Запрос.Текст
Запрос.Параметры.Найти("Период")

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

Наиболее наглядный способ — выгрузить результат в таблицу значений и открыть её как табличный документ. В окне «Вычислить выражение» введите РезультатЗапроса.Выгрузить() и нажмите Enter. В списке результатов появится объект «ТаблицаЗначений».

Нажмите кнопку «Показать значение в отдельном окне» (F2 или кнопка с лупой в диалоге). Платформа откроет таблицу значений в виде привычной таблицы: строки, колонки с именами полей запроса, возможность прокрутки и просмотра значений каждой ячейки. Так можно увидеть реальные данные, которые вернул запрос, включая значения ссылочных полей, NULL и даты.

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

Порядок действий
  1. 1
    Поставьте точку останова на строку после Запрос.Выполнить()
  2. 2
    Запустите отладку (F5) и выполните действие в предприятии
  3. 3
    Дождитесь остановки и нажмите Shift+F9
  4. 4
    Введите РезультатЗапроса.Выгрузить() и нажмите Enter
  5. 5
    Нажмите F2, чтобы открыть таблицу значений
  6. 6
    Проверьте количество строк, имена колонок и значения в ячейках

Просмотр через «Табло» и локальные переменные

Окно «Табло» (Ctrl+Alt+W) работает постоянно во время отладки: в него можно заранее добавить выражения, и они будут пересчитываться на каждом шаге. Добавьте в табло выражение РезультатЗапроса.Выгрузить() — после прохождения строки выполнения запроса значение появится автоматически, без повторного вызова диалога.

Окно «Локальные переменные» (Ctrl+Alt+L) показывает все переменные текущей процедуры. Найдите переменную с результатом запроса, разверните её двойным кликом — увидите свойства объекта. Однако полноценно раскрыть табличную часть результата в дереве локальных переменных неудобно: для содержимого строк всё равно потребуется выгрузка через «Вычислить выражение».

Табло удобнее, когда запрос выполняется в цикле или процедура вызывается многократно: вы видите, как меняется результат от итерации к итерации, не открывая диалог заново. Для разовой проверки достаточно Shift+F9.

Сравнение способов просмотра

Вычислить выражение (Shift+F9)

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

Табло (Ctrl+Alt+W)

Подходит для многократных остановок и циклов: выражения пересчитываются автоматически на каждом шаге.

Локальные переменные (Ctrl+Alt+L)

Подходит для обзора всех переменных процедуры, но неудобен для просмотра содержимого строк результата запроса.

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

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

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

Для пакетных запросов с временными таблицами результат каждого запроса пакета доступен через РезультатыЗапроса = Запрос.ВыполнитьПакет() — это массив результатов. Вычислите РезультатыЗапроса[0].Выгрузить(), РезультатыЗапроса[1].Выгрузить() и так далее, чтобы проверить содержимое каждой временной таблицы по отдельности.

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

Первая распространённая ошибка — точка останова стоит на строке Выполнить(), а не после неё. В момент остановки запрос ещё не выполнен, переменная результата не инициализирована, и разработчик делает неверный вывод о пустой выборке. Всегда проверяйте, что жёлтая стрелка стоит на следующей строке.

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

Третья ошибка — отладка не в том сеансе. Если процедура выполняется в фоновом задании или на сервере, а отладка настроена только на клиентский сеанс, точка останова не сработает. Проверьте список подключённых предметов отладки через «Отладка — Подключение» и включите автоматическое подключение фоновых заданий.

Типичные ошибки
01
Точка останова на строке Выполнить() — результат ещё не получен, переменная пуста, вывод о проблеме ложный
02
Вызов Выборка.Следующий() в окне вычисления — курсор сдвигается, код после продолжения пропускает строку
03
Отладка без подключения серверных сеансов и фоновых заданий — точка останова не срабатывает
04
Сравнение с ожиданиями без проверки параметров — запрос корректен, но параметр содержит другое значение

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

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

Если отладка по какой-то причине недоступна (нет прав, запрещена на сервере, код выполняется в регламентном задании), используйте альтернативы. Консоль запросов позволяет выполнить тот же текст с теми же параметрами интерактивно. Запись в журнал регистрации через ЗаписьЖурналаРегистрации помогает фиксировать количество строк и значения параметров в фоновых сценариях. Внешняя обработка-консоль кода подходит для проверки фрагментов на копии базы.

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

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

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

Количество строк в выгруженной таблице
Норма

Совпадает с ожидаемым по логике задачи

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

Ноль строк или значительно больше ожидаемого — проверяйте условия и соединения

Имена колонок
Норма

Совпадают с именами, к которым обращается код

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

Поле1, Поле2 — не заданы псевдонимы, обращение по имени вернёт ошибку

Значения ссылочных полей
Норма

Заполнены конкретными ссылками

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

NULL или пустые ссылки — проблема в соединении или параметрах отбора

Итог

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

Ставьте точку останова после строки Выполнить(), открывайте «Вычислить выражение» (Shift+F9) и выгружайте результат через РезультатЗапроса.Выгрузить() — таблица значений покажет реальные данные. Проверяйте текст запроса и параметры, избегайте вызовов, меняющих состояние выборки, и помните про подключение серверных сеансов и фоновых заданий.

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

Почему в окне «Вычислить выражение» результат запроса отображается просто как «РезультатЗапроса» без данных?

РезультатЗапроса — это объект-обёртка, а не сами данные. Чтобы увидеть строки, вычислите выражение РезультатЗапроса.Выгрузить() и откройте полученную таблицу значений кнопкой F2.

Точка останова в серверной процедуре не срабатывает. Что проверить?

Убедитесь, что сервер 1С запущен с ключом отладки (-debug), а в конфигураторе через «Отладка — Подключение» включено автоматическое подключение нужных типов предметов отладки: сервер, фоновые задания, внешние соединения.

Как посмотреть содержимое временной таблицы в пакетном запросе?

Используйте Запрос.ВыполнитьПакет() — он возвращает массив результатов. В окне «Вычислить выражение» обратитесь по индексу: Результаты[0].Выгрузить(), Результаты[1].Выгрузить() — каждый элемент соответствует одному запросу пакета.

Можно ли изменить значение переменной прямо в отладчике?

Да, в окне «Вычислить выражение» или «Табло» для простых типов доступно редактирование значения. Это удобно, чтобы проверить поведение кода с другим параметром, не перезапуская сеанс. Объекты вроде результата запроса целиком заменить нельзя — только пересоздать через вычисление.

Отладчик показывает, что выборка пустая, но в консоли запросов данные есть. В чём причина?

Чаще всего различаются параметры: в коде параметр получает другое значение (например, границу вместо даты или пустую ссылку). Вычислите Запрос.Параметры в отладчике и сравните каждое значение с тем, что задаёте в консоли вручную.

Безопасно ли вычислять выражения в отладчике на рабочей базе?

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