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