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

16.09.22

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

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

Скачать файлы

Наименование Файл Версия Размер
Клиент web api DaJet QL (обработка 1С)
.epf 9,98Kb
3
.epf 9,98Kb 3 Скачать
Web сервер DaJet QL для windows x64
.zip 19,73Mb
5
.zip 19,73Mb 5 Скачать
Web сервер DaJet QL для linux x64
.zip 13,43Mb
2
.zip 13,43Mb 2 Скачать
fn_sql_to_1c_uuid
.sql 0,67Kb
2
.sql 0,67Kb 2 Скачать
 
Обновление от 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

   Ссылка,

   Ссылка.uuid,

   Ссылка.type

FROM

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

 

В результате мы получим следующий SQL запрос, используя web метод script/translate:

 

SELECT TOP 1

   (0x0000007B + _IDRRef), /* binary(20) */

   _IDRRef,               /* binary(16) */

   0x0000007B            /* binary(4) */

FROM

   _Document123

 

Таким образом мы видим, что свойство uuid возвращает уникальный идентификатор ссылки, что соответствует полю таблицы СУБД, которое хранит это значение.

Свойство type возвращает код типа объекта, который, в том числе, можно найти в названии таблицы объекта. В данном случае это число 123. Для однозначных реквизитов парсер подставит константу, а для составных ссылочных типов наименование поля таблицы СУБД, в котором хранится это значение.

Специальное свойство TYPE ссылки всегда содержит константу 0x08, что соответствует значению ссылочного типа данных в структуре хранения значений составных типов в таблицах СУБД. Это свойство необходимо исключительно для выполнения соединений между таблицами, так как поле, имеющее суффикс _TYPE, на уровне СУБД может входить в индекс. Более подробно об этом рассказано ниже.

 

Функция TYPEOF.

 

Язык запросов DaJet QL реализует специальную функцию TYPEOF для получения кода типа объекта аналогично функции ССЫЛКА в языке запросов 1С.

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

SELECT TOP 1

   Ссылка.type,

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

FROM

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

 

Получим следующий код SQL:

SELECT TOP 1

   0x0000007B,

   0x0000007B

FROM

   _Document123

 

Эта функция нужна также, как и специальное свойство TYPE (см. выше), для получения кода типа объекта при соединении с полями составного типа или таблицами других баз данных. Чтобы понять зачем это нужно, предлагаю рассмотреть два практических примера ниже.

 

Соединение по реквизиту составного типа.

 

Вариант № 1 (используем специальное свойство type).

-- Запрос на языке DaJet QL

SELECT TOP 1
   ФЛ.Наименование AS ФИО,
   БСК.НомерСчета  AS НомерСчета
FROM
   Справочник.ФизическиеЛица AS ФЛ
   INNER JOIN Справочник.БанковскиеСчетаКонтрагентов AS БСК
   ON  ФЛ.Ссылка.uuid = БСК.Владелец.uuid
   AND ФЛ.Ссылка.type = БСК.Владелец.type
   AND ФЛ.Ссылка.TYPE = БСК.Владелец.TYPE

-- Запрос на T_SQL

SELECT TOP 1
   ФЛ._Description AS ФИО,
   БСК._Fld2205    AS НомерСчета
FROM
   _Reference477 AS ФЛ
   INNER JOIN _Reference41 AS БСК
   ON  ФЛ._IDRRef = БСК._OwnerID_RRRef
   AND 0x000001DD = БСК._OwnerID_RTRef
   AND 0x08       = БСК._OwnerID_TYPE;

Вариант № 2 (используем функцию TYPEOF).

-- Запрос на DaJet QL

SELECT TOP 1
   ФЛ.Наименование AS ФИО,
   БСК.НомерСчета  AS НомерСчета
FROM
   Справочник.ФизическиеЛица AS ФЛ
   INNER JOIN Справочник.БанковскиеСчетаКонтрагентов AS БСК
   ON  ФЛ.Ссылка.uuid                    = БСК.Владелец.uuid
   AND TYPEOF(Справочник.ФизическиеЛица) = БСК.Владелец.type
   AND 0x08                              = БСК.Владелец.TYPE

-- Запрос на T_SQL

SELECT TOP 1
   ФЛ._Description AS ФИО,
   БСК._Fld2205    AS НомерСчета
FROM
   _Reference477 AS ФЛ
   INNER JOIN _Reference41 AS БСК
   ON ФЛ._IDRRef  = БСК._OwnerID_RRRef
   AND 0x000001DD = БСК._OwnerID_RTRef
   AND 0x08       = БСК._OwnerID_TYPE;

В данном случае справочник "БанковскиеСчетаКонтрагентов" имеет два справочника владельца: "Контрагенты" и "ФизическиеЛица". На уровне СУБД реквизит "Владелец" состоит из трёх полей. Чтобы использовать индекс по всем этим полям, необходимо соединяться вышеуказанным способом. В таких случаях можно использовать оба варианта: с использованием специального свойства type и функции TYPEOF.

 

Сверка движений документов из разных баз данных.

 

Предположим, что у нас есть две базы данных: торговля и бухгалтерия. Торговля периодически выгружает в бухгалтерию документы установки цен. Нам необходимо выполнить сверку наличия выгруженных из торговли в бухгалтерию документов, а также соответствие цен в обеих базах. Предположим, что документы синхронизируются по ссылкам. Базы данных называются trade и accounting. Запрос может выглядеть так:

SELECT
   УТДок.Дата  AS ТоргДата,
   УТДок.Номер AS ТоргНомер,
   УТЦН.Цена   AS ТоргЦена,
   БПДок.Дата  AS БухДата,
   БПДок.Номер AS БухНомер,
   БПЦН.Цена   AS БухЦена
FROM
             trade.РегистрСведений.ЦеныНоменклатуры      AS УТЦН
   LEFT JOIN accounting.РегистрСведений.ЦеныНоменклатуры AS БПЦН
   ON  УТЦН.Регистратор.uuid = БПЦН.Регистратор.uuid
   AND УТЦН.Регистратор.type = TYPEOF(trade.Документ.УстановкаЦенНоменклатуры)
   AND БПЦН.Регистратор.type = TYPEOF(accounting.Документ.УстановкаЦенНоменклатуры)

   LEFT JOIN trade.Документ.УстановкаЦенНоменклатуры AS УТДок
   ON  УТЦН.Регистратор.uuid = УТДок.Ссылка.uuid
   AND УТЦН.Регистратор.type = УТДок.Ссылка.type

   LEFT JOIN accounting.Документ.УстановкаЦенНоменклатуры AS БПДок
   ON  БПЦН.Регистратор.uuid = БПДок.Ссылка.uuid
   AND БПЦН.Регистратор.type = БПДок.Ссылка.type

В данном запросе предикат первого JOIN’а выглядит следующим образом:

ON  УТЦН.Регистратор.uuid = БПЦН.Регистратор.uuid
AND УТЦН.Регистратор.type = TYPEOF(trade.Документ.УстановкаЦенНоменклатуры)
AND БПЦН.Регистратор.type = TYPEOF(accounting.Документ.УстановкаЦенНоменклатуры)

Соединение по полю _RecorderRRef (Регистратор.uuid) не вызывает вопросов, так как синхронизация документов выполняется как раз таки по внутреннему идентификатору объектов. Однако, соединение по полю _RecorderTRef (Регистратор.type) "в лоб" невозможно, так как документы "УстановкаЦенНоменклатуры" в разных базах имеют разные значения кодов типов объектов. Именно в таком случае пригождается функция TYPEOF. Она помогает установить соответствие между документами из разных баз данных. Эдакая конвертация данных "на лету".

 

Ещё несколько примеров использования в статье "JSON в запросах DaJet QL".

 

Настройка web сервера DaJet QL.

 

1. Распаковать установочный архив DaJet QL в любой каталог.

2. Создать в этом каталоге каталог metadata.

3. Внутри каталога metadata создать каталог c именем сервера СУБД.

4. Выгрузить метаданные 1С обработкой ConfigurationExporter83.epf

в файл xml. Назвать этот файл также как называется база данных

СУБД. Положить этот файл в созданный ранее каталог сервера.

5. В файле настроек web сервера DaJet QL appsettings.json в секции

MetadataSettings повторить структуру каталогов и баз данных

СУБД. Файл настроек, чтобы долго не искать, можно открыть при

помощи show-web-server-settings.bat.

6. При необходимости настроить URL, по которому будет запускаться

web сервер DaJet QL, в том же файле настроек appsettings.json.

7. Web cервер DaJet QL готов к работе. Его можно запустить при помощи

файла run-web-server.bat.

 

Для облегчения понимания как настроить web сервер архив установки содержит уже настроенный каталог для тестового окружения автора статьи. То же самое касается файла appsettings.json.

 

Системные требования.

 

1. Web сервер DaJet QL скомпилирован для платформы win-x64 и linux-x64.

2. Для подключения к SQL Server web сервер DaJet QL использует

встроенную аутентификацию Windows. Следовательно запускать его

нужно под учётной записью, которая имеет доступ к серверу СУБД

и нужным базам данных.

Для linux версии необходимо в Линуксе подключить протокол kerberos для аутентификации на SQL Server. Как это сделать я сам не знаю, но судя по отзывам пользователей DaJet QL, которые пробовали запускаться на Линукс, им это удалось.

3. Требуется установка .NET Core 3.1.3

.NET качаем здесь: https://dotnet.microsoft.com/download

 

Вместо заключения.

 

Использовать web api сервера DaJet QL можно при помощи Postman. Для этого в каталоге утилит лежит файл "OneCSharp Scripting.postman_collection.json". Просто импортируйте эту коллекцию в свой Postman и всё — можно гонять запросы.

 

Кроме этого для 1С есть обработка OneCSharpUI.epf. Это реализация клиента web api DaJet QL. Для работы обработки требуется платформа 1С:Предприятие 8.3.6 и выше.

Обработка платная: приобретая её, вы помогаете развитию проекта. Заранее благодарю всех за эту помощь!

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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    15745    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17548    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16358    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25737    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88579    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tanya_charm 02.05.20 13:19 Сейчас в теме
Коллеги добрый день.
Можно пару кейсов на применение обработки, в каких случаях это "помогает"?
2. zhichkin 1438 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 1438 02.05.20 17:49 Сейчас в теме
4. kwazi 615 03.05.20 09:27 Сейчас в теме
Пахнет нарушением лицензионного соглашения с 1С
10. mrsmrv 125 07.05.20 17:38 Сейчас в теме
(4) А где 1С запрещает обращаться напрямую к данным? Он же не трогает механизмы платформы 1С. Используются механизмы СУБД же
11. zhichkin 1438 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 96 03.05.20 13:37 Сейчас в теме
Отличная тема. Я так понимаю, это эволюционное развитие механизма прямых запросов компоненты 1С++ для 1с77, только теперь и для 1с8.
То есть я смогу делать такие вещи:
- Подзапрос в поле запроса
-Функции OVER (Partition by)
-Grouping sets (обещали конечно в новых платформах)
-Рекурсивные запросы через CTE
-Фишку for xml - которая позволяет получить готовую иерархическую структуру, которую можно вывести в многоуровневую таблицу без танцев с бубном. (правда она почему-то корректно работает на небольших объемах, а на больших - обрезает).

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

Неплохо было бы добавить такой функционал в язык 1С#.
6. zhichkin 1438 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 1438 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 1438 08.06.20 16:13 Сейчас в теме
(15) Такую выгрузку нужно написать для 7-ки самостоятельно. Сам не стал делать, так как не вижу в этом перспективы. Хотя в отношении 1С 7-ой версии работа напрямую с СУБД не нарушает лицензионного соглашения с 1С, тем не менее интереса от использующих 7-ку особо не заметил. Конкретных предложений по доработке не поступало. Бесплатно заниматься этим проектом уже устал - более 3-х лет уже потрачено без какой-либо материальной мотивации.
igor_demin@mail.ru; +1 Ответить
8. Vortigaunt 96 03.05.20 14:23 Сейчас в теме
Виртуальные таблицы пока не добавлял, так как обратной связи на эту тему не было и насколько это востребованно не очень понятно.

Это очень важно. Если срез последних еще несложно самому накидать. То получить остатки с регистра накопления - уже задачка со звездочкой. То есть сложность не в том, чтобы получить таблицу остатков, а в том, чтобы реализовать это максимально эффективно. Например, учесть на какую дату в месяце ты получаешь остаток, если ближе к началу - то плюсовать оборот к остатку на начало месяца, если ближе к концу, то отнимать от остатка на начало следующего (или от оперативных остатков, если месяц и так текущий). Потом еще надо помнить про свойство виртуальных таблиц 1С, то что они автоматически группируют данные по использованным полям. Это тоже желательно учесть в языке 1С#.
9. zhichkin 1438 03.05.20 15:10 Сейчас в теме
(8) Спасибо за обратную связь! Реализую в следующей версии обязательно.
12. savostin.alex 83 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 1438 05.06.20 03:22 Сейчас в теме
(12) Сделал всё по своей инструкции. Работает "из коробки". Прилагаю скриншот из Postman.
Прикрепленные файлы:
14. zhichkin 1438 05.06.20 03:32 Сейчас в теме
(12) Может быть предварительно забыли выполнить метод /metadata/use ?
Прикрепленные файлы:
17. Shmell 533 04.05.21 12:52 Сейчас в теме
Не получается выполнить запрос. Что не так? "Select 1.0" работает. Метаданные выгружены.
Прикрепленные файлы:
18. Shmell 533 04.05.21 12:58 Сейчас в теме
Но если указывать скулевские имена - то работает
Прикрепленные файлы:
19. zhichkin 1438 04.05.21 14:47 Сейчас в теме
(18) Добрый день!
Это конечно же не очевидно, но необходимо задавать синонимы полям выборки.
Попробуйте так:
SEL ECT Ссылка AS [Ссылка] FR OM Справочник.Валюты;
Оставьте свое сообщение