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