В арсенале каждого разработчика и аналитика 1С:Предприятие есть инструменты, которые значительно упрощают работу с данными. Один из самых мощных и одновременно недооценённых — конструктор запросов 1С. На первый взгляд это просто графический интерфейс для формирования SQL-подобных запросов, но на деле он способен решать задачи разной сложности: от простого извлечения справочников до построения многомерных отчётов с группировками и соединениями.
Многие новички в 1С обходят его стороной, предпочитая писать запросы вручную или использовать типовые отчёты. Однако такой подход часто ведёт к потере времени на отладку синтаксических ошибок или неоптимальным решениям. Конструктор запросов не только экономит время, но и помогает визуализировать логику выборки, что особенно ценно при работе со сложными структурами данных. В этой статье разберём, зачем нужен конструктор запросов 1С, какие задачи он решает, и как его правильно применять — от базовых операций до продвинутых техник.
Что такое конструктор запросов в 1С и где его найти
Конструктор запросов — это встроенный инструмент платформы 1С:Предприятие, который позволяет создавать запросы к базе данных в интерактивном режиме. Он доступен как в конфигураторе, так и в режиме предприятия (при наличии соответствующих прав). Основное преимущество конструктора — возможность строить запрос без ручного написания кода, используя графический интерфейс с перетаскиванием полей, таблиц и условий.
Чтобы открыть конструктор, достаточно:
- 📌 В конфигураторе: перейти в меню
Файл → Новый → Запросили нажатьCtrl+Shift+Q. - 📌 В режиме предприятия: через пункт меню
Все функции → Стандартные → Конструктор запроса(доступно не во всех конфигурациях). - 📌 В отчётах или обработках: часто вызывается через кнопку
Конструкторв поле ввода текста запроса.
Интерфейс конструктора разделён на несколько ключевых областей:
- 📋 Схема данных — отображает таблицы (справочники, документы, регистры) и связи между ними.
- 📝 Поля выборки — здесь перетаскиваются columns, которые нужно получить в результате.
- 🔍 Условия — фильтры для данных (например,
Дата >= &НачалоПериода). - 📊 Группировки и сортировки — настройки для агрегации данных.
Важно понимать, что конструктор не заменяет знание языка запросов 1С, а дополняет его. Он полезен для:
- 🔹 Быстрого прототипирования запросов.
- 🔹 Визуализации связей между таблицами (особенно в сложных конфигурациях).
- 🔹 Автоматического формирования синтаксически корректного кода.
Если в конструкторе не отображаются нужные таблицы (например, регистры накопления), проверьте, что в настройках схемы данных включены все необходимые объекты метаданных. Это делается через кнопку Настройки в верхнем меню конструктора.
Основные задачи, которые решает конструктор запросов
Конструктор запросов в 1С — это не просто "упрощалка" для новичков. Он активно используется даже опытными разработчиками для решения ряда практических задач. Рассмотрим ключевые сценарии его применения.
1. Быстрое извлечение данных из справочников и документов
Самая простая, но востребованная функция — выборка данных из одной или нескольких таблиц. Например, нужно получить список всех контрагентов с определённым видом деятельности или перечень документов РеализацияТоваровУслуг за последний месяц. Вместо того чтобы вспоминать синтаксис и имена полей, достаточно:
- Выбрать таблицу (например,
Справочник.Контрагенты). - Перенести нужные поля в список выборки (например,
Наименование,ИНН). - Задать условие (например,
ВидДеятельности = &Вид).
Конструктор автоматически сгенерирует код вида:
ВЫБРАТЬ
Контрагенты.Наименование КАК Наименование,
Контрагенты.ИНН КАК ИНН
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ВидДеятельности = &Вид
2. Построение отчётов с группировками и агрегацией
Одна из самых сильных сторон конструктора — работа с группировками. Например, нужно сформировать отчёт по продажам с разбивкой по менеджерам и суммированием выручки. В конструкторе это делается в несколько кликов:
- 📌 Добавляем таблицу
Документ.РеализацияТоваровУслуг. - 📌 В поля выборки переносим
МенеджериСуммаДокумента. - 📌 Включаем группировку по полю
Менеджер. - 📌 Добавляем агрегатную функцию
СУММА(СуммаДокумента).
Результат — готовый запрос с ГРУППИРОВКА ПО, который можно сразу использовать в отчёте.
3. Работа со связанными таблицами (соединения)
В реальных базах данные редко хранятся в одной таблице. Например, в документе ПоступлениеТоваров есть ссылка на контрагента, а в справочнике Контрагенты — его реквизиты. Чтобы получить единый список с данными из обеих таблиц, нужно использовать соединения (ЛЕВОЕ СОЕДИНЕНИЕ, ВНУТРЕННЕЕ СОЕДИНЕНИЕ и т.д.).
В конструкторе соединения настраиваются визуально:
- Добавляем обе таблицы в схему данных.
- Создаём связь между полями (например,
ПоступлениеТоваров.Контрагент = Контрагенты.Ссылка). - Выбираем тип соединения (по умолчанию обычно
ВНУТРЕННЕЕ).
Какой тип соединения выбрать?
ЛЕВОЕ СОЕДИНЕНИЕ возвращает все записи из левой таблицы, даже если нет совпадений в правой (поля из правой будут NULL). ВНУТРЕННЕЕ СОЕДИНЕНИЕ возвращает только строки, где есть совпадения в обеих таблицах. ПОЛНОЕ СОЕДИНЕНИЕ (редко используется) возвращает все строки из обеих таблиц, заполняя NULL там, где нет совпадений.
4. Фильтрация данных с параметрами
Запросы часто требуют динамических условий — например, выборка документов за определённый период или по конкретному складу. В конструкторе можно задать параметры, которые будут запрашиваться у пользователя при выполнении. Для этого:
- В условии используем конструкцию вида
Дата >= &НачалоПериода. - В коде запроса появится секция
УСТАНОВИТЬ ПАРАМЕТР.
При выполнении такого запроса 1С автоматически запросит значение параметра.
5. Создание временных таблиц
Для сложных отчётов иногда требуются промежуточные результаты. Конструктор позволяет создавать временные таблицы (ВТ) и работать с ними как с обычными источниками данных. Это полезно, например, для:
- 📌 Хранения промежуточных расчётов.
- 📌 Оптимизации производительности (разбиение сложного запроса на части).
- 📌 Рекурсивных выборок (например, построение иерархии справочников).
В конструкторе временные таблицы добавляются через меню Добавить → Временная таблица.
Преимущества конструктора запросов перед ручным написанием
Некоторые разработчики предпочитают писать запросы вручную, считая конструктор "игрушкой для новичков". Однако у него есть весомые преимущества, которые делают его незаменимым даже для опытных специалистов.
| Преимущество | Пояснение |
|---|---|
| 🔹 Визуализация связей | Позволяет увидеть структуру базы и связи между таблицами, что особенно ценно в чужих конфигурациях. |
| 🔹 Автоматическая генерация кода | Исключает синтаксические ошибки (забытые запятые, скобки, кавычки). |
| 🔹 Быстрое прототипирование | Можно быстро собрать запрос, а затем доработать его вручную. |
| 🔹 Поддержка сложных конструкций | Умеет работать с подзапросами, временными таблицами, рекурсией. |
| 🔹 Обучение новичков | Помогает понять логику построения запросов тем, кто только осваивает язык 1С. |
Конечно, у конструктора есть и ограничения. Например, он не всегда корректно обрабатывает:
- 🚫 Сложные выражения в условиях (с вложенными функциями).
- 🚫 Динамические запросы (где структура формируется в коде).
- 🚫 Некоторые специфические функции языка запросов (например,
РАЗРЕШЕННЫЕдля прав доступа).
Конструктор запросов — это не замена знанию языка, а инструмент для ускорения работы. Даже если вы пишете запросы вручную, умение пользоваться конструктором поможет быстрее разобраться в незнакомой базе или отладить сложную выборку.
Продвинутые возможности конструктора запросов
Многие пользователи ограничиваются базовыми функциями конструктора, не подозревая о его скрытых возможностях. Рассмотрим несколько продвинутых техник, которые выведут вашу работу на новый уровень.
1. Работа с виртуальными таблицами
В 1С есть понятие виртуальных таблиц — это специальные представления данных, которые формируются на лету. Например, виртуальные таблицы регистров накопления (Остатки, Обороты) или расчётов. Конструктор умеет работать с ними:
- 📌 В схеме данных выберите нужный регистр (например,
РегистрНакопления.ТоварыНаСкладах). - 📌 В списке таблиц появятся виртуальные таблицы (например,
ОстаткиилиОбороты). - 📌 Перенесите их в запрос и укажите параметры (период, измерения).
Это позволяет, например, получить остатки товаров на складе на определённую дату без ручного написания сложных запросов.
2. Использование вычисляемых полей
Иногда в результате запроса нужно вывести не только данные из базы, но и рассчитанные значения. Например, сумму с учётом скидки или разницу между двумя датами. В конструкторе это делается через вычисляемые поля:
- В списке полей выборки нажмите
Добавить вычисляемое поле. - Задайте формулу (например,
Сумма * (1 - Скидка/100)). - Укажите имя поля (например,
СуммаСоСкидкой).
В результате в выборке появится новое поле с рассчитанным значением.
3. Рекурсивные запросы
Рекурсия в запросах 1С используется для обхода иерархических структур — например, для получения всех подчинённых элементов справочника (подразделений, групп номенклатуры). Конструктор поддерживает рекурсивные запросы через специальный синтаксис:
ВЫБРАТЬ
Справочник.Подразделения.Ссылка КАК Ссылка,
Справочник.Подразделения.Наименование КАК Наименование
ИЗ
Справочник.Подразделения КАК Справочник.Подразделения
ГДЕ
Справочник.Подразделения.Родитель В ИЕРАРХИИ (&Родитель)
В конструкторе рекурсия настраивается через условие В ИЕРАРХИИ, которое автоматически генерирует нужный код.
4. Оптимизация запросов с помощью индексов
Конструктор может подсказать, какие поля лучше использовать для фильтрации, чтобы запрос выполнялся быстрее. Например, если в условии используется поле, по которому нет индекса, 1С может выдать предупреждение. Это помогает оптимизировать производительность, особенно в больших базах.
Если конструктор "подвисает" при работе со сложными запросами, попробуйте отключить автоматическое обновление схемы данных в настройках. Это ускорит работу, но потребует ручного обновления схемы при изменениях в метаданных.
Типичные ошибки при работе с конструктором запросов
Даже опытные пользователи иногда допускают ошибки, которые ведут к некорректным результатам или низкой производительности. Рассмотрим самые распространённые из них.
1. Избыточные соединения таблиц
Частая проблема — добавление лишних таблиц в запрос через соединения. Например, если нужно получить данные из документа и справочника, но при этом подключается ещё 3-4 таблицы "на всякий случай", это может:
- 🚨 Значительно замедлить выполнение запроса.
- 🚨 Привести к дублированию строк (если связи неверные).
- 🚨 Усложнить поддержку кода.
Решение: добавляйте только те таблицы, которые действительно нужны для выборки.
2. Неправильное использование типов соединений
Многие не понимают разницу между ВНУТРЕННИМ и ЛЕВЫМ соединениями, что приводит к потере данных. Например, если использовать ВНУТРЕННЕЕ СОЕДИНЕНИЕ для таблицы с контрагентами, то в результат не попадут документы, где контрагент не заполнен (или удалён).
Правило:
- 🔹
ВНУТРЕННЕЕ СОЕДИНЕНИЕ— только совпадающие строки. - 🔹
ЛЕВОЕ СОЕДИНЕНИЕ— все строки из левой таблицы, даже если нет совпадений.
3. Игнорирование условий фильтрации
Запросы без условий (ГДЕ) могут возвращать огромные объёмы данных, что ведёт к:
- 🚨 Перегрузке памяти.
- 🚨 Замедлению работы клиентского приложения.
- 🚨 Ошибкам при обработке результатов.
Всегда добавляйте условия, ограничивающие объём выборки (например, по дате, статусу, организации).
4. Неучёт особенностей виртуальных таблиц
Виртуальные таблицы (например, Остатки или Обороты) требуют указания параметров — периода, измерений, ресурсов. Если их не задать, запрос либо не выполнится, либо вернёт некорректные данные.
Пример ошибки:
ВЫБРАТЬ
ОстаткиТоваров.Товар,
ОстаткиТоваров.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиТоваров
// Забыли указать параметр &НаДата!
5. Чрезмерное использование вычисляемых полей
Вычисляемые поля удобны, но их злоупотребление может:
- 🚨 Усложнить чтение и поддержку запроса.
- 🚨 Замедлить выполнение (если в формулах используются ресурсоёмкие функции).
Решение: переносите сложные расчёты в код 1С (например, в обработчик результата запроса).
Указаны все необходимые условия фильтрации|Использованы правильные типы соединений|Нет лишних таблиц в схеме данных|Вычисляемые поля оптимизированы|Параметры виртуальных таблиц заданы корректно-->
Когда лучше писать запрос вручную, а когда использовать конструктор
Конструктор запросов — мощный инструмент, но он не универсален. Есть задачи, где ручное написание кода эффективнее. Разберём, когда стоит использовать тот или иной подход.
| Ситуация | Конструктор запросов | Ручное написание |
|---|---|---|
| 🔹 Простые выборки из 1-2 таблиц | ✅ Идеально подходит | ❌ Избыточно |
| 🔹 Сложные отчёты с группировками | ✅ Удобно для прототипирования | ⚠️ Может потребоваться доработка |
| 🔹 Динамические запросы (структура формируется в коде) | ❌ Не подходит | ✅ Единственный вариант |
| 🔹 Работа с виртуальными таблицами | ✅ Поддерживается | ✅ Также удобно |
| 🔹 Оптимизация производительности | ⚠️ Может генерировать неоптимальный код | ✅ Полный контроль |
| 🔹 Обучение новичков | ✅ Лучший способ разобраться в логике | ❌ Сложно для начинающих |
Рекомендации по выбору подхода:
- 📌 Используйте конструктор для быстрого создания прототипов или когда нужно разобраться в незнакомой базе.
- 📌 Пишите вручную, если требуется максимальная производительность или динамическое формирование запроса.
- 📌 Комбинируйте оба метода: создайте запрос в конструкторе, а затем доработайте его в коде.
Конструктор запросов — это как "фотошоп для данных": он ускоряет рутинные операции, но для профессиональной работы нужно понимать, как он работает "под капотом".
Практические примеры использования конструктора запросов
Теория без практики бесполезна. Рассмотрим несколько реальных задач, которые можно решить с помощью конструктора запросов в 1С.
Пример 1: Отчёт по продажам с разбивкой по менеджерам
Задача: Получить сумму продаж по каждому менеджеру за текущий месяц.
Решение в конструкторе:
- Добавляем таблицу
Документ.РеализацияТоваровУслуг. - В поля выборки переносим
Менеджер.НаименованиеиСуммаДокумента. - Добавляем группировку по
Менеджер. - Для поля
СуммаДокументаустанавливаем агрегатную функциюСУММА. - В условиях указываем
Дата >= НачалоМесяца(&ТекущаяДата).
Результирующий запрос:
ВЫБРАТЬ
РеализацияТоваровУслуг.Менеджер КАК Менеджер,
СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаПродаж
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата >= НачалоМесяца(&ТекущаяДата)
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслуг.Менеджер
Пример 2: Поиск дублирующихся элементов в справочнике
Задача: Найти контрагентов с одинаковыми ИНН.
Решение:
- Добавляем таблицу
Справочник.Контрагентыдважды (какК1иК2). - Создаём соединение по полю
ИННс условиемК1.ИНН = К2.ИНН И К1.Ссылка <> К2.Ссылка. - В выборку добавляем
К1.ИНН,К1.Наименование,К2.Наименование.
Результат: Список пар контрагентов с одинаковыми ИНН.
Пример 3: Анализ остатков товаров на складах
Задача: Получить остатки товаров на всех складах на текущую дату.
Решение:
- Добавляем виртуальную таблицу
РегистрНакопления.ТоварыНаСкладах.Остатки. - Указываем параметр
&НаДата = ТекущаяДата(). - В выборку переносим
Товар,Склад,КоличествоОстаток. - Добавляем условие
КоличествоОстаток > 0(чтобы исключить нулевые остатки).
Результирующий запрос:
ВЫБРАТЬ
ОстаткиТоваров.Товар КАК Товар,
ОстаткиТоваров.Склад КАК Склад,
ОстаткиТоваров.КоличествоОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДата,) КАК ОстаткиТоваров
ГДЕ
ОстаткиТоваров.КоличествоОстаток > 0
Как ускорить запрос с остатками?
Если запрос выполняется долго, попробуйте:
1. Ограничить период (например, взять остатки не за весь год, а за последний месяц).
2. Использовать отбор по конкретному складу или группе товаров.
3. Перенести часть логики в код (например, предварительно отфильтровать товары).
Советы по оптимизации работы с конструктором запросов
Чтобы работать с конструктором эффективно, следуйте этим рекомендациям:
- 🔹 Обновляйте схему данных. Если в конфигурацию добавили новые реквизиты или таблицы, схему в конструкторе нужно обновить (кнопка
Обновитьв верхнем меню). - 🔹 Используйте псевдонимы. Давайте таблицам и полям осмысленные имена (например,
РТТ КАК РеализациявместоТ1). Это упростит чтение кода. - 🔹 Сохраняйте часто используемые запросы. В конструкторе можно сохранять шаблоны запросов для повторного использования.
- 🔹 Проверяйте план выполнения. В 1С:Предприятие 8.3 есть инструмент для анализа плана выполнения запроса. Это помогает найти "узкие места".
- 🔹 Разбивайте сложные запросы. Если запрос получается слишком громоздким, разбейте его на несколько простых с использованием временных таблиц.
Для ускорения работы с конструктором можно использовать горячие клавиши:
- 🔹
F2— переименовать поле. - 🔹
Delete— удалить выбранное поле или таблицу. - 🔹
Ctrl+Space— подсказка по полям (в некоторых версиях).
Если конструктор запросов часто "зависает" при открытии, попробуйте очистить кэш метаданных. Для этого закройте все сеансы 1С, удалите файлы из каталога %APPDATA%\1C\1Cv8\ (или %LOCALAPPDATA%\1C\1Cv8\), и перезапустите конфигуратор.
FAQ: Ответы на частые вопросы о конструкторе запросов 1С
Можно ли в конструкторе запросов создать запрос с UNION (объединением)?
Нет, конструктор не поддерживает оператор ОБЪЕДИНИТЬ (аналог UNION в SQL). Для таких запросов придётся писать код вручную или создать два отдельных запроса в конструкторе, а затем объединить их результаты в коде 1С.
Почему конструктор не показывает некоторые таблицы (например, регистры сведений)?
Это может быть связано с:
- 🔹 Настройками схемы данных (не все объекты метаданных включены).
- 🔹 Ограничениями прав доступа (текущий пользователь не имеет прав на просмотр этих таблиц).
- 🔹 Устаревшей версией схемы (нужно обновить через кнопку
Обновить).
Проверьте настройки в меню Схема данных → Настройки и убедитесь, что нужные объекты отмечены галочками.