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

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

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

Как увидеть результат запроса в 1С: консоль запросов, отладка кода, выгрузка в таблицу значений, временные таблицы и типичные ошибки при проверке выборки данных.

Результат запроса в 1С — это данные, которые система вернула после выполнения текста запроса к базе. Увидеть его можно несколькими способами: через консоль запросов в режиме предприятия, через отладчик в конфигураторе, через выгрузку в таблицу значений или через встроенные отчёты. Выбор способа зависит от того, где находится запрос: в коде модуля, в отчёте на СКД или просто как ad-hoc проверка данных.

Чаще всего задача «увидеть результат запроса» возникает у разработчика, который отлаживает обработку, или у аналитика, проверяющего корректность выборки перед тем, как использовать её в отчёте. Важно понимать: объект «Запрос» в 1С сам по себе не показывает данные — нужно выполнить метод Выполнить() и затем либо обойти выборку, либо выгрузить результат в таблицу значений.

Ниже разобраны основные способы просмотра результата: от простого кода до консоли запросов и отладки, а также типичные ситуации, когда результат «пустой» или отличается от ожидаемого.

Как устроен результат запроса в 1С

Когда выполняется код Результат = Запрос.Выполнить();, платформа возвращает объект типа «РезультатЗапроса». Это не сами строки данных, а контейнер, из которого данные нужно извлечь одним из трёх способов: методом Выбрать() (получить выборку для построчного обхода), методом Выгрузить() (получить таблицу значений целиком) или проверкой Пустой() (узнать, есть ли вообще записи).

Такое разделение важно для производительности: выборка читает данные порциями и подходит для больших объёмов, а выгрузка помещает всё в память сразу. Для визуального просмотра удобнее таблица значений — её можно открыть в отладчике или вывести в табличный документ.

Способ 1. Консоль запросов в режиме предприятия

Консоль запросов — внешняя обработка, которая позволяет написать или вставить текст запроса и сразу увидеть результат в виде таблицы. Это основной инструмент, когда нужно проверить запрос без изменения кода конфигурации. Консоль входит в состав стандартных подсистем (например, «Инструменты разработчика») или распространяется как отдельная обработка.

Порядок работы типичен для любой консоли: откройте обработку через «Файл — Открыть», вставьте текст запроса, заполните параметры в списке параметров (консоль обычно определяет их автоматически по символу «&») и нажмите кнопку выполнения. Результат появится в табличном поле внизу окна.

Как выполнить запрос в консоли
  1. 1
    Откройте 1С в режиме предприятия под пользователем с правами на запуск внешних обработок.
  2. 2
    Запустите консоль запросов через Файл — Открыть или из подсистемы инструментов разработчика.
  3. 3
    Вставьте текст запроса в поле редактора.
  4. 4
    Заполните значения параметров в таблице параметров — проверьте типы (дата, ссылка, список).
  5. 5
    Нажмите «Выполнить» и изучите таблицу результата: количество строк, значения колонок.

Обратите внимание на тип параметра: если запрос ожидает список значений (например, для условия В (&СписокСкладов)), а передана одиночная ссылка, результат может оказаться пустым без всякой ошибки. Консоль позволяет явно указать тип «СписокЗначений» или «ТаблицаЗначений» для параметра — это частая причина «неправильного» результата.

Способ 2. Просмотр результата в коде и отладчике

Если запрос выполняется внутри модуля, результат виден через отладку в конфигураторе. Установите точку останова на строке после Запрос.Выполнить(), запустите отладку и, когда выполнение остановится, используйте команду «Вычислить выражение» (Shift+F9) для просмотра.

Для оперативной проверки удобно выгрузить результат в таблицу значений и посмотреть её содержимое:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Товар,

| Номенклатура.Код КАК Код

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

Результат = Запрос.Выполнить();

ТаблицаРезультата = Результат.Выгрузить();

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

Если таблица значений большая, не вычисляйте её целиком в отладчике на рабочей базе — просмотр может занять заметное время. Сначала проверьте Количество(), а затем обратитесь к первым строкам через индекс, например ТаблицаРезультата[0].
ПЗ
Практическое замечание

Вывод результата в табличный документ

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

Построитель = Новый ПостроительОтчета(ТекстЗапроса);

Построитель.Выполнить();

ТабДок = Новый ТабличныйДокумент;

Построитель.Вывести(ТабДок);

ТабДок.Показать("Результат запроса");

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

Способ 3. Запрос в отчёте на СКД

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

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

Работа с пакетом запросов и временными таблицами

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

МассивРезультатов = Запрос.ВыполнитьПакет();

// МассивРезультатов[0] — создание временной таблицы (без данных)

// МассивРезультатов[1] — итоговая выборка

Таблица = МассивРезультатов[1].Выгрузить();

Для отладки временных таблиц в консолях запросов обычно есть отдельный режим просмотра содержимого временной таблицы по её имени. В коде промежуточную таблицу можно проверить, временно заменив итоговый оператор на ВЫБРАТЬ * ИЗ ВременнаяТаблица.

Почему результат пустой или не совпадает с ожиданиями

Самая частая ситуация — запрос выполняется без ошибок, но возвращает ноль строк. Причины почти всегда в данных или параметрах, а не в платформе. Начните проверку с упрощения: уберите все условия ГДЕ и убедитесь, что таблица вообще содержит записи. Затем возвращайте условия по одному.

Отдельный класс проблем — разделение данных и права. Если запрос выполняется под пользователем с ограниченными правами (RLS), он увидит только разрешённые строки, тогда как администратор увидит всё. Также виртуальные таблицы регистров (Остатки, Обороты) чувствительны к параметрам периода: неверно заданная дата даёт пустой результат.

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

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

Количество строк
Норма

Результат.Пустой() = Ложь и число строк соответствует ожиданиям

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

Ноль строк при заведомо существующих данных

Параметры запроса
Норма

Типы параметров совпадают с типами полей в условиях

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

Дата передана строкой, список передан одиночным значением

Период виртуальной таблицы
Норма

Период задан явно и попадает в диапазон движений

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

Период не задан или выходит за пределы данных

Права доступа
Норма

Проверка под тем же пользователем, что и в рабочем режиме

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

Запрос проверен под администратором, а работает под ограниченной учётной записью

Типичные ошибки
01
Сравнение результата с ожиданием «на глаз» без проверки Количество() — легко пропустить пустую выборку.
02
Передача в параметр строки вместо ссылки: условие Ссылка = &Параметр молча не срабатывает.
03
Использование Выполнить() для пакетного запроса и попытка увидеть промежуточную временную таблицу — нужен ВыполнитьПакет().
04
Проверка запроса под полными правами, тогда как у рабочего пользователя действует RLS, — в эксплуатации результат оказывается другим.
05
Выгрузка огромной таблицы в память ради просмотра пары строк — вместо Выгрузить() достаточно обхода выборки с прерыванием.

Границы безопасной самостоятельной работы

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

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

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

Чем отличается Выбрать() от Выгрузить()?

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

Как увидеть результат запроса без конфигуратора?

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

Почему запрос в консоли возвращает данные, а в отчёте — нет?

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

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

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

Можно ли увидеть результат запроса в мобильном или веб-клиенте?

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

Что делать, если запрос выполняется очень долго и результат не дождаться?

Добавьте ограничение выборки (ПЕРВЫЕ 100) для проверки корректности результата, проверьте условия соединений и наличие индексов по полям отбора. Полный прогон тяжёлого запроса выполняйте в нерабочее время или на копии базы.

Итог

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

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