К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как изучить язык запросов в 1С: практическое руководство

Практическое руководство по изучению языка запросов 1С: базовый синтаксис, конструктор запросов, соединения, итоги, виртуальные таблицы и типичные ошибки новичков.

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

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

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

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

Язык запросов 1С — это способ описать, какие данные нужны из базы, не заботясь о том, как платформа их физически получит. Вы пишете «выбрать товары, у которых остаток больше нуля», а платформа сама строит обращение к СУБД. Синтаксис напоминает SQL, но имеет особенности: русскоязычные и англоязычные ключевые слова взаимозаменяемы, есть обращение к объектам метаданных через точку (Справочник.Номенклатура) и встроенные виртуальные таблицы.

Запросы используются повсюду: в отчётах на СКД, в проведении документов, в обработках, в динамических списках, в регламентных заданиях. Даже если вы планируете работать только с формами и бизнес-логикой, без понимания запросов вы будете постоянно упираться в ограничения.

Подготовьте среду для практики

Изучать запросы «по книжке» без выполнения — пустая трата времени. Вам нужна среда, где можно безопасно писать и запускать запросы. Минимальный набор: установленная платформа 1С, конфигуратор и база с данными. Подойдёт учебная версия платформы, демонстрационная конфигурация (например, «Управление торговлей» в демо-режиме) или копия вашей рабочей базы.

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

Освойте базовый синтаксис: ВЫБРАТЬ, ИЗ, ГДЕ

Начните с минимальной конструкции: выбрать несколько полей из одного справочника. Например, запрос к справочнику номенклатуры с отбором по признаку «не помечен на удаление». Здесь важно понять три вещи: как обращаться к таблице объекта метаданных, как перечислять поля и как задавать условия через ГДЕ (WHERE).

Дальше добавляйте по одной конструкции: сортировка через УПОРЯДОЧИТЬ ПО, ограничение количества строк через ПЕРВЫЕ, уникальные значения через РАЗЛИЧНЫЕ, параметры через амперсанд (&Параметр). Параметры — критически важная тема: значения в условия всегда передавайте параметрами, а не подстановкой строк, это и безопаснее, и быстрее.

Тренируйтесь так: берёте простую задачу («список контрагентов, у которых заполнен ИНН»), собираете запрос в конструкторе, затем переписываете его вручную по памяти и сверяете результат. Конструктор запросов — легальный и рекомендуемый помощник: он генерирует корректный синтаксис и помогает запомнить порядок секций.

Порядок изучения базового синтаксиса
  1. 1
    Откройте консоль запросов на копии базы и вызовите конструктор запросов
  2. 2
    Выберите одну таблицу (справочник) и 2–3 поля, выполните запрос, посмотрите результат
  3. 3
    Добавьте условие ГДЕ с параметром и выполните снова
  4. 4
    Добавьте сортировку и ограничение ПЕРВЫЕ 10
  5. 5
    Перепишите тот же запрос вручную без конструктора и сравните результат

Соединения таблиц и группировки

Следующий уровень — соединения. В реальных задачах данные почти всегда лежат в нескольких таблицах: документ и его табличная часть, номенклатура и её цены, заказ и оплаты по нему. Освойте ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN) — оно используется чаще всего, а также ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Поймите разницу: внутреннее соединение отбрасывает строки без пары, левое — сохраняет все строки левой таблицы, подставляя NULL.

Группировки нужны для агрегации: суммы продаж по контрагентам, количество документов по месяцам. Здесь изучаются СГРУППИРОВАТЬ ПО, агрегатные функции СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ и фильтрация групп через ИМЕЮЩИЕ. Частая ошибка новичков — включить в выборку поле, которое не входит ни в группировку, ни в агрегат: платформа такого не позволит, и важно понимать почему.

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

Виртуальные таблицы регистров — сердце учётных задач

Большинство прикладных запросов в 1С работают не с «сырыми» таблицами, а с виртуальными таблицами регистров: Остатки, ОстаткиИОбороты, Обороты, СрезПоследних, СрезПервых. Именно через них получают складские остатки, взаиморасчёты, остатки на счетах, актуальные цены и курсы валют.

Ключевой навык — правильно передавать параметры виртуальной таблице. Период, условия отбора и список измерений указываются в скобках сразу после имени таблицы. Отборы по измерениям регистра (номенклатура, склад, организация) всегда передавайте в параметры виртуальной таблицы, а не в секцию ГДЕ: это кардинально влияет на скорость, потому что платформа сразу ограничит вычисляемый объём данных.

СрезПоследних регистра сведений — отдельная типовая задача: получить актуальную цену, ответственного, курс на дату. Потренируйтесь получать срез на конкретную дату и на дату из другой таблицы (через соединение с передачей даты в параметр), это очень частый сценарий в отчётах.

Типичные ошибки
01
Наложение отбора в ГДЕ вместо параметров виртуальной таблицы — запрос работает в разы медленнее
02
Соединение с виртуальной таблицей без предварительного отбора — платформа вычисляет остатки по всей базе
03
Использование левого соединения там, где нужно внутреннее, и наоборот — получаете лишние строки с NULL или теряете данные
04
Забытый фильтр на пометку удаления и проведённость — в отчёт попадают «мусорные» документы
05
Получение данных циклом с запросом внутри вместо одного запроса с соединениями

Как проверять и улучшать свои запросы

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

Следите за объёмом результата. Если вы ожидали 10 строк, а получили 10 000 — вероятно, соединение создало декартово произведение из-за неполного условия связи. Если строк меньше, чем ожидалось, — проверьте, не отсекает ли внутреннее соединение строки без пары.

Для понимания производительности полезно знать, что платформа транслирует запрос в SQL. Вам не обязательно глубоко знать SQL, но полезно представлять, что каждое соединение и каждая виртуальная таблица — это реальная работа сервера БД. Простое правило: чем раньше в запросе сокращается объём обрабатываемых данных, тем лучше.

Контрольные точки

Как проверить результат

Количество строк результата
Норма

Соответствует ожиданию на контрольном примере

Тревожный признак

Строк кратно больше — дубли из-за неполного условия соединения

Итоговые суммы
Норма

Сходятся с ручным расчётом по одному объекту

Тревожный признак

Расходятся — ошибка в отборе или группировке

Скорость выполнения
Норма

Запрос на копии рабочего объёма выполняется за секунды

Тревожный признак

Выполняется минутами — отборы не в параметрах виртуальной таблицы

Значения NULL в результате
Норма

NULL только там, где левое соединение оправдано

Тревожный признак

NULL в ключевых полях — не тот тип соединения

Куда двигаться дальше

Когда базовые конструкции освоены, изучайте пакетные запросы и временные таблицы: конструкция ПОМЕСТИТЬ позволяет сохранить промежуточный результат и использовать его в следующих запросах пакета. Это стандартный приём в проведении документов и сложных отчётах — сначала собираете отобранные данные во временную таблицу с индексацией, затем соединяете с ней виртуальные таблицы.

Параллельно осваивайте систему компоновки данных (СКД): в типовых конфигурациях почти все отчёты построены на ней, и текст запроса там — лишь один из элементов схемы. Понимание связки «запрос + СКД» резко расширяет круг задач, которые вы сможете решать. Также полезны темы: объединения (ОБЪЕДИНИТЬ ВСЕ), вложенные запросы, таблица изменений для обменов, выражения ВЫБОР (аналог CASE) и функции работы с датами.

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

Итог

Что важно запомнить

Учите язык запросов только на практике: консоль запросов плюс копия базы. Порядок освоения: простая выборка → условия и параметры → соединения и группировки → виртуальные таблицы → пакетные запросы и СКД. Отборы виртуальных таблиц передавайте в параметры, результат всегда сверяйте с ручным расчётом.

Частые вопросы

Нужно ли знать SQL перед изучением языка запросов 1С?

Нет, это не обязательно. Язык запросов 1С самодостаточен, и многие разработчики начинают именно с него. Знание SQL помогает понимать, что происходит «под капотом», и пригодится при оптимизации, но на старте может даже мешать из-за различий в синтаксисе и возможностях.

Сколько времени занимает изучение языка запросов с нуля?

Базовый уровень — выборки, условия, простые соединения — при ежедневной практике по 1–2 часа обычно осваивается за несколько недель. Уверенное владение виртуальными таблицами, группировками и пакетными запросами требует нескольких месяцев практики на реальных задачах.

Можно ли обойтись только конструктором запросов, не зная синтаксиса?

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

Чем консоль запросов отличается от конструктора?

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

Почему запрос с остатками работает очень медленно?

Чаще всего потому, что отборы наложены в секции ГДЕ, а не переданы в параметры виртуальной таблицы Остатки. В этом случае платформа вычисляет остатки по всем записям регистра, а потом фильтрует. Перенесите условия по измерениям в параметры виртуальной таблицы — обычно это ускоряет запрос в разы.

Где брать задачи для практики?

Используйте демонстрационные базы типовых конфигураций: сформулируйте себе задачи вроде «остатки товаров по складам на дату», «топ-10 контрагентов по сумме продаж», «документы без проведённых оплат». Также полезно разбирать запросы из типовых отчётов и воспроизводить их самостоятельно.