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