Конструктор запросов в 1С:Предприятие — это мощный инструмент, который позволяет извлекать и обрабатывать данные из базы без глубоких знаний языка программирования. С его помощью можно создавать отчёты, анализировать информацию, автоматизировать рутинные операции и даже интегрировать данные из разных источников. Однако многие пользователи избегают работы с конструктором, считая его слишком сложным или непонятным.
На самом деле, освоить основы можно за несколько часов, а дальнейшее погружение откроет возможности для решения 90% повседневных задач в 1С. В этой статье мы разберёмся, как работать с конструктором запросов с нуля: от открытия инструмента до написания сложных многотабличных запросов. Вы узнаете про синтаксис, типичные ошибки, оптимизацию и даже несколько «фишек», которые облегчат работу с большими объёмами данных.
Что такое конструктор запросов в 1С и зачем он нужен
Конструктор запросов — это визуальный редактор, который помогает формировать запросы к базе данных 1С на языке, похожем на SQL. Он позволяет:
- 📊 Извлекать данные из справочников, документов, регистров и других объектов конфигурации.
- 🔍 Фильтровать информацию по заданным критериям (например, «показать товары с остатком меньше 10 штук»).
- 📈 Агрегировать данные (суммы, средние значения, количество записей).
- 🔄 Объединять таблицы для комплексного анализа (например, связать продажи с остатками на складе).
- 📄 Экспортировать результаты в отчёты, табличные документы или внешние файлы.
Главное преимущество конструктора — не нужно писать код вручную. Достаточно выбрать нужные таблицы, поля и условия через графический интерфейс, а система сгенерирует корректный запрос. Это экономит время и reduces риск синтаксических ошибок. Однако для сложных задач иногда приходится редактировать запрос вручную, поэтому знание основ синтаксиса всё же пригодится.
Конструктор запросов используется в:
- 📋 Отчётах (например, «Анализ продаж», «Остатки товаров»).
- 🖥️ Обработках для массовой обработки данных.
- 🔧 Конфигурировании (при создании новых отчётов или доработке существующих).
- 📊 Внешних обработках для интеграции с другими системами.
Как открыть конструктор запросов: 3 способа
В зависимости от задачи и версии 1С (8.3, 8.2 или более ранние), конструктор запросов можно открыть несколькими способами. Рассмотрим самые универсальные:
1. Через меню «Все функции»
Это самый надёжный способ, который работает почти во всех конфигурациях:
- Откройте 1С:Предприятие в режиме
1С:Предприятие(не путать с конфигуратором!). - Нажмите
Файл → Открыть → Все функции(илиCtrl+Shift+F). - В списке найдите
Конструктор запросаи запустите его.
2. Из отчёта или обработки
Если вы работаете с готовым отчётом (например, «Ведомость по товарам»), часто есть возможность редактировать его запрос:
- Откройте нужный отчёт (
Отчёты → Стандартные отчёты). - Нажмите кнопку
Настройки(илиЕщё → Изменить вариант). - Перейдите на вкладку
Запроси кликнитеКонструктор запроса.
3. В конфигураторе
Для разработчиков и администраторов:
- Откройте 1С:Предприятие в режиме
Конфигуратор. - Выберите объект (отчёт, обработку) и откройте его модуль.
- В коде найдите процедуру с запросом и нажмите правой кнопкой →
Конструктор запроса.
Если в меню нет пункта «Все функции», попробуйте включить его в настройках интерфейса: Сервис → Параметры → закладка «Интерфейс» → галочка «Показывать все функции».
Интерфейс конструктора: разбор основных элементов
После открытия конструктора вы увидите окно с несколькими вкладками и панелями. Разберёмся, за что отвечает каждый элемент:
| Элемент интерфейса | Назначение |
|---|---|
| Панель «Таблицы» | Список всех доступных таблиц базы данных (справочники, документы, регистры и т.д.). Здесь вы выбираете источники данных для запроса. |
| Панель «Поля» | Перечень полей (колонок), которые будут выведены в результате запроса. Можно добавлять, удалять и переименовывать поля. |
| Панель «Условия» | Фильтры для отбора данных (например, «Дата больше 01.01.2026» или «Сумма > 1000»). |
| Панель «Группировка» | Настройки для агрегации данных (суммы, средние значения, количество записей). |
| Окно «Текст запроса» | Автоматически генерируемый код запроса на языке 1С. Можно редактировать вручную. |
| Кнопка «Выполнить» | Запускает запрос и показывает результат в отдельном окне. |
Самые используемые вкладки — Таблицы, Поля и Условия. Для простых запросов их достаточно. Для сложных аналитических задач потребуется вкладка Группировка и ручное редактирование текста запроса.
Что делать, если в конструкторе не отображаются нужные таблицы?
Если в списке таблиц нет нужного справочника или документа, проверьте:
1. Права доступа: у вашего пользователя может не хватить прав на чтение данных.
2. Режим работы: некоторые таблицы доступны только в режиме 1С:Предприятие (не в конфигураторе).
3. Конфигурацию: если таблица создана в другой конфигурации (например, в 1С:Бухгалтерии, а вы работаете в 1С:УТ), её не будет в списке.
4. Обновление: иногда помогает перезапуск 1С или обновление конфигурации.
Пошаговая инструкция: как создать простой запрос
Разберём создание запроса на примере задачи: «Получить список товаров с остатками на складе и ценой».
Шаг 1. Выбор таблиц
В панели Таблицы найдите:
- 📄
Справочник.Номенклатура(здесь хранятся товары). - 📦
РегистрНакопления.ОстаткиТоваров(здесь данные об остатках).
Добавьте их в запрос двойным кликом или кнопкой Добавить.
Шаг 2. Выбор полей
В панели Поля отметьте нужные колонки:
- Из
Номенклатура:Наименование,Артикул,Цена. - Из
ОстаткиТоваров:Количество.
Если нужно переименовать поле (например, Наименование → Товар), кликните правой кнопкой на поле и выберите Переименовать.
Шаг 3. Связь между таблицами
Конструктор автоматически предложит связать таблицы по ключевым полям. В нашем случае это:
Номенклатура.Ссылка = ОстаткиТоваров.Номенклатура.
Если связь не установилась, добавьте её вручную на вкладке Связи.
Шаг 4. Условия отбора
Добавим фильтр, чтобы показать только товары с остатком больше 0:
- В панели
Условиявыберите полеОстаткиТоваров.Количество. - Установите условие:
> 0.
Шаг 5. Выполнение запроса
Нажмите Выполнить (или F5). Результат отобразится в отдельном окне. Если нужно сохранить запрос для дальнейшего использования, скопируйте текст из окна Текст запроса.
Добавлены все нужные таблицы|Поля переименованы для удобства|Установлены связи между таблицами|Заданы корректные условия фильтрации|Проверен синтаксис в окне «Текст запроса»
-->
Сложные запросы: группировка, объединение таблиц и подзапросы
Когда базовых возможностей конструктора недостаточно, приходится использовать расширенные функции. Рассмотрим три самых востребованных сценария:
1. Группировка данных (итоги по группам)
Допустим, нужно получить суммарные продажи по каждому менеджеру. Для этого:
- Добавьте таблицы
Документ.РеализацияТоваровУслугиСправочник.Пользователи. - В панели
ПолявыберитеПользователи.НаименованиеиРеализацияТоваровУслуг.СуммаДокумента. - Перейдите на вкладку
Группировкаи добавьте полеПользователи.Наименование. - Для поля
СуммаДокументавыберите агрегатную функциюСумма.
В результате вы получите таблицу с двумя колонками: Менеджер и Сумма продаж.
2. Объединение таблиц (JOIN)
Иногда данные разбросаны по нескольким таблицам. Например, чтобы получить остатки товаров с учётом резервов, нужно объединить:
РегистрНакопления.ОстаткиТоваров(фактические остатки).РегистрНакопления.РезервыТоваров(зарезервированные товары).
В конструкторе:
- Добавьте обе таблицы.
- Свяжите их по полю
Номенклатура. - В поле
Количестводобавьте выражение:ОстаткиТоваров.Количество - РезервыТоваров.Количество.
3. Подзапросы (вложенные запросы)
Подзапросы позволяют использовать результат одного запроса как условие для другого. Например, нужно найти товары, которые не продавались последнюю неделю:
ВЫБРАТЬ
Номенклатура.Наименование КАК Товар
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ НЕ
Номенклатура.Ссылка В (
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслуг.Номенклатура
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата > &НачалоНедели
)
Такой запрос нельзя создать полностью в визуальном конструкторе — придётся редактировать текст вручную.
Подзапросы значительно замедляют выполнение, если таблицы содержат миллионы записей. Для больших баз лучше использовать временные таблицы или оптимизировать индексы.
Типичные ошибки и как их избежать
Даже опытные пользователи иногда сталкиваются с проблемами при работе с конструктором запросов. Вот самые распространённые ошибки и способы их решения:
⚠️ Внимание: Если запрос выполняется слишком долго (более 30 секунд), скорее всего, вы забыли добавить условие отбора по дате или не оптимизировали связи между таблицами. Прервите выполнение (Esc) и проверьте логику запроса.
| Ошибка | Причина | Решение |
|---|---|---|
Поле не найдено |
Опечатка в названии поля или таблицы. | Проверьте регистр и точное название в метаданных (Ctrl+Shift+M). |
Недопустимое использование агрегатной функции |
Пытаетесь применить СУММА или МАКСИМУМ к полю, которое не добавлено в группировку. |
Добавьте поле в группировку или уберите агрегатную функцию. |
Слишком много строк в результате |
Отсутствует фильтр по дате или другим критериям. | Добавьте условие, например: Дата > &НачалоМесяца. |
Ошибка связи между таблицами |
Некорректное условие соединения (WHERE). |
Проверьте, что поля для связи имеют одинаковый тип (например, обе колонки — Ссылка). |
Запрос возвращает пустой результат |
Слишком жёсткие условия фильтрации или ошибка в логике. | Упростите запрос, убирая условия по одному, чтобы найти проблему. |
Ещё одна частая проблема — неверные типы данных. Например, если вы сравниваете поле типа Дата со строкой ('01.01.2026' вместо &ДатаНачала), запрос либо не выполнится, либо вернёт некорректные данные. Всегда используйте параметры (&Параметр) для динамических значений.
Как ускорить медленный запрос?
1. Добавьте индексы: Убедитесь, что поля, используемые в условиях (WHERE), проиндексированы.
2. Ограничьте данные: Используйте отбор по дате или другим критериям, чтобы сократить объём обрабатываемых данных.
3. Разбейте на части: Если запрос сложный, выполните его в несколько этапов с использованием временных таблиц.
4. Проверьте связи: Избегайте соединений типа ПОЛНОЕ СОЕДИНЕНИЕ (FULL JOIN), если они не необходимы.
Оптимизация запросов: советы для больших баз данных
Если ваша база 1С содержит сотни тысяч записей, неоптимизированные запросы могут тормозить или даже «подвешивать» систему. Вот несколько приёмов для ускорения работы:
- ⚡ Используйте параметры вместо жёстко прописанных значений. Например, вместо:
ГДЕ Дата > '2026-01-01'пишите:
ГДЕ Дата > &ДатаНачалаЭто позволяет 1С кэшировать план выполнения запроса.
- 🗃️ Ограничивайте выборку с помощью
ПЕРВЫЕилиРАЗЛИЧНЫЕ. Например:ВЫБРАТЬ ПЕРВЫЕ 100поможет быстро проверить логику запроса без обработки всех данных.
- 🔗 Избегайте лишних соединений. Если можно получить данные из одной таблицы, не добавляйте лишние
СОЕДИНЕНИЯ. - 📅 Фильтруйте по дате. Всегда ограничивайте временной диапазон, например:
ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода - 📊 Используйте временные таблицы для сложных запросов. Это разгружает оперативную память:
// Создание временной таблицы
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
СУММА(ОстаткиТоваров.Количество) КАК Количество
В
ВременнаяТаблица1
ИЗ ...
В больших базах (от 1 млн записей) даже правильно написанный запрос может выполняться несколько минут. В таких случаях рассмотрите возможность выгрузки данных во внешнюю СУБД (например, PostgreSQL) или использования 1С:Аналитики.
Практические примеры запросов для разных задач
Разберём несколько готовых примеров, которые можно адаптировать под свои нужды.
1. Товары с нулевыми остатками
Запрос выведет список товаров, которых нет на складе:
ВЫБРАТЬ
Номенклатура.Наименование КАК Товар,
Номенклатура.Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваров
ПО Номенклатура.Ссылка = ОстаткиТоваров.Номенклатура
ГДЕ
ОстаткиТоваров.Количество <= 0 ИЛИ ОстаткиТоваров.Количество ЕСТЬ NULL
2. Топ-10 клиентов по сумме покупок
Агрегированный запрос с сортировкой:
ВЫБРАТЬ ПЕРВЫЕ 10
Контрагенты.Наименование КАК Клиент,
СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаПокупок
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка
ГДЕ
РеализацияТоваровУслуг.Дата > &НачалоГода
СГРУППИРОВАТЬ ПО
Контрагенты.Наименование
УПОРЯДОЧИТЬ ПО
СуммаПокупок УБЫВ
3. Продажи по дням недели
Запрос с использованием функции ДЕНЬНЕДЕЛИ():
ВЫБРАТЬ
ДЕНЬНЕДЕЛИ(РеализацияТоваровУслуг.Дата) КАК ДеньНедели,
СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаПродаж
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
ДЕНЬНЕДЕЛИ(РеализацияТоваровУслуг.Дата)
Для анализа продаж по дням недели удобно использовать параметр &Дата с значением по умолчанию ТЕКУЩАЯДАТА(). Это позволит быстро запускать запрос без ручного ввода дат.
FAQ: ответы на частые вопросы
Как сохранить запрос для повторного использования?
Есть несколько способов:
- Скопируйте текст запроса из окна
Текст запросаи сохраните в текстовый файл (.txtили.sql). - Создайте внешнюю обработку в конфигураторе и вставьте запрос в её модуль.
- Если запрос используется в отчёте, сохраните вариант отчёта с нужными настройками.
Для удобства можно создать обработку с универсальным конструктором запросов, куда будут подгружаться сохранённые шаблоны.
Можно ли в конструкторе сделать запрос с несколькими условиями (И/ИЛИ)?
Да. В панели Условия:
- Для условия И добавьте несколько строк (каждая строка — отдельное условие).
- Для условия ИЛИ нажмите на кнопку
Группировка(скобки) и добавьте условия внутри одной группы.
Пример:
(Дата > &НачалоПериода)
И (Сумма > 1000 ИЛИ Контрагент = &ВажныйКлиент)
Почему запрос работает в конструкторе, но не работает в отчёте?
Вероятные причины:
- В отчёте используются дополнительные параметры, которые не учтены в конструкторе.
- Ограничения прав: у пользователя, запускающего отчёт, нет доступа к некоторым таблицам.
- В тексте запроса есть синтаксические ошибки, которые конструктор «прощает», а движок 1С — нет.
Решение: проверьте запрос в режиме 1С:Предприятие с теми же правами, что и у конечного пользователя.
Как экспортировать результаты запроса в Excel?
Способы:
- В окне результатов запроса нажмите
Файл → Сохранить как...и выберите форматExcelилиCSV. - Используйте обработку
ВыгрузкаДанныхВExcel(есть в стандартных поставках 1С). - Напишите небольшой скрипт на 1С для автоматической выгрузки:
РезультатЗапроса.Выгрузить(Новый Соответствие("Формат", "Excel"));
Где учиться писать сложные запросы?
Рекомендуемые ресурсы:
- 📖 Официальная документация 1С (раздел «Запросы»).
- 🎓 Курсы на платформе 1С:Учебный центр (например, «Запросы в 1С:Предприятие 8»).
- 📺 YouTube-каналы: «1С для программистов», «Инфостарт».
- 💬 Форум Инфостарт (раздел «Запросы»).
Практика: берите реальные задачи из своей работы и пробуйте решать их через запросы. Например, автоматизируйте ежемесячные отчёты, которые вы делаете вручную.