Разработка и Конфигурация · 9 мин
SQL в 1С: что это такое и как работает на примерах
Что такое SQL в контексте 1С, как устроен язык запросов 1С, чем он отличается от классического SQL. Разбор примеров запросов, типовых ошибок и ограничений.
Когда пользователи и начинающие разработчики спрашивают «что такое SQL в 1С», они обычно смешивают две разные вещи: классический язык SQL, на котором «разговаривают» СУБД вроде Microsoft SQL Server или PostgreSQL, и встроенный язык запросов платформы 1С, который лишь внешне напоминает SQL. Разобраться в разнице важно, потому что от этого зависит, как вы будете писать отчёты, выбирать данные и оптимизировать производительность.
Платформа 1С хранит данные в реляционной базе, но разработчик почти никогда не обращается к ней напрямую. Вместо этого он пишет запрос на встроенном языке запросов 1С, а платформа сама транслирует его в SQL-выражения конкретной СУБД. Это даёт переносимость: одна и та же конфигурация работает на разных базах без переписывания запросов.
Прямое обращение к базе средствами SQL технически возможно, но поддерживается только для чтения и в специальных сценариях — например, для выгрузки данных во внешние системы аналитики. Любые изменения данных в обход платформы нарушают лицензионные требования и могут повредить целостность базы.
Что такое SQL и какое отношение он имеет к 1С
SQL (Structured Query Language) — стандартный язык для работы с реляционными базами данных: выборки, вставки, обновления и удаления записей. На нём напрямую работают администраторы баз данных и разработчики приложений, не связанных с 1С.
В экосистеме 1С SQL появляется на двух уровнях. Первый — внутренний: платформа сама генерирует SQL-запросы к СУБД, когда вы выполняете запрос из кода, проводите документ или строите отчёт. Второй — внешний: администратор СУБД может выполнять запросы к базе 1С напрямую, но только для чтения и на свой риск, потому что структура таблиц платформы не документирована и может меняться между релизами.
Как устроен язык запросов 1С
Язык запросов 1С опирается на логическую модель данных конфигурации. Вы обращаетесь к «Справочник.Номенклатура» или «Документ.РеализацияТоваровУслуг», а не к физическим таблицам вида _Reference123. Платформа сама знает, какие таблицы и поля задействовать.
Ключевые конструкции повторяют SQL: ВЫБРАТЬ (SELECT), ИЗ (FROM), ГДЕ (WHERE), СГРУППИРОВАТЬ ПО (GROUP BY), УПОРЯДОЧИТЬ ПО (ORDER BY), соединения таблиц (ЛЕВОЕ СОЕДИНЕНИЕ и другие). Русские и английские ключевые слова взаимозаменяемы — можно писать запрос на любом из двух вариантов.
Есть и специфические возможности, которых нет в классическом SQL: виртуальные таблицы регистров (Остатки, Обороты, СрезПоследних), итоги по иерархии, разделители итогов, встроенные функции работы с датами и периодичностью. Именно виртуальные таблицы делают запросы к регистрам накопления и сведений короткими и быстрыми.
Пример запроса 1С с разбором
Рассмотрим типовую задачу: получить список товаров с остатками по конкретному складу. В модуле это выглядит так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Товар,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток > 0
|УПОРЯДОЧИТЬ ПО
| Остатки.Номенклатура.Наименование";
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();
Разбор по частям: обращение идёт к виртуальной таблице «Остатки» регистра накопления. Параметры &Период и &Склад передаются безопасно — платформа подставляет их на уровне СУБД, что исключает SQL-инъекции. Условие «Склад = &Склад» помещено в параметры виртуальной таблицы, а не в секцию ГДЕ — это важно для производительности, потому что отбор выполняется до формирования выборки.
Запрос.Текст = "ВЫБРАТЬ Номенклатура, КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад)"Чем язык запросов 1С отличается от классического SQL
Главное отличие — язык запросов 1С предназначен только для чтения данных. В нём нет аналогов INSERT, UPDATE, DELETE: изменение данных выполняется через объектную модель (запись документов, наборов записей), что гарантирует срабатывание бизнес-логики и контроль прав.
Второе отличие — уровень абстракции. Разработчик не знает и не должен знать реальные имена таблиц и полей в базе. Третье — автоматический учёт прав доступа: механизм RLS (ограничение доступа на уровне записей) добавляет условия в запрос прозрачно для разработчика.
| Критерий | Язык запросов 1С | Классический SQL |
|---|---|---|
| Назначение | Только чтение данных | Чтение и изменение данных |
| Обращение к данным | Через объекты метаданных | Через физические таблицы |
| Переносимость между СУБД | Полная, трансляция платформой | Зависит от диалекта СУБД |
| Права доступа | Учитываются автоматически | Настраиваются отдельно |
Когда допустим прямой SQL к базе 1С
Прямые запросы к СУБД оправданы в узких сценариях: интеграция с внешними BI-системами, разовая аналитика по большим объёмам, диагностика блокировок администратором. Во всех случаях — только чтение.
Для чтения данных из 1С внешними системами предпочтительнее штатные механизмы: HTTP-сервисы, OData-интерфейс, планы обмена. Они сохраняют бизнес-логику и не зависят от внутренней структуры таблиц.
Типичные ошибки при работе с запросами в 1С
Самая частая ошибка — запрос в цикле. Когда внутри обхода строк на каждой итерации выполняется новый запрос, время работы растёт катастрофически. Правильный подход — один запрос с соединением или временной таблицей, затем обход результата.
Вторая ошибка — выборка всех полей и всех строк без отбора, когда нужны две колонки по одному контрагенту. Каждое лишнее поле — это дополнительное соединение на уровне СУБД, особенно для ссылочных полей составного типа.
Как проверить и отладить запрос
Основной инструмент — конструктор запроса в конфигураторе: он позволяет собрать текст визуально, проверить синтаксис и сразу увидеть доступные поля и виртуальные таблицы. Для отладки на реальных данных используют консоль запросов — типовую обработку, выполняющую запрос с параметрами и показывающую результат.
Для анализа скорости полезен технологический журнал и план выполнения запроса на стороне СУБД: они показывают, какие индексы используются и где возникают узкие места. Если запрос к виртуальной таблице работает медленно, первым делом проверьте, переданы ли отборы через параметры виртуальной таблицы.
Как проверить результат
Доли секунды — секунды на типовых объёмах
Десятки секунд и рост с увеличением базы
Условия в параметрах виртуальной таблицы
Все условия только в секции ГДЕ
Один запрос на операцию
Запрос выполняется в цикле
Часто задаваемые вопросы
Можно ли изменять данные базы 1С напрямую через SQL?
Нет. Прямая запись в обход платформы нарушает целостность данных, обходит бизнес-логику и права доступа, а также лицензионные ограничения. Все изменения выполняются только средствами платформы: записью объектов и наборов записей.
Нужно ли знать классический SQL, чтобы писать запросы в 1С?
Не обязательно, но полезно. Базовые конструкции — выборка, фильтрация, группировка, соединения — совпадают по логике, поэтому знание SQL ускоряет освоение. Однако специфику 1С (виртуальные таблицы, итоги, параметры сеанса) придётся изучать отдельно.
Какие СУБД поддерживает платформа 1С?
Платформа работает с Microsoft SQL Server, PostgreSQL (включая отечественные сборки), Oracle Database и IBM Db2. Один и тот же запрос на языке 1С выполняется на любой из них без изменений — трансляцию выполняет платформа.
Что такое виртуальная таблица в запросе 1С?
Это не физическая таблица, а программно формируемая выборка: остатки регистра накопления на дату, обороты за период, срез последних значений регистра сведений. Отборы для неё передаются через параметры в скобках — это критично для скорости.
Как внешней системе получить данные из 1С без прямого SQL?
Используйте штатные интерфейсы: OData (REST-доступ к объектам), HTTP-сервисы и веб-сервисы, планы обмена. Они работают через платформу, соблюдают права и не зависят от внутренней структуры таблиц базы.
Почему запрос в консоли работает быстро, а в отчёте медленно?
Частые причины: в отчёте запрос выполняется под пользователем с ограничением прав RLS, добавляющим условия; используются другие параметры периода; либо отчёт дополнительно обрабатывает результат в коде. Сравните текст запроса и параметры в обоих случаях.
Что важно запомнить
В 1С используется собственный язык запросов, похожий на SQL, но предназначенный только для чтения и работающий с объектами метаданных. Платформа сама транслирует его в SQL конкретной СУБД. Прямая запись в базу через SQL запрещена; для интеграций применяйте OData, HTTP-сервисы и планы обмена.