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

На самом деле, освоить основы можно за несколько часов, а дальнейшее погружение откроет возможности для решения 90% повседневных задач в . В этой статье мы разберёмся, как работать с конструктором запросов с нуля: от открытия инструмента до написания сложных многотабличных запросов. Вы узнаете про синтаксис, типичные ошибки, оптимизацию и даже несколько «фишек», которые облегчат работу с большими объёмами данных.

Что такое конструктор запросов в 1С и зачем он нужен

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

  • 📊 Извлекать данные из справочников, документов, регистров и других объектов конфигурации.
  • 🔍 Фильтровать информацию по заданным критериям (например, «показать товары с остатком меньше 10 штук»).
  • 📈 Агрегировать данные (суммы, средние значения, количество записей).
  • 🔄 Объединять таблицы для комплексного анализа (например, связать продажи с остатками на складе).
  • 📄 Экспортировать результаты в отчёты, табличные документы или внешние файлы.

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

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

  • 📋 Отчётах (например, «Анализ продаж», «Остатки товаров»).
  • 🖥️ Обработках для массовой обработки данных.
  • 🔧 Конфигурировании (при создании новых отчётов или доработке существующих).
  • 📊 Внешних обработках для интеграции с другими системами.
📊 Как часто вы используете конструктор запросов в 1С?
Ежедневно
Несколько раз в неделю
Редико
Никогда не пробовал

Как открыть конструктор запросов: 3 способа

В зависимости от задачи и версии (8.3, 8.2 или более ранние), конструктор запросов можно открыть несколькими способами. Рассмотрим самые универсальные:

1. Через меню «Все функции»

Это самый надёжный способ, который работает почти во всех конфигурациях:

  1. Откройте 1С:Предприятие в режиме 1С:Предприятие (не путать с конфигуратором!).
  2. Нажмите Файл → Открыть → Все функции (или Ctrl+Shift+F).
  3. В списке найдите Конструктор запроса и запустите его.

2. Из отчёта или обработки

Если вы работаете с готовым отчётом (например, «Ведомость по товарам»), часто есть возможность редактировать его запрос:

  1. Откройте нужный отчёт (Отчёты → Стандартные отчёты).
  2. Нажмите кнопку Настройки (или Ещё → Изменить вариант).
  3. Перейдите на вкладку Запрос и кликните Конструктор запроса.

3. В конфигураторе

Для разработчиков и администраторов:

  1. Откройте 1С:Предприятие в режиме Конфигуратор.
  2. Выберите объект (отчёт, обработку) и откройте его модуль.
  3. В коде найдите процедуру с запросом и нажмите правой кнопкой → Конструктор запроса.
💡

Если в меню нет пункта «Все функции», попробуйте включить его в настройках интерфейса: Сервис → Параметры → закладка «Интерфейс» → галочка «Показывать все функции».

Интерфейс конструктора: разбор основных элементов

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

Элемент интерфейса Назначение
Панель «Таблицы» Список всех доступных таблиц базы данных (справочники, документы, регистры и т.д.). Здесь вы выбираете источники данных для запроса.
Панель «Поля» Перечень полей (колонок), которые будут выведены в результате запроса. Можно добавлять, удалять и переименовывать поля.
Панель «Условия» Фильтры для отбора данных (например, «Дата больше 01.01.2026» или «Сумма > 1000»).
Панель «Группировка» Настройки для агрегации данных (суммы, средние значения, количество записей).
Окно «Текст запроса» Автоматически генерируемый код запроса на языке . Можно редактировать вручную.
Кнопка «Выполнить» Запускает запрос и показывает результат в отдельном окне.

Самые используемые вкладки — Таблицы, Поля и Условия. Для простых запросов их достаточно. Для сложных аналитических задач потребуется вкладка Группировка и ручное редактирование текста запроса.

Что делать, если в конструкторе не отображаются нужные таблицы?

Если в списке таблиц нет нужного справочника или документа, проверьте:

1. Права доступа: у вашего пользователя может не хватить прав на чтение данных.

2. Режим работы: некоторые таблицы доступны только в режиме 1С:Предприятие (не в конфигураторе).

3. Конфигурацию: если таблица создана в другой конфигурации (например, в 1С:Бухгалтерии, а вы работаете в 1С:УТ), её не будет в списке.

4. Обновление: иногда помогает перезапуск или обновление конфигурации.

Пошаговая инструкция: как создать простой запрос

Разберём создание запроса на примере задачи: «Получить список товаров с остатками на складе и ценой».

Шаг 1. Выбор таблиц

В панели Таблицы найдите:

  • 📄 Справочник.Номенклатура (здесь хранятся товары).
  • 📦 РегистрНакопления.ОстаткиТоваров (здесь данные об остатках).

Добавьте их в запрос двойным кликом или кнопкой Добавить.

Шаг 2. Выбор полей

В панели Поля отметьте нужные колонки:

  • Из Номенклатура: Наименование, Артикул, Цена.
  • Из ОстаткиТоваров: Количество.

Если нужно переименовать поле (например, НаименованиеТовар), кликните правой кнопкой на поле и выберите Переименовать.

Шаг 3. Связь между таблицами

Конструктор автоматически предложит связать таблицы по ключевым полям. В нашем случае это:

  • Номенклатура.Ссылка = ОстаткиТоваров.Номенклатура.

Если связь не установилась, добавьте её вручную на вкладке Связи.

Шаг 4. Условия отбора

Добавим фильтр, чтобы показать только товары с остатком больше 0:

  • В панели Условия выберите поле ОстаткиТоваров.Количество.
  • Установите условие: > 0.

Шаг 5. Выполнение запроса

Нажмите Выполнить (или F5). Результат отобразится в отдельном окне. Если нужно сохранить запрос для дальнейшего использования, скопируйте текст из окна Текст запроса.

Добавлены все нужные таблицы|Поля переименованы для удобства|Установлены связи между таблицами|Заданы корректные условия фильтрации|Проверен синтаксис в окне «Текст запроса»

-->

Сложные запросы: группировка, объединение таблиц и подзапросы

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

1. Группировка данных (итоги по группам)

Допустим, нужно получить суммарные продажи по каждому менеджеру. Для этого:

  1. Добавьте таблицы Документ.РеализацияТоваровУслуг и Справочник.Пользователи.
  2. В панели Поля выберите Пользователи.Наименование и РеализацияТоваровУслуг.СуммаДокумента.
  3. Перейдите на вкладку Группировка и добавьте поле Пользователи.Наименование.
  4. Для поля СуммаДокумента выберите агрегатную функцию Сумма.

В результате вы получите таблицу с двумя колонками: Менеджер и Сумма продаж.

2. Объединение таблиц (JOIN)

Иногда данные разбросаны по нескольким таблицам. Например, чтобы получить остатки товаров с учётом резервов, нужно объединить:

  • РегистрНакопления.ОстаткиТоваров (фактические остатки).
  • РегистрНакопления.РезервыТоваров (зарезервированные товары).

В конструкторе:

  1. Добавьте обе таблицы.
  2. Свяжите их по полю Номенклатура.
  3. В поле Количество добавьте выражение: ОстаткиТоваров.Количество - РезервыТоваров.Количество.

3. Подзапросы (вложенные запросы)

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


ВЫБРАТЬ

Номенклатура.Наименование КАК Товар

ИЗ

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

ГДЕ НЕ

Номенклатура.Ссылка В (

ВЫБРАТЬ РАЗЛИЧНЫЕ

РеализацияТоваровУслуг.Номенклатура

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.Дата > &НачалоНедели

)

Такой запрос нельзя создать полностью в визуальном конструкторе — придётся редактировать текст вручную.

💡

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

Типичные ошибки и как их избежать

Даже опытные пользователи иногда сталкиваются с проблемами при работе с конструктором запросов. Вот самые распространённые ошибки и способы их решения:

⚠️ Внимание: Если запрос выполняется слишком долго (более 30 секунд), скорее всего, вы забыли добавить условие отбора по дате или не оптимизировали связи между таблицами. Прервите выполнение (Esc) и проверьте логику запроса.
Ошибка Причина Решение
Поле не найдено Опечатка в названии поля или таблицы. Проверьте регистр и точное название в метаданных (Ctrl+Shift+M).
Недопустимое использование агрегатной функции Пытаетесь применить СУММА или МАКСИМУМ к полю, которое не добавлено в группировку. Добавьте поле в группировку или уберите агрегатную функцию.
Слишком много строк в результате Отсутствует фильтр по дате или другим критериям. Добавьте условие, например: Дата > &НачалоМесяца.
Ошибка связи между таблицами Некорректное условие соединения (WHERE). Проверьте, что поля для связи имеют одинаковый тип (например, обе колонки — Ссылка).
Запрос возвращает пустой результат Слишком жёсткие условия фильтрации или ошибка в логике. Упростите запрос, убирая условия по одному, чтобы найти проблему.

Ещё одна частая проблема — неверные типы данных. Например, если вы сравниваете поле типа Дата со строкой ('01.01.2026' вместо &ДатаНачала), запрос либо не выполнится, либо вернёт некорректные данные. Всегда используйте параметры (&Параметр) для динамических значений.

Как ускорить медленный запрос?

1. Добавьте индексы: Убедитесь, что поля, используемые в условиях (WHERE), проиндексированы.

2. Ограничьте данные: Используйте отбор по дате или другим критериям, чтобы сократить объём обрабатываемых данных.

3. Разбейте на части: Если запрос сложный, выполните его в несколько этапов с использованием временных таблиц.

4. Проверьте связи: Избегайте соединений типа ПОЛНОЕ СОЕДИНЕНИЕ (FULL JOIN), если они не необходимы.

Оптимизация запросов: советы для больших баз данных

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

  • Используйте параметры вместо жёстко прописанных значений. Например, вместо:
    ГДЕ Дата > '2026-01-01'

    пишите:

    ГДЕ Дата > &ДатаНачала

    Это позволяет кэшировать план выполнения запроса.

  • 🗃️ Ограничивайте выборку с помощью ПЕРВЫЕ или РАЗЛИЧНЫЕ. Например:
    ВЫБРАТЬ ПЕРВЫЕ 100

    поможет быстро проверить логику запроса без обработки всех данных.

  • 🔗 Избегайте лишних соединений. Если можно получить данные из одной таблицы, не добавляйте лишние СОЕДИНЕНИЯ.
  • 📅 Фильтруйте по дате. Всегда ограничивайте временной диапазон, например:
    ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода
  • 📊 Используйте временные таблицы для сложных запросов. Это разгружает оперативную память:
    
    

    // Создание временной таблицы

    ВЫБРАТЬ

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

    СУММА(ОстаткиТоваров.Количество) КАК Количество

    В

    ВременнаяТаблица1

    ИЗ ...

В больших базах (от 1 млн записей) даже правильно написанный запрос может выполняться несколько минут. В таких случаях рассмотрите возможность выгрузки данных во внешнюю СУБД (например, PostgreSQL) или использования 1С:Аналитики.

Практические примеры запросов для разных задач

Разберём несколько готовых примеров, которые можно адаптировать под свои нужды.

1. Товары с нулевыми остатками

Запрос выведет список товаров, которых нет на складе:


ВЫБРАТЬ

Номенклатура.Наименование КАК Товар,

Номенклатура.Артикул

ИЗ

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

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваров

ПО Номенклатура.Ссылка = ОстаткиТоваров.Номенклатура

ГДЕ

ОстаткиТоваров.Количество <= 0 ИЛИ ОстаткиТоваров.Количество ЕСТЬ NULL

2. Топ-10 клиентов по сумме покупок

Агрегированный запрос с сортировкой:


ВЫБРАТЬ ПЕРВЫЕ 10

Контрагенты.Наименование КАК Клиент,

СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаПокупок

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты

ПО РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка

ГДЕ

РеализацияТоваровУслуг.Дата > &НачалоГода

СГРУППИРОВАТЬ ПО

Контрагенты.Наименование

УПОРЯДОЧИТЬ ПО

СуммаПокупок УБЫВ

3. Продажи по дням недели

Запрос с использованием функции ДЕНЬНЕДЕЛИ():


ВЫБРАТЬ

ДЕНЬНЕДЕЛИ(РеализацияТоваровУслуг.Дата) КАК ДеньНедели,

СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаПродаж

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО

ДЕНЬНЕДЕЛИ(РеализацияТоваровУслуг.Дата)

💡

Для анализа продаж по дням недели удобно использовать параметр &Дата с значением по умолчанию ТЕКУЩАЯДАТА(). Это позволит быстро запускать запрос без ручного ввода дат.

FAQ: ответы на частые вопросы

Как сохранить запрос для повторного использования?

Есть несколько способов:

  1. Скопируйте текст запроса из окна Текст запроса и сохраните в текстовый файл (.txt или .sql).
  2. Создайте внешнюю обработку в конфигураторе и вставьте запрос в её модуль.
  3. Если запрос используется в отчёте, сохраните вариант отчёта с нужными настройками.

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

Можно ли в конструкторе сделать запрос с несколькими условиями (И/ИЛИ)?

Да. В панели Условия:

  • Для условия И добавьте несколько строк (каждая строка — отдельное условие).
  • Для условия ИЛИ нажмите на кнопку Группировка (скобки) и добавьте условия внутри одной группы.

Пример:


(Дата > &НачалоПериода)

И (Сумма > 1000 ИЛИ Контрагент = &ВажныйКлиент)

Почему запрос работает в конструкторе, но не работает в отчёте?

Вероятные причины:

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

Решение: проверьте запрос в режиме 1С:Предприятие с теми же правами, что и у конечного пользователя.

Как экспортировать результаты запроса в Excel?

Способы:

  1. В окне результатов запроса нажмите Файл → Сохранить как... и выберите формат Excel или CSV.
  2. Используйте обработку ВыгрузкаДанныхВExcel (есть в стандартных поставках ).
  3. Напишите небольшой скрипт на для автоматической выгрузки:
    
    

    РезультатЗапроса.Выгрузить(Новый Соответствие("Формат", "Excel"));

Где учиться писать сложные запросы?

Рекомендуемые ресурсы:

  • 📖 Официальная документация (раздел «Запросы»).
  • 🎓 Курсы на платформе 1С:Учебный центр (например, «Запросы в 1С:Предприятие 8»).
  • 📺 YouTube-каналы: «1С для программистов», «Инфостарт».
  • 💬 Форум Инфостарт (раздел «Запросы»).

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