DaJet QL - расширяемый язык запросов

16.09.22

Интеграция - WEB-интеграция

DaJet QL поддерживает практический полный синтаксис SQL Server 2005-2016. Кроме этого это расширяемый язык запросов. Обращение к объектам СУБД выполняется в терминах метаданных 1С. Доступ к возможностям этого языка запросов реализован в виде web api сервиса. Результаты запросов возвращаются в виде JSON.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Клиент web api DaJet QL (обработка 1С)
.epf 9,98Kb
4 6 200 руб. Купить
Web сервер DaJet QL для windows x64
.zip 19,73Mb
5 2 500 руб. Купить
Web сервер DaJet QL для linux x64
.zip 13,43Mb
2 2 500 руб. Купить
fn_sql_to_1c_uuid
.sql 0,67Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
 
Обновление от 16.09.2022 

Выпущена новая версия языка запросов 1QL.

Скачать дистрибутив и документацию можно здесь.

Обновление от 11.11.2020

 

Данная статья является продолжением моего выступления на Infostart 2019 Inception. В этой статье я расскажу о развитии проекта и его новых возможностях. Для того, чтобы не нарушать права фирмы 1С на её торговый знак, проект переименован на DaJet.

 

Название DaJet (даджет) образовано от слов data (данные) и jet (реактивный).
Кроме этого является модификацией слова gadget (гаджет) и может быть интерпретировано как "приспособление для работы с данными".

Новые возможности.

1. Добавлена возможность обращаться в одном запросе не только к разным базам данным, расположенным на одном экземпляре SQL Server, но и к связанным (linked) серверам.

2. Реализован сервер web api, позволяющий переводить запросы в терминах 1С в запросы на T-SQL, а также выполнять эти запросы при помощи любого web api клиента.

3. Используется новый парсер языка запросов, поддерживающий практически полный синтаксис SQL Server 2005-2016. Это означает, что поддерживаются как DDL, так и DML инструкции. Также возможно использование DMV, табличных переменных, оконных функций, табличных указаний (хинтов) и т.д. и т.п.

4. Использование нового парсера в перспективе позволяет добавлять в синтаксис языка запросов собственные функции, собственную логику выполнения запроса, а также выполнять программный анализ запроса по заданным критериям.

 

Как это работает.

1. Выгружаем метаданные 1С при помощи специальной обработки в XML.

2. Настраиваем web сервер DaJet QL, который реализован на базе web сервера Kestrel (в основном описываем структуру каталогов сервера СУБД и указываем URL).

3. Выполняем запросы к web серверу DaJet QL при помощи web api.

 

В целях ознакомления с функционалом DaJet QL web api в качестве клиента можно использовать Postman. Коллекция вызовов web api для импорта в Postman прилагается.

Кроме этого, к данной статье прилагается демонстрационный web api клиент в виде обработки 1С.

 

Репозиторий DaJet QL на GitHub

Продолжение: "JSON в запросах DaJet QL".

 

Описание web api сервера DaJet QL.

 

GET metadata/use

 

Пример:

http://localhost:5000/metadata/use

 

Показывает текущий сервер и базу данных, которые используются web сервером DaJet QL в данный момент.

 

POST metadata/use/{server}/{database}

 

Пример:

http://localhost:5000/metadata/use/mysrv/mydb

 

Устанавливает текущий сервер и базу данных для web сервера DaJet QL, в контексте которых выполняются последующие запросы к СУБД. Аналог команды USE [database] SQL Server.

Вызов этого метода обязателен до того, как выполнять запросы.

 

POST script/translate

 

Пример:

http://localhost:5000/script/translate

Тело запроса:

{

   "script": "SELECT Ссылка FROM Документ.ПоступлениеТоваровУслуг"

}

Тело ответа:

{

   "script" : "SELECT _IDRRef FROM _Document123"

}

 

Этот метод позволяет посмотреть какой запрос SQL формирует web сервис DaJet QL перед его выполнением.

 

POST script/execute

 

Пример:

http://localhost:5000/script/execute

Тело запроса:

{

   "script": "SELECT Ссылка FROM Документ.ПоступлениеТоваровУслуг"

}

Тело ответа:

[

   { "_IDRRef" : "{123:da142d98-b1e9-489a-11e5-cfdd69e2ce6c}" },

   { "_IDRRef" : "{123:da142d98-b1e9-489a-11e5-cfdd69e2ce73}" }

]

 

Метод выполняет запрос и возвращает результат его выполнения в формате JSON (массив структур записей).

 

Ограничения языка запросов.

1. Работа с составными типами данных 1С, содержащими простые типы данных, не поддерживается. Поддерживается только работа с составными ссылочными типами данных.

2. Обращение к реквизитам объектов через точку (операция разыменования) с автоматической генерацией LEFT JOIN в запросах SQL не поддерживается. Подробнее о работе с реквизитами ссылочного типа будет рассказано ниже.

 

Обращение к объектам в запросах.

 

1. Обращение к объекту в контексте текущей базы данных:

Документ.ПоступлениеТоваровУслуг

 

2. Обращение к табличной части объекта в контексте текущей базы данных:

Документ.ПоступлениеТоваровУслуг.Товары

 

3. Обращение к объекту из другой базы данных:

[torg_db].Документ.ПоступлениеТоваровУслуг

 

4. Обращение к табличной части объекта из другой базы данных:

[torg_db].Документ.ПоступлениеТоваровУслуг.Товары

 

5. Обращение к объекту связанного сервера:

[bi_server].[torg_db].Документ.ПоступлениеТоваровУслуг

 

6. Обращение к табличной части объекта связанного сервера:

[bi_server].[torg_db].Документ.[ПоступлениеТоваровУслуг+Товары]

 

В последнем случае использование шаблона вида [{Объект}+{ТЧ}] обязательно, так как парсер языка запросов умеет работать только с идентификаторами таблиц, имеющими 4 составных части. Использование квадратных скобок и символа "+" также обязательно.

 

При этом можно также обращаться к таблицам СУБД по их настоящим именам, заданным на уровне СУБД, например, так: SELECT _IDRRef FROM _Document123.

Это даёт возможность обращения в одном запросе к таблицам других СУБД, выгрузки данных во внешние источники или их загрузки из них. Например, это может выглядеть так:

SELECT

   РТУ.СуммаДокумента AS СуммаРеализации,

   CO.OrderSum        AS СуммаЗаказа

FROM

   Документ.РеализацияТоваровУслуг AS РТУ

   LEFT JOIN [orders_db].CustomerOrders AS CO

   ON РТУ.Номер = CO.DocNumber

 

Обращение к ссылочным реквизитам в запросах.

 

Язык запросов DaJet QL работает с ссылочными типами данных не так как 1С. Для работы с такими внутренними значениями ссылки как код типа данных объекта (TRef) и уникальным идентификатором объекта (RRef)в языке запросов DaJet QL на уровне парсера реализована работа с такими специализированными свойствами ссылки как uuid, type и TYPE.

 

Например выполним следующий запрос:

 

SELECT TOP 1

   Ссылка,

Вступайте в нашу телеграмм-группу Инфостарт

DaJet QL обмен данными свёртка данных интеграция web сервисы язык запросов

См. также

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    43917    76    45    

32

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    25064    39    26    

29

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    23727    72    52    

44

WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена по API между конфигурацией 1С:Альфа-Авто 6 и порталом LogicStar. Позволяет работать с несколькими обменами LogicStar разных брендов (CHERY, OMODA, JAECOO, EXEED, TENET) в одной информационной базе в ручном и автоматическом режиме. Поддерживается выгрузка заказ-нарядов, реализаций товаров и товарных остатков.

20740 руб.

13.05.2025    2556    4    0    

7

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    7024    30    4    

30
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tanya_charm 02.05.20 13:19 Сейчас в теме
Коллеги добрый день.
Можно пару кейсов на применение обработки, в каких случаях это "помогает"?
2. zhichkin 1572 02.05.20 17:46 Сейчас в теме
(1) Добрый день!
Спектр применения очень широк. Фактически любая задача, которая не решается при помощи языка запросов 1С, решается при помощи языка запросов 1C#. Например:

1. Обращение к объектам разных баз данных 1С без использования COMConnector в одном запросе 1C#. Даже к базам данных на разных серверах, если эти сервера связанны.
Это позволяет делать быстрые сверки, получение каких-то цифр и прочего из соседних баз без обменов данными, создания web-сервисов на стороне этих соседних баз и прочего интеграционного программирования.

2. Очень быстрый перенос данных из одной базы 1С в другую одним запросом 1C#, даже если схемы баз данных отличаются друг от друга. На практике ускорение достигает пару порядков (больше, чем в 10 раз). Тоже самое касается свёртки данных.

3. Очень быстрое создание web сервисов: написал запрос и всё. Публикация не нужна, сериализация данных 1С в JSON не нужна - всё делается автоматически.

3. Синтаксис и возможности T-SQL полностью доступны. Тут только фантазия разработчика является ограничением.
3. zhichkin 1572 02.05.20 17:49 Сейчас в теме
(1) Пара примеров приводится здесь: https://infostart.ru/public/1228025/
4. kwazi 813 03.05.20 09:27 Сейчас в теме
Пахнет нарушением лицензионного соглашения с 1С
10. mrsmrv 129 07.05.20 17:38 Сейчас в теме
(4) А где 1С запрещает обращаться напрямую к данным? Он же не трогает механизмы платформы 1С. Используются механизмы СУБД же
11. zhichkin 1572 18.05.20 18:24 Сейчас в теме
(10) Всем известный официальный ответ фирмы 1С на Ваш вопрос:
https://v8.1c.ru/priobretenie-i-vnedrenie/otvety-na-tipovye-voprosy-po-litsenzirovaniyu-1s-predpriyatiya-8/
Вопрос № 65 в разделе "Лицензирование разработки в системе 1С:Предприятие 8"

1C# НЕЛЬЗЯ использовать для разработки своих решений на базе 1С:Предприятие 8.х без письменного разрешения фирмы 1С.

1C# является исключительно исследовательским проектом, а также попыткой указать на возможные варианты развития платформы 1С:Предприятие 8.х.
5. Vortigaunt 102 03.05.20 13:37 Сейчас в теме
Отличная тема. Я так понимаю, это эволюционное развитие механизма прямых запросов компоненты 1С++ для 1с77, только теперь и для 1с8.
То есть я смогу делать такие вещи:
- Подзапрос в поле запроса
-Функции OVER (Partition by)
-Grouping sets (обещали конечно в новых платформах)
-Рекурсивные запросы через CTE
-Фишку for xml - которая позволяет получить готовую иерархическую структуру, которую можно вывести в многоуровневую таблицу без танцев с бубном. (правда она почему-то корректно работает на небольших объемах, а на больших - обрезает).

Перечитал публикацию и не увидел, чтобы упоминалось. Если сравнивать с прямыми запросами 1С++, то не хватает виртуальных таблиц:
- РегистрНакопления.Остатки (Обороты, ОстаткиОбороты)
- РегистрСведений.СрезПоследних(СрезПервых) - в 1С++ вместо этого было $ПоследнееЗначение - для работы с периодическими реквизитами.

Неплохо было бы добавить такой функционал в язык 1С#.
6. zhichkin 1572 03.05.20 14:01 Сейчас в теме
(5) Вы всё правильно поняли =)
Название проекта 1C# по замыслу продолжает цепочку 1С >> 1С++ >> 1C#, а также намекает на цепочку эволюции C >> C++ >> C#.

То есть я смогу делать такие вещи:
- Подзапрос в поле запроса
-Функции OVER (Partition by)
-Grouping sets (обещали конечно в новых платформах)
-Рекурсивные запросы через CTE
-Фишку for xml


Да, всё это можно делать. Практические примеры, дополняющие эту статью: JSON в запросах 1C#

Перечитал публикацию и не увидел, чтобы упоминалось. Если сравнивать с прямыми запросами 1С++, то не хватает виртуальных таблиц:
- РегистрНакопления.Остатки (Обороты, ОстаткиОбороты)
- РегистрСведений.СрезПоследних(СрезПервых) - в 1С++ вместо этого было $ПоследнееЗначение - для работы с периодическими реквизитами.

Неплохо было бы добавить такой функционал в язык 1С#.


1. Виртуальные таблицы пока не добавлял, так как обратной связи на эту тему не было и насколько это востребованно не очень понятно. Вообще я планировал их добавить. Наверное это будет одним из первых приоритетов в ближайшее время.

2. Последнее значение можно получать средствами оконной функцииT-SQL LAST_VALUE.
JohnyDeath; +1 Ответить
7. zhichkin 1572 03.05.20 14:09 Сейчас в теме
(5) Более того, если выгрузить метаданные 1С 7.7 в формат XML, который использует 1C#, то можно и к базам 1С 7.7 также обращаться. На практике не проверял, но с точки зрения парсера текста запроса 1C# это должно работать.
Формат этого XML можно посмотреть при выгрузке из 1С 8.x или в обработке ConfigurationExporter.epf, которая идёт в составе дистрибутива web-сервера 1C#.
15. igor_demin@mail.ru 08.06.20 15:16 Сейчас в теме
(7) А как метаданные выгрузить? Не нашел нигде информации об этом?
16. zhichkin 1572 08.06.20 16:13 Сейчас в теме
(15) Такую выгрузку нужно написать для 7-ки самостоятельно. Сам не стал делать, так как не вижу в этом перспективы. Хотя в отношении 1С 7-ой версии работа напрямую с СУБД не нарушает лицензионного соглашения с 1С, тем не менее интереса от использующих 7-ку особо не заметил. Конкретных предложений по доработке не поступало. Бесплатно заниматься этим проектом уже устал - более 3-х лет уже потрачено без какой-либо материальной мотивации.
igor_demin@mail.ru; +1 Ответить
8. Vortigaunt 102 03.05.20 14:23 Сейчас в теме
Виртуальные таблицы пока не добавлял, так как обратной связи на эту тему не было и насколько это востребованно не очень понятно.

Это очень важно. Если срез последних еще несложно самому накидать. То получить остатки с регистра накопления - уже задачка со звездочкой. То есть сложность не в том, чтобы получить таблицу остатков, а в том, чтобы реализовать это максимально эффективно. Например, учесть на какую дату в месяце ты получаешь остаток, если ближе к началу - то плюсовать оборот к остатку на начало месяца, если ближе к концу, то отнимать от остатка на начало следующего (или от оперативных остатков, если месяц и так текущий). Потом еще надо помнить про свойство виртуальных таблиц 1С, то что они автоматически группируют данные по использованным полям. Это тоже желательно учесть в языке 1С#.
9. zhichkin 1572 03.05.20 15:10 Сейчас в теме
(8) Спасибо за обратную связь! Реализую в следующей версии обязательно.
12. savostin.alex 43 05.06.20 01:59 Сейчас в теме
Доброе время суток.

Про TYPEOF - Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright © 2017 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Enterprise LTSC 2019 10.0 <X64> (Build 17763: )
13. zhichkin 1572 05.06.20 03:22 Сейчас в теме
(12) Сделал всё по своей инструкции. Работает "из коробки". Прилагаю скриншот из Postman.
Прикрепленные файлы:
14. zhichkin 1572 05.06.20 03:32 Сейчас в теме
(12) Может быть предварительно забыли выполнить метод /metadata/use ?
Прикрепленные файлы:
17. Shmell 668 04.05.21 12:52 Сейчас в теме
Не получается выполнить запрос. Что не так? "Select 1.0" работает. Метаданные выгружены.
Прикрепленные файлы:
18. Shmell 668 04.05.21 12:58 Сейчас в теме
Но если указывать скулевские имена - то работает
Прикрепленные файлы:
19. zhichkin 1572 04.05.21 14:47 Сейчас в теме
(18) Добрый день!
Это конечно же не очевидно, но необходимо задавать синонимы полям выборки.
Попробуйте так:
SEL ECT Ссылка AS [Ссылка] FR OM Справочник.Валюты;
Для отправки сообщения требуется регистрация/авторизация