Запуск запросов в 1С: консоль, конфигуратор и СКД

· 9 мин

Содержание

Запрос в 1С запускают в одном из четырёх мест: в консоли запросов (внешняя обработка, самый быстрый путь без программирования), в конфигураторе через конструктор запроса и отладчик, в отчёте на системе компоновки данных или в собственной внешней обработке. Текст пишется на встроенном языке запросов: ВЫБРАТЬ … ИЗ … ГДЕ ….

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

Ниже разберём каждый способ: когда он удобнее, какими путями меню открывается и как посмотреть результат. Если нужно выбрать быстро:

СпособКогда удобенНужно программировать
Консоль запросовРазовая проверка данных, отладка отбораНет
КонфигураторПишете код, нужен конструктор и отладчикДа
Отчёт на СКДНужны итоги, группировки, выгрузка для людейПочти нет
Своя внешняя обработкаЗапрос запускают регулярно, нужен интерфейсДа

Консоль запросов: запуск без программирования

Консоль запросов — это внешняя обработка (файл с расширением .epf). Она даёт поле для текста запроса, кнопку конструктора и таблицу результата. Программировать ничего не нужно.

Порядок такой:

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

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

Чтобы пункт Файл → Открыть сработал для .epf, у пользователя должно быть право «Интерактивное открытие внешних отчётов и обработок». Администратор может его отключить из соображений безопасности — тогда консоль откроет только пользователь с полными правами.

Консоль удобна, когда нужно быстро проверить гипотезу: «а что лежит в этой таблице», «сходится ли остаток», «почему документ не попадает в отчёт». Даже простейший запрос уже что-то показывает:

ВЫБРАТЬ
    Номенклатура.Наименование,
    Номенклатура.Артикул
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    НЕ Номенклатура.ПометкаУдаления

Этот запрос вернёт список всех действующих позиций номенклатуры. Дальше его наращивают: добавляют отборы в ГДЕ, группировки, соединения с другими таблицами.

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

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

Чтобы вызвать конструктор:

  1. Откройте любой модуль (например, модуль обработки) и напишите заготовку: Запрос = Новый Запрос;.
  2. Поставьте курсор внутри будущего текста запроса, щёлкните правой кнопкой и выберите Конструктор запроса (он же доступен в меню Текст).
  3. Перетащите нужные таблицы и поля, задайте условия и группировки — конструктор вставит готовый текст в код.

Чтобы увидеть результат в конфигураторе, запрос выполняют под отладчиком:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |   Номенклатура.Наименование КАК Наименование,
    |   Номенклатура.Артикул КАК Артикул
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + " — " + Выборка.Артикул);
КонецЦикла;

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

У конструктора есть вариант Конструктор запроса с обработкой результата — он собирает не только текст запроса, но и готовый цикл обхода выборки. Это экономит время, когда вы только осваиваете язык: платформа сама пишет каркас кода, а вы правите детали.

Конструктор запроса открывается и из консоли, и из конфигуратора, и из схемы компоновки данных. Выучив его один раз, вы собираете запросы одинаково везде.

Запрос через систему компоновки данных

Система компоновки данных (СКД) нужна, когда результат — это не просто таблица, а полноценный отчёт с группировками, итогами и оформлением. Запрос в СКД — основа набора данных.

Самый простой путь — внешний отчёт:

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

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

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

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

Собственная внешняя обработка для запроса

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

  1. В конфигураторе: Файл → Новый → Внешняя обработка.
  2. Добавьте форму, разместите на ней таблицу значений и кнопку.
  3. В обработчике кнопки постройте и выполните запрос, а результат выгрузите на форму:
&НаСервере
Процедура ВыполнитьЗапросНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Контрагенты.Наименование КАК Контрагент,
        |   Контрагенты.ИНН КАК ИНН
        |ИЗ
        |   Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |   НЕ Контрагенты.ПометкаУдаления";
    РезультатТаблица.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры

Ключевая деталь, из-за которой у новичков запрос «не работает »: в клиент-серверной базе запрос выполняется на сервере, а не на клиенте. Поэтому код с Новый Запрос помещают в серверную процедуру (директива &НаСервере) или в серверный общий модуль. В тонком клиенте прямой вызов запроса недоступен.

Если обработка нужна только вам и только сейчас — не усложняйте, хватит консоли. Своя обработка оправдана, когда запросом пользуется несколько человек или он встроен в регламент.

Синтаксис запроса и как его ускорить

Язык запросов 1С похож на SQL, но с русскими ключевыми словами. Базовая структура:

ВЫБРАТЬ          — перечень полей
ИЗ               — источник (таблица или их соединение)
ГДЕ              — условия отбора
СГРУППИРОВАТЬ ПО — группировка
ИМЕЮЩИЕ          — отбор по агрегатам
УПОРЯДОЧИТЬ ПО   — сортировка
ИТОГИ ПО         — итоги по уровням

Несколько запросов объединяют в пакет, разделяя точкой с запятой. Промежуточный результат кладут во временную таблицу через ПОМЕСТИТЬ.

Данные из разных таблиц соединяют. Чаще всего нужны два вида соединения:

  • ЛЕВОЕ СОЕДИНЕНИЕ — берём все строки левой таблицы, а из правой подставляем совпадения (если совпадения нет — будет NULL). Так к документам подтягивают, например, реквизиты контрагента.
  • ВНУТРЕННЕЕ СОЕДИНЕНИЕ — остаются только строки, для которых совпадение есть в обеих таблицах.

Значение NULL (нет данных) заменяют функцией ЕСТЬNULL(Поле, 0) — иначе в арифметике и сравнениях появятся пустые результаты. Условную подстановку делают через конструкцию ВЫБОР КОГДА Условие ТОГДА … ИНАЧЕ … КОНЕЦ. Результаты нескольких запросов складывают через ОБЪЕДИНИТЬ ВСЕ (без удаления дублей) или ОБЪЕДИНИТЬ (с удалением).

Остатки и обороты не хранятся готовыми — их считает виртуальная таблица регистра. Пример корректного обращения: РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, Склад = &Склад) — период и отбор переданы в скобках, поэтому платформа посчитает остаток эффективно, а не прочитает регистр целиком.

Что ускоряет запрос на больших данных:

  • 🔹 Параметры у виртуальных таблиц. Для остатков и оборотов (Остатки, ОстаткиИОбороты) всегда задавайте период и отборы прямо в скобках виртуальной таблицы, а не в ГДЕ снаружи.
  • 🔹 Индексация временных таблиц. После ПОМЕСТИТЬ добавляйте ИНДЕКСИРОВАТЬ ПО тем полям, по которым дальше идёт соединение.
  • 🔹 Соединение вместо подзапроса. Условие В (ВЫБРАТЬ …) на большой таблице лучше заменить на соединение с временной таблицей.
  • 🔹 Без лишних полей. Не тащите ВЫБРАТЬ * по смыслу — берите только нужные поля, иначе платформа читает лишние данные.
  • 🔹 Явные условия соединения. Соединение без условия даёт декартово произведение: строки умножаются, запрос «виснет».

Для отбора первых строк есть ПЕРВЫЕ N, для учёта прав доступа пользователя — ключевое слово РАЗРЕШЕННЫЕ.

Перед запуском проверьте
Выполнено: 0 / 4

Что делать с результатом: просмотр и выгрузка

Результат запроса можно посмотреть по-разному в зависимости от инструмента.

В консоли запросов результат сразу виден в таблице внизу окна. Строки выделяются мышью и копируются в буфер — оттуда их вставляют в Excel. У многих консолей есть кнопка сохранения результата в файл.

В СКД результат формируется в табличный документ. Его сохраняют через Файл → Сохранить как… в формат .xlsx (Excel) или .mxl (внутренний формат 1С, открывается в самой программе).

В коде результат получают двумя способами:

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

Если результат нужно отдать бухгалтеру или руководителю, стройте отчёт на СКД: из него выгрузка в Excel получается с готовыми итогами и оформлением, а не сырой таблицей.

Почему запрос не выполняется

Большинство ошибок при запуске запроса — типовые, и платформа подсказывает место сбоя. Сопоставьте симптом с причиной.

Диагностика: выберите симптом

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

Нужны ли права администратора, чтобы выполнить запрос?
Чтобы открыть консоль как внешнюю обработку — да, нужно право на интерактивное открытие внешних обработок. Сам запрос при этом читает только те данные, к которым у пользователя есть доступ по его ролям.
Может ли запрос испортить данные в базе?
Нет. Язык запросов 1С умеет только читать. Записать, изменить или удалить данные запросом невозможно — для этого нужен отдельный код с объектами. Поэтому резервная копия перед запросом не требуется.
Чем консоль запросов отличается от консоли компоновки данных?
Консоль запросов возвращает сырую таблицу — удобно для быстрой проверки. Консоль (и отчёты) на СКД умеют группировки, итоги, расшифровки и оформление — это уже готовый отчёт.
Как перенести результат запроса в Excel?
Из консоли — выделить строки и скопировать в буфер либо сохранить в файл. Из отчёта на СКД — Файл → Сохранить как… в формат .xlsx. В коде результат выгружают в таблицу значений и затем в табличный документ.
Почему запрос работает в файловой базе, но падает в серверной?
В клиент-серверном варианте вычисления идут на сервере. Код с Новый Запрос, вызванный в клиентском контексте, выдаст ошибку. Решение — выполнять запрос в серверной процедуре.