Разработка и Конфигурация · 11 мин
Как изучить язык запросов в 1С: практическое руководство
Практическое руководство по изучению языка запросов 1С: базовый синтаксис, конструктор запросов, соединения, итоги, виртуальные таблицы и типичные ошибки новичков.
Язык запросов — основной инструмент получения данных в 1С. Без него невозможно писать отчёты, обработки, движения документов и любые механизмы, где нужно выбрать информацию из базы. Хорошая новость: язык запросов 1С освоить проще, чем большинство языков программирования, — он декларативный, похож на SQL и содержит ограниченный набор конструкций.
Реалистичный путь выглядит так: сначала вы учитесь читать простые запросы и собирать их в конструкторе, затем осваиваете соединения, группировки и виртуальные таблицы, после чего переходите к оптимизации и пакетным запросам. При регулярной практике базовый уровень достигается за несколько недель.
Ниже — конкретный маршрут: что учить, в каком порядке, на чём тренироваться и какие ошибки тормозят новичков чаще всего.
Что такое язык запросов 1С и зачем он нужен
Язык запросов 1С — это способ описать, какие данные нужны из базы, не заботясь о том, как платформа их физически получит. Вы пишете «выбрать товары, у которых остаток больше нуля», а платформа сама строит обращение к СУБД. Синтаксис напоминает SQL, но имеет особенности: русскоязычные и англоязычные ключевые слова взаимозаменяемы, есть обращение к объектам метаданных через точку (Справочник.Номенклатура) и встроенные виртуальные таблицы.
Запросы используются повсюду: в отчётах на СКД, в проведении документов, в обработках, в динамических списках, в регламентных заданиях. Даже если вы планируете работать только с формами и бизнес-логикой, без понимания запросов вы будете постоянно упираться в ограничения.
Подготовьте среду для практики
Изучать запросы «по книжке» без выполнения — пустая трата времени. Вам нужна среда, где можно безопасно писать и запускать запросы. Минимальный набор: установленная платформа 1С, конфигуратор и база с данными. Подойдёт учебная версия платформы, демонстрационная конфигурация (например, «Управление торговлей» в демо-режиме) или копия вашей рабочей базы.
Главный инструмент новичка — консоль запросов. Это внешняя обработка, которая позволяет писать запрос, выполнять его и сразу видеть результат. Консоль запросов входит в состав типовых инструментов разработчика и легко находится в открытых источниках. Работа в консоли убирает лишний слой: не нужно создавать отчёт или обработку, чтобы проверить одну выборку.
Освойте базовый синтаксис: ВЫБРАТЬ, ИЗ, ГДЕ
Начните с минимальной конструкции: выбрать несколько полей из одного справочника. Например, запрос к справочнику номенклатуры с отбором по признаку «не помечен на удаление». Здесь важно понять три вещи: как обращаться к таблице объекта метаданных, как перечислять поля и как задавать условия через ГДЕ (WHERE).
Дальше добавляйте по одной конструкции: сортировка через УПОРЯДОЧИТЬ ПО, ограничение количества строк через ПЕРВЫЕ, уникальные значения через РАЗЛИЧНЫЕ, параметры через амперсанд (&Параметр). Параметры — критически важная тема: значения в условия всегда передавайте параметрами, а не подстановкой строк, это и безопаснее, и быстрее.
Тренируйтесь так: берёте простую задачу («список контрагентов, у которых заполнен ИНН»), собираете запрос в конструкторе, затем переписываете его вручную по памяти и сверяете результат. Конструктор запросов — легальный и рекомендуемый помощник: он генерирует корректный синтаксис и помогает запомнить порядок секций.
- 1Откройте консоль запросов на копии базы и вызовите конструктор запросов
- 2Выберите одну таблицу (справочник) и 2–3 поля, выполните запрос, посмотрите результат
- 3Добавьте условие ГДЕ с параметром и выполните снова
- 4Добавьте сортировку и ограничение ПЕРВЫЕ 10
- 5Перепишите тот же запрос вручную без конструктора и сравните результат
Соединения таблиц и группировки
Следующий уровень — соединения. В реальных задачах данные почти всегда лежат в нескольких таблицах: документ и его табличная часть, номенклатура и её цены, заказ и оплаты по нему. Освойте ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN) — оно используется чаще всего, а также ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Поймите разницу: внутреннее соединение отбрасывает строки без пары, левое — сохраняет все строки левой таблицы, подставляя NULL.
Группировки нужны для агрегации: суммы продаж по контрагентам, количество документов по месяцам. Здесь изучаются СГРУППИРОВАТЬ ПО, агрегатные функции СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ и фильтрация групп через ИМЕЮЩИЕ. Частая ошибка новичков — включить в выборку поле, которое не входит ни в группировку, ни в агрегат: платформа такого не позволит, и важно понимать почему.
Конструкция ИТОГИ ПО заслуживает отдельного внимания: она добавляет в результат итоговые строки по указанным измерениям, что удобно для иерархических выборок. Но в отчётах на СКД итоги обычно считает сама СКД, поэтому ИТОГИ чаще встречаются в программной обработке результата запроса.
Виртуальные таблицы регистров — сердце учётных задач
Большинство прикладных запросов в 1С работают не с «сырыми» таблицами, а с виртуальными таблицами регистров: Остатки, ОстаткиИОбороты, Обороты, СрезПоследних, СрезПервых. Именно через них получают складские остатки, взаиморасчёты, остатки на счетах, актуальные цены и курсы валют.
Ключевой навык — правильно передавать параметры виртуальной таблице. Период, условия отбора и список измерений указываются в скобках сразу после имени таблицы. Отборы по измерениям регистра (номенклатура, склад, организация) всегда передавайте в параметры виртуальной таблицы, а не в секцию ГДЕ: это кардинально влияет на скорость, потому что платформа сразу ограничит вычисляемый объём данных.
СрезПоследних регистра сведений — отдельная типовая задача: получить актуальную цену, ответственного, курс на дату. Потренируйтесь получать срез на конкретную дату и на дату из другой таблицы (через соединение с передачей даты в параметр), это очень частый сценарий в отчётах.
Как проверять и улучшать свои запросы
Работающий запрос — ещё не значит правильный. Проверяйте результат на контрольных примерах: возьмите один документ или одного контрагента, посчитайте ожидаемый итог вручную по данным базы и сравните с результатом запроса. Расхождение почти всегда означает ошибку в соединении или отборе.
Следите за объёмом результата. Если вы ожидали 10 строк, а получили 10 000 — вероятно, соединение создало декартово произведение из-за неполного условия связи. Если строк меньше, чем ожидалось, — проверьте, не отсекает ли внутреннее соединение строки без пары.
Для понимания производительности полезно знать, что платформа транслирует запрос в SQL. Вам не обязательно глубоко знать SQL, но полезно представлять, что каждое соединение и каждая виртуальная таблица — это реальная работа сервера БД. Простое правило: чем раньше в запросе сокращается объём обрабатываемых данных, тем лучше.
Как проверить результат
Соответствует ожиданию на контрольном примере
Строк кратно больше — дубли из-за неполного условия соединения
Сходятся с ручным расчётом по одному объекту
Расходятся — ошибка в отборе или группировке
Запрос на копии рабочего объёма выполняется за секунды
Выполняется минутами — отборы не в параметрах виртуальной таблицы
NULL только там, где левое соединение оправдано
NULL в ключевых полях — не тот тип соединения
Куда двигаться дальше
Когда базовые конструкции освоены, изучайте пакетные запросы и временные таблицы: конструкция ПОМЕСТИТЬ позволяет сохранить промежуточный результат и использовать его в следующих запросах пакета. Это стандартный приём в проведении документов и сложных отчётах — сначала собираете отобранные данные во временную таблицу с индексацией, затем соединяете с ней виртуальные таблицы.
Параллельно осваивайте систему компоновки данных (СКД): в типовых конфигурациях почти все отчёты построены на ней, и текст запроса там — лишь один из элементов схемы. Понимание связки «запрос + СКД» резко расширяет круг задач, которые вы сможете решать. Также полезны темы: объединения (ОБЪЕДИНИТЬ ВСЕ), вложенные запросы, таблица изменений для обменов, выражения ВЫБОР (аналог CASE) и функции работы с датами.
Закрепляйте знания на реальных задачах: возьмите типовой отчёт, откройте его запрос и разберите каждую секцию. Это лучший учебный материал — вы видите, как профессиональные разработчики строят запросы под реальные требования.
Что важно запомнить
Учите язык запросов только на практике: консоль запросов плюс копия базы. Порядок освоения: простая выборка → условия и параметры → соединения и группировки → виртуальные таблицы → пакетные запросы и СКД. Отборы виртуальных таблиц передавайте в параметры, результат всегда сверяйте с ручным расчётом.
Частые вопросы
Нужно ли знать SQL перед изучением языка запросов 1С?
Нет, это не обязательно. Язык запросов 1С самодостаточен, и многие разработчики начинают именно с него. Знание SQL помогает понимать, что происходит «под капотом», и пригодится при оптимизации, но на старте может даже мешать из-за различий в синтаксисе и возможностях.
Сколько времени занимает изучение языка запросов с нуля?
Базовый уровень — выборки, условия, простые соединения — при ежедневной практике по 1–2 часа обычно осваивается за несколько недель. Уверенное владение виртуальными таблицами, группировками и пакетными запросами требует нескольких месяцев практики на реальных задачах.
Можно ли обойтись только конструктором запросов, не зная синтаксиса?
Нет. Конструктор — отличный помощник и учебный инструмент, но он не покрывает все возможности языка: параметры виртуальных таблиц, пакетные запросы, сложные выражения и отладку удобнее делать в тексте. Кроме того, читать чужие запросы в типовых конфигурациях придётся постоянно.
Чем консоль запросов отличается от конструктора?
Конструктор — это визуальный построитель внутри конфигуратора: вы выбираете таблицы и поля мышкой, а он генерирует текст. Консоль запросов — обработка, которая позволяет выполнить любой запрос на данных конкретной базы и увидеть результат. Оптимально использовать их вместе: собирать в конструкторе, проверять в консоли.
Почему запрос с остатками работает очень медленно?
Чаще всего потому, что отборы наложены в секции ГДЕ, а не переданы в параметры виртуальной таблицы Остатки. В этом случае платформа вычисляет остатки по всем записям регистра, а потом фильтрует. Перенесите условия по измерениям в параметры виртуальной таблицы — обычно это ускоряет запрос в разы.
Где брать задачи для практики?
Используйте демонстрационные базы типовых конфигураций: сформулируйте себе задачи вроде «остатки товаров по складам на дату», «топ-10 контрагентов по сумме продаж», «документы без проведённых оплат». Также полезно разбирать запросы из типовых отчётов и воспроизводить их самостоятельно.