Открыть сервис

Язык запросов 1С

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

История и назначение

Язык запросов появился вместе с выходом платформы «1С:Предприятие» версии 7.7, где он использовался для доступа к данным через так называемый «Конструктор запросов». В последующих версиях (8.0, 8.1, 8.2, 8.3) язык был значительно расширен: добавлены новые операторы, возможности работы с временными таблицами, оптимизированы алгоритмы выполнения. Основное назначение языка — формирование отчетов, обработка массивов данных, получение агрегированных сведений (сумм, средних значений, количества записей) и связывание данных из разных объектов метаданных (справочников, документов, регистров). Запросы выполняются на сервере 1С, что позволяет минимизировать объем данных, передаваемых клиентскому приложению.

Синтаксис и структура запроса

Запрос на языке 1С представляет собой текстовую строку, которая состоит из нескольких обязательных и необязательных секций. Ключевые слова языка обычно пишутся на русском или английском языке (в зависимости от локализации платформы), но в практике разработки чаще используется русскоязычный синтаксис.

Основные секции запроса

  1. ВЫБРАТЬ (SELECT) — обязательная секция, задающая набор полей, которые будут включены в результат. Может содержать арифметические выражения, вызовы встроенных функций, агрегатные функции (СУММА, МИНИМУМ, МАКСИМУМ, КОЛИЧЕСТВО, СРЕДНЕЕ). Пример: ВЫБРАТЬ Наименование, Количество * Цена КАК Сумма.
  1. ИЗ (FROM) — обязательная секция, указывающая источник данных. В качестве источника может выступать:
  1. ГДЕ (WHERE) — необязательная секция для фильтрации записей. Позволяет задать условия на значения полей (равно, больше, меньше, в списке, между, содержит). Поддерживается использование логических операторов И, ИЛИ, НЕ.
  1. СГРУППИРОВАТЬ ПО (GROUP BY) — необязательная секция, используемая совместно с агрегатными функциями. Группирует записи по одному или нескольким полям.
  1. ИМЕЮЩИЕ (HAVING) — необязательная секция, накладывающая условия на результаты группировки (например, отбор групп, где сумма больше 1000).
  1. УПОРЯДОЧИТЬ ПО (ORDER BY) — необязательная секция для сортировки результатов по возрастанию (по умолчанию) или убыванию (с ключевым словом УБЫВ).
  1. ИТОГИ ПО (TOTAL BY) — специфическая для 1С секция, позволяющая получать итоговые строки (промежуточные суммы) в иерархическом порядке. Аналог оператора ROLLUP в SQL.
  1. ПЕРВЫЕ (TOP) — необязательное ключевое слово, ограничивающее количество записей в результате (например, ВЫБРАТЬ ПЕРВЫЕ 10).

Пример простого запроса

``1c ВЫБРАТЬ Номенклатура.Наименование КАК Товар, Остатки.КоличествоОстаток КАК Остаток ИЗ Справочник.Номенклатура КАК Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки() КАК Остатки ПО Номенклатура.Ссылка = Остатки.Номенклатура ГДЕ Номенклатура.ЭтоГруппа = ЛОЖЬ УПОРЯДОЧИТЬ ПО Номенклатура.Наименование ВОЗР ``

Типы соединений таблиц

Язык запросов 1С поддерживает несколько типов соединений (JOIN), аналогичных SQL:

Соединения могут быть вложенными и многократными.

Виртуальные таблицы

Одной из ключевых особенностей языка запросов 1С является возможность использования виртуальных таблиц. Это специальные таблицы, которые формируются платформой на лету и предоставляют доступ к рассчитанным данным: остаткам, оборотам, остаткам и оборотам регистров накопления, сведениям регистров сведений, записям регистров бухгалтерии и т.д. Виртуальные таблицы могут принимать параметры (период, отбор по измерениям), что позволяет оптимизировать запросы без ручного написания сложных условий.

Пример виртуальной таблицы: РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода, &КонПериода, ПериодичностьДень, ).

Временные таблицы и менеджер временных таблиц

Для выполнения сложных многоэтапных вычислений язык запросов 1С поддерживает временные таблицы. Временная таблица создается с помощью ключевого слова ПОМЕСТИТЬ (INTO) и существует в рамках одного сеанса выполнения запроса. Управление временными таблицами осуществляется через объект платформы Менеджер временных таблиц, который позволяет создавать, наполнять и уничтожать временные таблицы. Это особенно полезно для оптимизации производительности: вместо многократного выполнения одного и того же подзапроса данные помещаются во временную таблицу и используются повторно.

Встроенные функции и выражения

Язык запросов 1С включает множество встроенных функций для работы с различными типами данных:

Отличия от SQL

Несмотря на схожесть концепций, язык запросов 1С имеет ряд принципиальных отличий от стандартного SQL:

ХарактеристикаЯзык запросов 1ССтандартный SQL
Регистр символовНечувствителенЗависит от СУБД
Экранирование идентификаторовКвадратные скобки [ ]Кавычки или обратные апострофы
Работа с датамиФункции ДОБАВИТЬКДАТЕ, РАЗНОСТЬДАТINTERVAL, DATEADD
Поддержка NULLФункция ЕСТЬNULLCOALESCE, ISNULL
Виртуальные таблицыШироко используютсяОтсутствуют (аналог — представления)
Итоги по иерархииСекция ИТОГИ ПОROLLUP, CUBE
ПараметрыПараметры запроса (префикс &)Переменные bind
Динамические структурыНе поддерживаются (структура результата фиксирована)Поддерживаются (динамические запросы)

Ограничения и особенности

Применение в разработке

Язык запросов 1С активно используется при создании:

Для упрощения написания запросов в среде разработки 1С существует Конструктор запроса — визуальный инструмент, позволяющий формировать текст запроса путем выбора таблиц, полей и условий в графическом интерфейсе. Сгенерированный конструктором запрос может быть доработан вручную.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →