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
3
3 Скачать (10 SM) Купить за 4 550 руб.
Web сервер DaJet QL для windows x64
.zip 19,73Mb
5
5 Скачать (1 SM) Купить за 1 850 руб.
Web сервер DaJet QL для linux x64
.zip 13,43Mb
2
2 Скачать (1 SM) Купить за 1 850 руб.
fn_sql_to_1c_uuid
.sql 0,67Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.
 
Обновление от 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 сервисы язык запросов

См. также

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

Функциональное решение для торговли на всех популярных маркетплейсах. Работает со схемами FBO и FBS. Простое в использовании и установке, не вносит изменения в код программы. Существенно упрощает работу с товарным ассортиментом, обработку заказов с площадок, работу с поставками, а также ведение аналитики по продажам и остаткам.

72000 руб.

19.07.2024    1465    52    0    

3

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

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

12000 руб.

02.02.2021    17801    49    50    

29

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14183    41    8    

16

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

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

3900 руб.

08.11.2017    63207    404    295    

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

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

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

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