Запуск запросов в 1С: консоль, конфигуратор и СКД
Содержание
Запрос в 1С запускают в одном из четырёх мест: в консоли запросов (внешняя обработка, самый быстрый путь без программирования), в конфигураторе через конструктор запроса и отладчик, в отчёте на системе компоновки данных или в собственной внешней обработке. Текст пишется на встроенном языке запросов: ВЫБРАТЬ … ИЗ … ГДЕ ….
Важно сразу снять тревогу: запрос только читает данные и ничего в базе не меняет. Он не создаёт документов, не делает проводок и не требует резервной копии. Поэтому экспериментировать с запросами можно и в рабочей базе — максимум, что грозит, это долгое выполнение тяжёлого запроса.
Ниже разберём каждый способ: когда он удобнее, какими путями меню открывается и как посмотреть результат. Если нужно выбрать быстро:
| Способ | Когда удобен | Нужно программировать |
|---|---|---|
| Консоль запросов | Разовая проверка данных, отладка отбора | Нет |
| Конфигуратор | Пишете код, нужен конструктор и отладчик | Да |
| Отчёт на СКД | Нужны итоги, группировки, выгрузка для людей | Почти нет |
| Своя внешняя обработка | Запрос запускают регулярно, нужен интерфейс | Да |
Консоль запросов: запуск без программирования
Консоль запросов — это внешняя обработка (файл с расширением .epf). Она даёт поле для текста запроса, кнопку конструктора и таблицу результата. Программировать ничего не нужно.
Порядок такой:
- В режиме 1С:Предприятие откройте
Файл → Открытьи выберите файл консоли (КонсольЗапросов.epf). - В окне консоли впишите текст запроса или нажмите Конструктор запроса, чтобы собрать его мышью из дерева метаданных.
- Если в запросе есть параметры (период, организация), заполните их на отдельной вкладке.
- Нажмите Выполнить — результат появится в нижней таблице.
Консоль входит в типовую поставку многих конфигураций и распространяется как стандартная обработка. Если в вашей базе её нет, файл берут у администратора или из стандартного комплекта обработок и открывают как обычную внешнюю обработку .
Чтобы пункт Файл → Открыть сработал для .epf, у пользователя должно быть право «Интерактивное открытие внешних отчётов и обработок». Администратор может его отключить из соображений безопасности — тогда консоль откроет только пользователь с полными правами.
Консоль удобна, когда нужно быстро проверить гипотезу: «а что лежит в этой таблице», «сходится ли остаток», «почему документ не попадает в отчёт». Даже простейший запрос уже что-то показывает:
ВЫБРАТЬ
Номенклатура.Наименование,
Номенклатура.Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ПометкаУдаления
Этот запрос вернёт список всех действующих позиций номенклатуры. Дальше его наращивают: добавляют отборы в ГДЕ, группировки, соединения с другими таблицами.
Как собрать и запустить запрос в конфигураторе
В конфигураторе запрос не запускается «кнопкой» — он выполняется как часть кода модуля. Зато здесь живёт главный инструмент — конструктор запроса, который собирает текст визуально.
Чтобы вызвать конструктор:
- Откройте любой модуль (например, модуль обработки) и напишите заготовку:
Запрос = Новый Запрос;. - Поставьте курсор внутри будущего текста запроса, щёлкните правой кнопкой и выберите Конструктор запроса (он же доступен в меню
Текст). - Перетащите нужные таблицы и поля, задайте условия и группировки — конструктор вставит готовый текст в код.
Чтобы увидеть результат в конфигураторе, запрос выполняют под отладчиком:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " — " + Выборка.Артикул);
КонецЦикла;
Поставьте точку останова (клавиша F9) на строке с Результат и запустите отладку (F5). Когда выполнение остановится, посмотрите содержимое через Табло или команду Вычислить выражение (Shift+F9): наберите Результат.Выгрузить() — и платформа покажет результат таблицей.
У конструктора есть вариант Конструктор запроса с обработкой результата — он собирает не только текст запроса, но и готовый цикл обхода выборки. Это экономит время, когда вы только осваиваете язык: платформа сама пишет каркас кода, а вы правите детали.
Конструктор запроса открывается и из консоли, и из конфигуратора, и из схемы компоновки данных. Выучив его один раз, вы собираете запросы одинаково везде.
Запрос через систему компоновки данных
Система компоновки данных (СКД) нужна, когда результат — это не просто таблица, а полноценный отчёт с группировками, итогами и оформлением. Запрос в СКД — основа набора данных.
Самый простой путь — внешний отчёт:
- В конфигураторе выберите
Файл → Новый → Внешний отчёт. - Добавьте Основную схему компоновки данных.
- На вкладке Наборы данных добавьте набор типа «Запрос» и соберите текст в конструкторе (кнопка Конструктор запроса там же).
- На вкладке Настройки вынесите нужные поля в структуру отчёта (строки, колонки, показатели).
- Сохраните отчёт и откройте его в режиме 1С:Предприятие через
Файл → Открыть, затем нажмите Сформировать.
Для разовой проверки запроса удобна консоль системы компоновки данных — отдельная внешняя обработка, которая позволяет вставить готовую схему и сразу получить результат, не создавая отчёт целиком.
Отличие от обычной консоли запросов: СКД умеет сама строить итоги, расшифровки и условное оформление. Если нужен «отчёт для человека», а не сырая таблица, выбирайте СКД.
Полезная возможность СКД — расшифровка: двойной щелчок по строке отчёта разворачивает её до исходных документов или детальных записей. В обычной консоли такого нет, и за это СКД особенно ценят, когда отчёт отдают пользователю: он сам «проваливается» от итоговой суммы к документам, которые её сформировали.
Собственная внешняя обработка для запроса
Когда запрос нужно запускать регулярно и с удобным интерфейсом, пишут свою внешнюю обработку. Это середина между консолью (быстро, но каждый раз руками) и доработкой конфигурации (надёжно, но требует обновления).
- В конфигураторе:
Файл → Новый → Внешняя обработка. - Добавьте форму, разместите на ней таблицу значений и кнопку.
- В обработчике кнопки постройте и выполните запрос, а результат выгрузите на форму:
&НаСервере
Процедура ВыполнитьЗапросНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование КАК Контрагент,
| Контрагенты.ИНН КАК ИНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ПометкаУдаления";
РезультатТаблица.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры
Ключевая деталь, из-за которой у новичков запрос «не работает
»: в клиент-серверной базе запрос выполняется на сервере, а не на клиенте. Поэтому код с Новый Запрос помещают в серверную процедуру (директива &НаСервере) или в серверный общий модуль. В тонком клиенте прямой вызов запроса недоступен.
Если обработка нужна только вам и только сейчас — не усложняйте, хватит консоли. Своя обработка оправдана, когда запросом пользуется несколько человек или он встроен в регламент.
Синтаксис запроса и как его ускорить
Язык запросов 1С похож на SQL, но с русскими ключевыми словами. Базовая структура:
ВЫБРАТЬ — перечень полей
ИЗ — источник (таблица или их соединение)
ГДЕ — условия отбора
СГРУППИРОВАТЬ ПО — группировка
ИМЕЮЩИЕ — отбор по агрегатам
УПОРЯДОЧИТЬ ПО — сортировка
ИТОГИ ПО — итоги по уровням
Несколько запросов объединяют в пакет, разделяя точкой с запятой. Промежуточный результат кладут во временную таблицу через ПОМЕСТИТЬ.
Данные из разных таблиц соединяют. Чаще всего нужны два вида соединения:
ЛЕВОЕ СОЕДИНЕНИЕ— берём все строки левой таблицы, а из правой подставляем совпадения (если совпадения нет — будетNULL). Так к документам подтягивают, например, реквизиты контрагента.ВНУТРЕННЕЕ СОЕДИНЕНИЕ— остаются только строки, для которых совпадение есть в обеих таблицах.
Значение NULL (нет данных) заменяют функцией ЕСТЬNULL(Поле, 0) — иначе в арифметике и сравнениях появятся пустые результаты. Условную подстановку делают через конструкцию ВЫБОР КОГДА Условие ТОГДА … ИНАЧЕ … КОНЕЦ. Результаты нескольких запросов складывают через ОБЪЕДИНИТЬ ВСЕ (без удаления дублей) или ОБЪЕДИНИТЬ (с удалением).
Остатки и обороты не хранятся готовыми — их считает виртуальная таблица регистра. Пример корректного обращения: РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, Склад = &Склад) — период и отбор переданы в скобках, поэтому платформа посчитает остаток эффективно, а не прочитает регистр целиком.
Что ускоряет запрос на больших данных:
- 🔹 Параметры у виртуальных таблиц. Для остатков и оборотов (
Остатки,ОстаткиИОбороты) всегда задавайте период и отборы прямо в скобках виртуальной таблицы, а не вГДЕснаружи. - 🔹 Индексация временных таблиц. После
ПОМЕСТИТЬдобавляйтеИНДЕКСИРОВАТЬ ПОтем полям, по которым дальше идёт соединение. - 🔹 Соединение вместо подзапроса. Условие
В (ВЫБРАТЬ …)на большой таблице лучше заменить на соединение с временной таблицей. - 🔹 Без лишних полей. Не тащите
ВЫБРАТЬ *по смыслу — берите только нужные поля, иначе платформа читает лишние данные. - 🔹 Явные условия соединения. Соединение без условия даёт декартово произведение: строки умножаются, запрос «виснет».
Для отбора первых строк есть ПЕРВЫЕ N, для учёта прав доступа пользователя — ключевое слово РАЗРЕШЕННЫЕ.
Что делать с результатом: просмотр и выгрузка
Результат запроса можно посмотреть по-разному в зависимости от инструмента.
В консоли запросов результат сразу виден в таблице внизу окна. Строки выделяются мышью и копируются в буфер — оттуда их вставляют в Excel. У многих консолей есть кнопка сохранения результата в файл.
В СКД результат формируется в табличный документ. Его сохраняют через Файл → Сохранить как… в формат .xlsx (Excel) или .mxl (внутренний формат 1С, открывается в самой программе).
В коде результат получают двумя способами:
Результат.Выгрузить()— вернёт таблицу значений, по которой удобно идти в цикле или грузить на форму.Результат.Выбрать()— вернёт выборку для построчного обхода.
Если результат нужно отдать бухгалтеру или руководителю, стройте отчёт на СКД: из него выгрузка в Excel получается с готовыми итогами и оформлением, а не сырой таблицей.
Почему запрос не выполняется
Большинство ошибок при запуске запроса — типовые, и платформа подсказывает место сбоя. Сопоставьте симптом с причиной.
Частые вопросы
Нужны ли права администратора, чтобы выполнить запрос?
Может ли запрос испортить данные в базе?
Чем консоль запросов отличается от консоли компоновки данных?
Как перенести результат запроса в Excel?
Файл → Сохранить как… в формат .xlsx. В коде результат выгружают в таблицу значений и затем в табличный документ.Почему запрос работает в файловой базе, но падает в серверной?
Новый Запрос, вызванный в клиентском контексте, выдаст ошибку. Решение — выполнять запрос в серверной процедуре.