Разработка и Конфигурация · 11 мин
Конструктор запросов 1С: как пользоваться
Как пользоваться конструктором запросов в 1С: выбор таблиц и полей, связи, группировки, параметры, виртуальные таблицы и проверка результата запроса.
Конструктор запросов в 1С — это визуальный инструмент конфигуратора, который позволяет собрать текст запроса на встроенном языке запросов без ручного набора синтаксиса. Он доступен везде, где платформа ожидает текст запроса: в модулях объектов, в схеме компоновки данных, в консоли запросов и в динамических списках. Разработчик выбирает таблицы, поля, условия и группировки мышью, а конструктор формирует корректный текст с правильными алиасами и структурой.
Главная ценность инструмента — снижение количества синтаксических ошибок и ускорение работы со сложными соединениями. Конструктор сам подставляет имена полей, показывает состав виртуальных таблиц и контролирует корректность связей. Однако он не заменяет понимания логики запроса: неправильно выбранная таблица или лишнее соединение приведут к неверным данным даже при синтаксически безупречном тексте.
Ниже разобран практический порядок работы: от открытия конструктора до проверки готового запроса, с типичными ошибками и ограничениями, о которых стоит знать до начала работы.
Как открыть конструктор запросов
Самый частый способ — из модуля в конфигураторе. Установите курсор в то место кода, где должен располагаться текст запроса (обычно внутри конструкции присваивания свойству Текст объекта Запрос), нажмите правую кнопку мыши и выберите пункт «Конструктор запроса». Если курсор стоит внутри уже существующего текста запроса, конструктор откроет его для редактирования; если текст пустой или содержит ошибки, будет предложено создать запрос заново.
Второй вариант — консоль запросов (внешняя обработка или встроенный инструмент в некоторых конфигурациях). Там конструктор вызывается кнопкой на панели инструментов. Этот путь удобнее для обучения и отладки: запрос можно сразу выполнить и посмотреть результат, не запуская весь прикладной код.
Третий сценарий — работа в схеме компоновки данных при создании отчёта. На закладке «Набор данных» при добавлении набора типа «Запрос» доступна та же кнопка конструктора. Дополнительно здесь есть закладки, специфичные для СКД: характеристики и вычисляемые поля.
Выбор таблиц и полей
После открытия конструктор показывает три колонки: доступные объекты базы данных (таблицы), выбранные таблицы и список полей. В левой колонке раскройте нужный раздел — «Справочники», «Документы», «РегистрыНакопления», «РегистрыСведений» — и перетащите таблицу в среднюю колонку или выделите и нажмите кнопку переноса.
Для регистров доступны виртуальные таблицы: «Остатки», «Обороты», «ОстаткиИОбороты» для регистров накопления и «СрезПервых», «СрезПоследних» для периодических регистров сведений. Именно их следует использовать в большинстве случаев: обращение напрямую к физической таблице движений заставит платформу суммировать записи вручную, что медленнее и сложнее в поддержке.
Поля переносятся из средней колонки в правую двойным щелчком или кнопкой. Звёздочка (*) выбирает все поля таблицы — в рабочих запросах этого лучше избегать: лишние поля увеличивают объём выборки и мешают оптимизации. Выбирайте только те поля, которые реально нужны для обработки или вывода.
- 1Откройте конструктор из модуля или консоли запросов
- 2Выберите таблицу или виртуальную таблицу регистра
- 3Перенесите нужные поля в список выборки
- 4Задайте параметры виртуальной таблицы (период, условия)
- 5Настройте связи, если таблиц несколько
- 6Добавьте отборы на закладке «Условия»
- 7Нажмите «ОК» и проверьте сформированный текст
- 8Выполните запрос в консоли на тестовых данных
Параметры виртуальных таблиц и отборы
При выборе виртуальной таблицы регистра конструктор открывает диалог её параметров. Для таблицы «Остатки» это период (на какой момент считать остатки) и условие отбора по измерениям. Ключевое правило производительности: отборы по измерениям регистра нужно задавать в параметрах виртуальной таблицы, а не в общем условии ГДЕ. Тогда платформа получит из базы только нужный срез данных, а не весь набор с последующей фильтрацией.
На закладке «Условия» формируется секция ГДЕ. Условие строится из поля, оператора сравнения и значения. Для значений, которые придут из кода, используйте параметры: введите произвольное выражение вида &Параметр или нажмите кнопку создания параметра. Перед выполнением запроса каждый параметр должен быть установлен методом УстановитьПараметр() — иначе платформа выдаст ошибку о незаполненном параметре.
Для отбора по списку значений используйте оператор «В» с параметром, содержащим массив или список значений. Для проверки иерархии (элемент и все его подчинённые) — оператор «В ИЕРАРХИИ». Для текстового поиска по шаблону — оператор «ПОДОБНО» с символами подстановки.
Связи между таблицами
Когда в запросе несколько таблиц, на закладке «Связи» определяется способ их соединения. По умолчанию конструктор предлагает внутреннее соединение (INNER JOIN): в результат попадут только строки, для которых нашлось совпадение в обеих таблицах. Если нужны все записи левой таблицы независимо от наличия пары — например, все товары, включая те, по которым не было движений, — снимите флажок «Все» у левой таблицы или установите его, чтобы получить левое соединение (LEFT JOIN).
Условие связи обычно строится по ссылочному полю: например, Товары.Ссылка = Обороты.Номенклатура. Конструктор часто предлагает связь автоматически, но её нужно проверить: автоматическая связь по совпадению имён полей бывает неверной, особенно когда в таблицах несколько полей с одинаковыми типами.
Группировки, итоги и упорядочивание
Закладка «Группировка» отвечает за агрегацию. Поля, по которым группируются данные, переносятся в верхний список, а для остальных полей выбирается агрегатная функция: СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ. Частая ошибка — оставить поле в выборке без группировки и без функции: конструктор это пропустит, но платформа при выполнении выдаст ошибку либо результат будет не тем, что ожидался.
Закладка «Итоги» управляет секцией ИТОГИ ПО — иерархическими подытогами результата. Это удобно для отчётов с группировками: один запрос возвращает и детальные строки, и подытоги по группам. Обратите внимание на флажок «Общие итоги» — он добавляет строку с итогом по всей выборке.
На закладке «Порядок» задаётся сортировка результата. Если запрос используется в коде с обходом выборки, помните: упорядочивание должно быть явным, рассчитывать на «естественный» порядок записей нельзя. Для иерархических справочников доступна сортировка по иерархии через соответствующую настройку поля.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| СУММА(Остатки.КоличествоОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Номенклатура";
Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();Проверка результата и отладка
Сформированный конструктором текст — это ещё не готовое решение. Минимальная проверка: выполнить запрос в консоли запросов на копии базы или в тестовом контуре и сопоставить результат с данными, которые видно в интерфейсе (например, сверить остатки по одному товару с отчётом «Остатки товаров»). Расхождение почти всегда означает ошибку в параметрах виртуальной таблицы или в связях.
Проверяйте граничные случаи: пустой результат (нет данных за период), NULL в соединениях (появляются при левом соединении, когда пары нет), дубли строк. Значения NULL нужно обрабатывать явно — функцией ЕСТЬNULL() в запросе или проверками в коде, иначе при арифметике с ними получите NULL вместо числа.
Как проверить результат запроса
Совпадает с ожидаемым по данным интерфейса
Строки дублируются или пропадают после добавления связи
Сходятся с типовым отчётом по тем же данным
Суммы завышены кратно — признак декартова умножения
Заполнены либо явно обработаны через ЕСТЬNULL
Встречаются NULL там, где ожидались значения
Запрос выполняется за приемлемое время на рабочем объёме
Выполнение занимает минуты — проверьте отборы в параметрах виртуальных таблиц
Типичные ошибки и ограничения конструктора
Конструктор не проверяет смысловую корректность. Он сформирует синтаксически верный запрос даже с бессмысленной связью или лишней группировкой. Поэтому ответственность за логику — на разработчике: конструктор экономит время на синтаксисе, но не заменяет понимания структуры данных конфигурации.
Ещё одно ограничение: сложные произвольные выражения, вложенные запросы и объединения конструктор поддерживает, но редактировать их в нём менее удобно, чем вручную. Нередко рабочий процесс выглядит так: основу собирают в конструкторе, а тонкие места — вычисляемые поля, ВЫБОР КОГДА, вложенные запросы — дописывают в тексте вручную. После ручной правки конструктор всё ещё может открыть запрос, если синтаксис остался корректным.
Удобный приём при изучении чужой конфигурации: найти в коде готовый запрос, поставить курсор внутрь его текста и открыть конструктор — он покажет структуру запроса визуально, и разобраться в логике будет проще, чем читая сплошной текст.
Частые вопросы
Как добавить параметр в запрос через конструктор?
На закладке «Условия» или в параметрах виртуальной таблицы в поле значения введите имя с амперсандом, например &Склад. Конструктор распознает его как параметр. Перед выполнением запроса в коде обязательно вызовите Запрос.УстановитьПараметр("Склад", Значение), иначе получите ошибку о незаданном параметре.
Почему конструктор не открывает мой запрос?
Чаще всего — синтаксическая ошибка в тексте, который правили вручную: пропущенная запятая, незакрытая скобка, неверное ключевое слово. Платформа предложит создать новый запрос, но старый текст при этом не удаляется из модуля — сначала исправьте синтаксис вручную, затем снова откройте конструктор.
Чем отличается таблица «Остатки» от «ОстаткиИОбороты»?
«Остатки» возвращает только конечные остатки на заданный момент — этого достаточно, если нужны текущие остатки. «ОстаткиИОбороты» дополнительно даёт приход, расход и остатки на начало и конец периода — она нужна для отчётов за интервал времени, но тяжелее для СУБД. Не используйте её, если обороты не нужны.
Можно ли построить запрос к нескольким одинаковым регистрам?
Да. Добавьте одну и ту же таблицу несколько раз — конструктор автоматически назначит ей разные псевдонимы (имена). Псевдоним можно изменить в свойствах таблицы, чтобы код оставался читаемым, например «Продажи» и «Возвраты».
Как сделать итоги по группам в одном запросе?
Используйте закладку «Итоги»: укажите группировочные поля в секции «ИТОГИ ПО» и суммируемые поля. При обходе результата в коде используйте ВыборкаПоГруппировкам, чтобы получить строки подытогов, а внутри них — детальные записи.
Конструктор в толстом и тонком клиенте одинаковый?
Функционально да — это инструмент конфигуратора и поле построения запроса работает одинаково. Различия касаются только внешнего вида диалогов. Консоль запросов для отладки в режиме предприятия может быть реализована по-разному в зависимости от используемой обработки.
Что важно запомнить
Конструктор запросов собирает синтаксически корректный текст, но логику проверяет разработчик. Отборы по измерениям задавайте в параметрах виртуальных таблиц, связи проверяйте на дубли, NULL обрабатывайте через ЕСТЬNULL, а готовый запрос всегда выполняйте на тестовых данных до использования в рабочем коде.