JSON в запросах DaJet QL

Публикация № 1228025

Разработка - Практика программирования

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

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

Данная публикация является продолжением моей статьи про язык запросов DaJet QL. Пишу я её больше для себя и всех тех, кто заинтересовался технологией DaJet QL. Отвечаю таким образом на их вопросы.

 

Кроме этого, в этой статье я хочу рассказать о новых возможностях SQL Server 2016, которые позволяют эффективно работать с данными в формате JSON непосредственно в языке запросов. Совмещаю приятное с полезным =)

 

Дано:

1. Платформа 1С:Предприятие 8.3.15.1534

2. Microsoft SQL Server 2016 Express Edition

3. Управление торговлей, редакция 11.2 (11.2.3.159)

4. Бухгалтерия предприятия, редакция 3.0 (3.0.67.63)

5. Web сервер DaJet QL

 

Примеры:

1. Получение курсов валют из УТ в формате JSON.

2. Чтение курсов валют в формате JSON в БП.

3. Перенос курсов валют из УТ в БП одним запросом.

Обе задачи выполняются средствами языка запросов DaJet QL.

Ссылка где взять web сервер DaJet QL дана выше.

Синхронизация справочников "Валюты" выполняется по коду.

 

1. Получение курсов валют в формате JSON.

 

Запрос для DaJet QL:

DECLARE @period datetime = '4020-04-20';

SELECT
(
	SELECT
		DATEADD(YEAR, -2000, КурсыВалют.Период) AS [Period],
		Валюты.Код                              AS [Currency],
		КурсыВалют.Кратность                    AS [Factor],
		КурсыВалют.Курс                         AS [Rate]
	FROM
		РегистрСведений.КурсыВалют AS КурсыВалют
		INNER JOIN Справочник.Валюты AS Валюты
		ON КурсыВалют.Валюта.uuid = Валюты.Ссылка.uuid
	WHERE
		КурсыВалют.Период = @period
	FOR JSON PATH
) AS json

Результат в формате JSON:

[
  {
    "Period": "2020-04-20T00:00:00",
    "Currency": "840",
    "Factor": 1,
    "Rate": 65.1234
  },
  {
    "Period": "2020-04-20T00:00:00",
    "Currency": "978",
    "Factor": 1,
    "Rate": 70.4321
  }
]

2. Чтение курсов валют в формате JSON.

 

Запрос для DaJet QL:

DECLARE @json nvarchar(max) = N'
[
	{
		"Period" : "2020-04-20T00:00:00",
		"Currency" : "840",
		"Factor" : 1,
		"Rate" : 65.1234
	},
	{
		"Period" : "2020-04-20T00:00:00",
		"Currency" : "978",
		"Factor" : 1,
		"Rate" : 70.4321
	}
]';

SELECT
	DATEADD(YEAR, 2000, JsonTable.[Период]) AS [Период],
	JsonTable.[Валюта]                      AS [КодВалюты],
	JsonTable.[Кратность]                   AS [Кратность],
	JsonTable.[Курс]                        AS [Курс]
FROM
	OPENJSON(@json)
WITH (
	[Период]    datetime      '$.Period',
	[Валюта]    nvarchar(3)   '$.Currency',
	[Кратность] numeric(10)   '$.Factor',
	[Курс]      numeric(10,4) '$.Rate'
) AS JsonTable
INNER JOIN Справочник.Валюты AS Валюты
ON JsonTable.Валюта = Валюты.Код;

Результат в табличном виде:

Период

КодВалюты

Кратность

Курс

4020-04-20T00:00:00

840

1

65,1234

4020-04-20T00:00:00

978

1

70,4321

 

3. Перенос курсов валют из УТ в БП одним запросом.

 

Запрос для DaJet QL:

DECLARE @period datetime = '4020-04-20';

INSERT [accounting_3_0_72_72_demo].РегистрСведений.КурсыВалют
(
	Период,
	Валюта.uuid,
	Кратность,
	Курс,
	ОбластьДанныхОсновныеДанные
)
SELECT
	КурсыВалют.Период    AS [Период],
	БПВалюты.Ссылка.uuid AS [Валюта],
	КурсыВалют.Кратность AS [Кратность],
	КурсыВалют.Курс      AS [Курс],
	0                    AS [ОбластьДанныхОсновныеДанные]
FROM
	[trade_11_2_3_159_demo].РегистрСведений.КурсыВалют AS КурсыВалют

	INNER JOIN [trade_11_2_3_159_demo].Справочник.Валюты AS УТВалюты
	ON КурсыВалют.Валюта.uuid = УТВалюты.Ссылка.uuid

	INNER JOIN [accounting_3_0_72_72_demo].Справочник.Валюты AS БПВалюты
	ON УТВалюты.Код = БПВалюты.Код

WHERE
	КурсыВалют.Период = @period

Результат:

Курсы валют перенесены из УТ в регистр сведений "КурсыВалют" БП.

 

Примечания:

 

В этих примерах используется два способа передачи параметров в запросы DaJet QL. Для этого можно использовать возможности оператора DECLARE, а также функционал SQL Server 2016 и выше для передачи табличных данных в запрос в формате JSON.

 

При этом стоит отметить, что технику получения табличных данных из JSON во 2-ом примере можно успешно использовать в 3-ем примере для вставки этих данных в таблицу СУБД.

 

Для организации взаимодействия между удалёнными серверами SQL Server, которые не являются связанными (linked), можно использовать технику получения данных в формате JSON на одном сервере, с последующей передачей и обработкой этих данных на втором сервере. Для этого можно установить на этих серверах по одному web серверу DaJet QL, а управлять ими вообще при помощи третьего.

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. awk 714 24.04.20 07:50 Сейчас в теме
Следующая статья "XML в запросах 1C#" :)

SELECT *
AS XML

За статью плюс.
2. tanya_charm 03.05.20 10:05 Сейчас в теме
Ознакомился. Толково. Жду дальше.
3. oleganatolievich 145 01.06.20 13:41 Сейчас в теме
как оно прикручивается к КД 3.0? имхо, никак.
прикольно конечно, плюс если уиды не те в БП и УТ?
4. zhichkin 720 01.06.20 14:45 Сейчас в теме
(3)
как оно прикручивается к КД 3.0?

Цели прикрутить к КД пока не было.
если уиды не те в БП и УТ?

Можно по кодам синхронизироваться или другим реквизитам.
Предикат WHERE переписать соответствующим образом.
Плюс для этого есть ещё таблицы соответствий.
Например, регистр сведений "СоответствияОбъектовИнформационныхБаз" в БСП.
5. oleganatolievich 145 01.06.20 14:55 Сейчас в теме
(4) если вы приводите в пример 2 типовые конфигурации, то хотелось бы увидеть пример реального кейса и возможную реализацию в КД 3.0.
сам то я понимаю, что ее скорее всего не будет, ибо там переписывать придется много.
в итоге можно свой обмен с преферансом и куртизанками придумать, чтобы достичь универсальности.
кроме того, базы должны быть на 1м сервере MS SQL. мы же про него только говорим?
6. zhichkin 720 01.06.20 15:15 Сейчас в теме
(5) Я всё делаю только под SQL Server, так как знаний по Postgre нет, но потенциально и это возможно.
Статью написал для себя (на память) и друзей, которые озадачились использовать у себя на практике без КД.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    4383    23    Infostart    2    

Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

29.06.2020    2897    0    WildHare    20    

Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

22.06.2020    5485    0    WildHare    22    

Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

15.06.2020    8709    0    WildHare    34    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    35278    0    unichkin    45    

1C# – 1С моей мечты

Интеграция v8 Бесплатно (free)

Встроенных в платформу 1С возможностей не всегда хватает для построения сложных интеграционных схем между различными 1С и не-1С-решениями на базе MS SQL Server. Как сделать интеграцию между SQL-базами более гибкой с помощью платформы 1С# на конференции Infostart Event 2019 Inception рассказал Дмитрий Жичкин.

01.06.2020    9141    0    zhichkin    33    

Визионное программирование

Практика программирования Бесплатно (free)

Новый способ программирования и его практическая демонстрация.

22.04.2020    3966    0    mkalimulin    111    

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

Интеграция WEB v8 Абонемент ($m)

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

1 стартмани

20.04.2020    4404    9    zhichkin    16    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    27671    0    tormozit    100    

Использование машинного обучения для решения инцидентов. Практическое применение

Практика программирования Бесплатно (free)

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    3676    0    Repich    9    

Использование машинного обучения для решения инцидентов

Практика программирования Бесплатно (free)

История о том, как я с помощью машинного обучения сокращал затраты на техподдержку.

18.02.2020    6059    0    Repich    17    

Часовой на страже логов

Практика программирования Инструментарий разработчика Бесплатно (free)

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    5608    0    Scorpion4eg    6    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    75186    0    tormozit    129    

Приватный блокчейн и 1С популярно

Практика программирования Блокчейн Бесплатно (free)

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

02.09.2019    5500    0    mkalimulin    140    

Кодогенерация и метагенерация в 1С

Практика программирования Инструментарий разработчика Бесплатно (free)

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    8300    0    kirovsbis    28    

Интеграция сценарного тестирования в процесс разработки

Практика программирования Инструментарий разработчика Бесплатно (free)

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    8621    0    grumagargler    7    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    46075    0    tormozit    38    

Управляй качеством кода 1С с помощью SonarQube

Практика программирования Россия Бесплатно (free)

Управляй техническом долгом проектов 1С с помощью SonarQube. В статье рассматривается пример применения SonarQube при разработке.

07.07.2019    35207    0    olegtymko    230    

Выгрузка документа по условию

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    15255    0    m-rv    2    

Как прикрутить ГУИД к регистру сведений

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    18925    0    m-rv    17    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    42065    0    tormozit    74    

О времени и 1С

Практика программирования Разработка Бесплатно (free)

Основы и особенности работы со временем в 1С. Как избавиться от боли при работе в разных часовых поясах. Что такое момент времени. И другое.

01.04.2019    30890    0    YPermitin    60    

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф")

Практика программирования ККМ Кассовые операции Кассовые операции Разработка Россия Бесплатно (free)

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф"). Данная статья будет полезна интеграторам, программистам, тем кто работает (интегрирует, разрабатывает) различное ТО либо железки. Версия и релиз технологической платформы не имеет значения.

17.03.2019    6132    0    dmarenin    1    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    18876    0    pashamak    62    

Быстрее чем INSERT! BULK-операции и примеры использования

Производительность и оптимизация (HighLoad) Практика программирования Внешние источники данных Перенос данных из 1C8 в 1C8 Разработка Бесплатно (free)

Microsoft SQL Server поддерживает так называемые BULK-операции, используемые для быстрого изменения больших объемов данных в базе. В статье пойдет речь о практических примерах их использования. Все примеры сделаны в контексте платформы 1С (а как иначе).

09.03.2019    21460    0    YPermitin    40    

Как писать понятные коммиты

Практика программирования Разработка Россия Бесплатно (free)

Как писать сообщения коммитов так, чтобы потом не было мучительно больно.

06.03.2019    11960    0    Scorpion4eg    35    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    28612    0    m-rv    21    

Подготовка ребёнка к ЕГЭ по информатике. Часть шестнадцатая

Практика программирования Разработка Бесплатно (free)

Поиск выигрышной стратегии, завершающая статья.

22.02.2019    5329    0    vasilev2015    0    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    26661    0    itriot11    34    

Подготовка ребёнка к ЕГЭ по информатике. Часть тринадцатая

Практика программирования Разработка Бесплатно (free)

Исправление ошибок в программе, часть вторая.

20.02.2019    5365    0    vasilev2015    3    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    73090    0    Serginio    108    

Подготовка ребёнка к ЕГЭ по информатике. Часть восьмая

Практика программирования Разработка Бесплатно (free)

Шифрование и дешифрование информации. Закон Фано

05.02.2019    5329    0    vasilev2015    1    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    32075    0    ids79    40    

Расширяем свой багаж

Практика программирования Разработка Бесплатно (free)

Алгоритм решения возможной нетиповой задачи на собеседовании.

29.01.2019    6069    0    scientes    15    

Подготовка ребёнка* к ЕГЭ по информатике. Часть пятая

Практика программирования Разработка Бесплатно (free)

Маршрутизация. Протокол IPv4 для ЕГЭ.

27.01.2019    5563    0    vasilev2015    5    

Подготовка ребёнка* к ЕГЭ по информатике. Часть четвертая

Практика программирования Разработка Бесплатно (free)

Решение систем логических уравнений повышенного уровня сложности.

25.01.2019    5783    0    vasilev2015    0    

Подготовка ребенка* к ЕГЭ по информатике. Часть третья

Практика программирования Разработка Бесплатно (free)

Алгоритмы рекурсии, логические задачи. Подготовка к ЕГЭ.

22.01.2019    7220    0    vasilev2015    0    

Разработка и сценарное тестирование с Vanessa-ADD. Установка инструментов. Запись действий пользователя и выполнение сценариев

Практика программирования Vanessa Automation Бесплатно (free)

Вторая часть цикла публикаций, посвященных Vanessa-ADD и автоматизации тестирования.

21.01.2019    30087    0    Vladimir Litvinenko    96    

Подготовка ребенка* к ЕГЭ по информатике. Часть вторая

Практика программирования Бесплатно (free)

Примеры на Паскале. Если сам родитель* - поддержи ! Если сам водила - посигналь !

19.01.2019    5607    0    vasilev2015    0    

Подготовка к ЕГЭ сына - школьника (по информатике)

Практика программирования Бесплатно (free)

Примеры на Паскале. Если сам отец - поддержи ! Если сам водила - посигналь !

17.01.2019    6309    0    vasilev2015    50