Конвертация данных 2 и JSON

01.07.22

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Описание минимально необходимых изменений, которые нужно внести в обработку "УниверсальныйОбменДаннымиXML" для того, чтобы реализовать конвертацию объектов конфигурации в произвольный формат JSON.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Сериализатор JSON для КД-2
.epf 8,34Kb
27
27 Скачать (1 SM) Купить за 1 850 руб.

Обмен данными в формате JSON очень популярен. То же самое можно сказать про организацию обменов при помощи КД-2 и, например, обработки "УниверсальныйОбменДаннымиXML". Однако "из коробки" эти инструменты не поддерживают обмен данными в формате JSON.

Формулировка задачи:

1. Реализовать пообъектный обмен данными: один объект конфигурации — одно сообщение в формате JSON.

2. Требуется использовать правила конвертации КД-2.

3. Требуется использовать типовую обработку "УниверсальныйОбменДаннымиXML".

4. Типовой функционал должен остаться прежним.

Основная идея реализации:

Опционально перехватывать запись XML и вместо него выполнять запись JSON. Для этого предлагается сделать обработку "СериализаторJSON", которая бы переопределяла методы объекта "ЗаписьXML", и "подсунуть" её там, где это необходимо. Фактически это позволяет "на лету" генерировать JSON из XML.

 
Пример использования для документа
 
Пример использования для регистра сведений
 
Изменение обработки "УниверсальныйОбменДаннымиXML"
 
Нюансы настройки ПКО (правил конвертации объектов)
 
Опорная информация, необходимая для реализации
 
Реализация обработки "СериализаторJSON"
 
Результирующий JSON

Итоговые замечания:

1. Все обработчики КД-2, которые будут настроены, отработают для ПКО, ПКС и т.п. Весь типовой функционал отработает так, как это реализовано в обработке "УниверсальныйОбменДаннымиXML". Перехватывается только вывод в XML.

2. Загрузка данных в приёмнике является достаточно простой задачей, так как тот JSON, который формируется в итоге, фактически является родным форматом для принимающей стороны. По этой причине в данной статье вопрос реализации загрузки не рассматривается.

3. Загрузка значений составного типа потребует немного изменить формат выходного JSON, например, так:

{
	"СвойствоСоставногоТипа":
	{
		"type": "СправочникСсылка.Номенклатура",
		"value": "786b6cfa-f65d-11ec-9ccf-408d5c93cc8e"
	}
}

Дополнительно доработать это можно в процедуре "ЗаписатьКонецЭлемента", где выполняется запись в JSON свойства объекта и его значения. Элемент XML в этот момент времени уже содержит необходимое для этого значение своего атрибута "Тип".

4. Описанный подход допускает "докрутить" обработки таким образом, чтобы их можно было встраивать в конвейеры обработки сообщений (см. статью по ссылке).

5. Работа обработки "СериализаторJSON" проверялась с наиболее распространёнными объектами конфигураций такими, как справочники, документы, регистры сведений. При работе с другими объектами могут возникнуть нюансы сериализации из-за присутствия каких-нибудь специфических тэгов XML, которые в текущей реализации просто напросто не обрабатываются. Это можно доработать, как говорится "по месту".

Обработка тестировалась на платформе 8.3.20.1674.

конвертация данных 2 XML JSON сериализация УниверсальныйОбменДаннымиXML обмен сообщениями КД2 КД-2

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141473    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    23988    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51194    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36572    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56193    59    105    

61

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171158    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186856    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194954    150    243    

280
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. quazare 3801 01.07.22 14:47 Сейчас в теме
не читал, но смысл понятен - плюс за идею
2. cezarj 28 03.07.22 11:24 Сейчас в теме
Добрый день!, а какое практическое применение? Уменьшить размер выгрузки?
3. zhichkin 1524 03.07.22 13:28 Сейчас в теме
(2) Добрый день! Практическое применение JSON. Http-сервисы, обмен сообщениями, интеграция со стронними системами. Вот это вот всё. Уменьшение размера выгрузки в том числе.
rusmil; DrAku1a; cleaner_it; sapervodichka; +4 Ответить
5. PLAstic 296 04.07.22 10:05 Сейчас в теме
(3) Все ваши аргументы либо применимы и к XML, либо не применимы к КД-2 даже с JSON. В остатке имеем только "уменьшение размера выгрузки".
6. Bassgood 1449 04.07.22 13:34 Сейчас в теме
(5) Ну не все же http-сервисы и сторонние системы работают с XML, а вот с JSON куда больше
10. PLAstic 296 05.07.22 10:12 Сейчас в теме
(6) А какие из них, независимо от формата пакета, вообще работают с результатом КД-2?
7. zhichkin 1524 04.07.22 14:27 Сейчас в теме
(5) Анализ различий XML и JSON не входил в планы статьи. У того и другого формата есть свои преимущества и недостатки. На эту тему есть достаточное количество материалов в Интернет. Хочу лишь добавить ещё один критерий выбора в пользу XML или JSON: удобство программирования. Если вы программируете на javascript, например, какой-нибудь сервис под nodejs, как вариант, то JSON для вас - родной объект: минимум телодвижений по сериализации и десериализации. И таких систем огромное количество. Даже в 1С, на мой взгляд, работать с JSON гораздо проще, чем с XML.

Заглядывая немного в будущее, могу так же сказать, что на подходе gPRC... На некоторых проектах к нему уже присматриваются. При этом надо иметь ввиду, что для JSON есть "штатные", например от Google, конвертеры из JSON в gRPC и обратно.

Короче говоря, данная статья про КД-2 и JSON, если кому нужно. А на нет и суда нет.
11. PLAstic 296 05.07.22 10:14 Сейчас в теме
(7) В целом фразы верные. Я тоже топлю за JSON. Но я не вижу практического применения именно данной реализации - в связке с КД-2.
Чуть позже найду пару статей по теме, подцеплю. Там и аргументация есть.
Вот одна из статей. https://dzone.com/articles/the-rest-of-the-10-commandments
Там тоже поднимается вопрос "XML или JSON". И более глобальный - про организацию интерфейса.
12. zhichkin 1524 05.07.22 12:25 Сейчас в теме
(11) Мне кажется, что КД-2 это больше про трансформацию, чем формат. Другими словами лично у меня, когда я говорю про КД-2, в первую очередь возникает аналогия с XSLT.
Предположим у нас есть две базы 1С и они обмениваются между собой в формате JSON. Мне интересно: каким образом Вы бы предложили выполнять трансформацию одного JSON в другой средствами 1С, если не использовать КД-2 ?
13. PLAstic 296 05.07.22 15:38 Сейчас в теме
(12) Перво-наперво использовать сериализатор XDTO. Если базы не идентичны, но обе стороны обмена - это базы 1С, то уже много лет для этого успешно используется подсистема БСП "Обмен данными" и к ней не применяется требование по формату пакетов.
Наоборот, требование по формату пакета (XML/JSON/CSV/TSV и пр.) применяется, когда на второй стороне не база 1С. И неразрывно с требованием по формату пакета идёт требование по составу данных. Например, Яндекс.API работает с JSON и формат данных их API подробно описан в документации. Не может быть такого, когда тебе говорят "шли нам что угодно, но в формате JSON".
Именно поэтому я и сказал, что не могу себе представить, когда нам нужен обмен по правилам обмена, но формат XML не устраивает. Держим в уме зипование пакетов, что нивелирует разницу в размере пакетов.

Ах, да. Для внешних не-1С-систем я всегда использую ПакетXDTO, т.к. если вы знакомы с XSLT, вам должна также импонировать валидация любых входящих и исходящих данных в автоматическом режиме. Сюда же автоматическое приведение типов, которое без описания в XDTO невозможно.
VitaliyCeban; Yashazz; +2 Ответить
14. zhichkin 1524 05.07.22 16:44 Сейчас в теме
(13) Спасибо за развёрнутый комментарий. Действительно очень интересная тема. В нашем случае используется обмен РИБ через RabbitMQ. Формат обмена - JSON. Это не файловый обмен. Одно сообщение в среднем весит 2 Кб. Бывают сообщения до 70 Мб. Каналы на узлах не везде идеальны - мобильный 4G, например. Сейчас речь идёт о том, что конфигруации ЦБ и узлов будут разными, а РИБ по сути остаётся. Вот ищем решение под это дело. КД-2 вроде как стандартное решение для таких случаев, но не умеет пообъектный обмен и JSON. В принципе можно попробовать перейти на XML и пакеты КД-2, но мне кажется, что процентов на 10-20 по производительности точно просядем в таком случае, а 10% уже существенно для нас. В пиках речь идёт о тысячах сообщений в секунду. Десятки миллионов сообщений в сутки. Даже не знаю... Ну наверное стенд какой-то собирать надо и смотреть по факту что получается. Текущий обмен в JSON работает хорошо, но там на данный момент времени совсем нет конвертации. Используем как раз СериализаторXDTO с записью и чтением JSON в стандартном формате 1С.
Дёшево и сердито =)
// Запись
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Источник, НазначениеТипаXML.Явное);
ТелоСообщения = ЗаписьJSON.Закрыть();

// Чтение
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Сообщение.ТелоСообщения);
ОбъектДанных = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);
ОбъектДанных.ОбменДанными.Загрузка = Истина;
ОбъектДанных.Записать();
Показать
16. PLAstic 296 06.07.22 14:05 Сейчас в теме
(14) Если вас больше заботит производительность, то я бы рекомендовал сделать такой финт...
Когда загружается (и выгружается тоже) пакет, то обработка загрузки, подгружая правила, парсит их, создаёт кучу таблиц и заполняет пачку переменных. И так каждый раз.
Перевесьте эти операции на загрузку правил обмена в конфу. Подгрузили новые правила - один раз распарсим их, один раз заполним все таблицы, сохраняем в хранилище и далее при загрузке просто достаём из памяти. Объектных сущностей там нет, т.ч. на битые ссылки не попадёте.
Это ускоряет процесс обмена в такое кол-во раз, что о проблемах производительности вы просто забываете. Как раз на ИСе читал статью, где чел сделал это, но сейчас не найду, давно это было.

Мне почему-то кажется, что обработку обмена вы знаете достаточно хорошо и даже прикинув в памяти понимаете, о чём я говорю. Там реально есть что ускорить и с достаточно малыми временными затратами.
4. KOTzilla 22 04.07.22 05:28 Сейчас в теме
Как минимум это облегчает допиливание уже существующих обменов, за счет уменьшения работы со стороны отправителя. Скажем у нас есть HTTP сервис и мы добавляем новый, типовой, документ для передачи. Что я обычно делаю, редактирую структуру данных, добавляю туда новые реквизиты для сериализации и так каждый раз с новым документом. Если я правильно понял данный механизм, то используя универсальный формат, у нас всегда есть готовая структура для работы, которую не надо заполнять, она уже собрана этим универсальным обменом.
zhichkin; +1 Ответить
8. DrAku1a 1745 04.07.22 15:23 Сейчас в теме
А обратный процесс - чтение из JSON по правилам обмена можно так-же сделать?
9. zhichkin 1524 04.07.22 17:10 Сейчас в теме
(8) Да, надо только причесать для публикации. Пока что не досуг =)
15. zhichkin 1524 05.07.22 17:19 Сейчас в теме
(13)
Не может быть такого, когда тебе говорят "шли нам что угодно, но в формате JSON".

Может быть не поверите, но такое тоже бывает. Честное слово =)
17. zhichkin 1524 06.07.22 15:15 Сейчас в теме
(16) Спасибо за дельный совет. ПКД кэшируется при помощи общего модуля повторного использования. Механизм кэширования в 1С работает хорошо. По большому счёту это не проблема. Практика показывает, что самое узкое место - запись объектов в ИБ 1С. То есть вот эта строчка кода:
Объект.Записать();

Если рассматривать "чистую" запись без выполнения различных обработчиков как, например, ОбработкаПроведения, то мы имеем, на нашем конкретном сервере, приблизительную скорость загрузки - 1000 объектов в минуту на один поток выполнения. На загрузку объектов в ЦБ работает выделенный в кластере сервер, на котором в пиках может подниматься до 100 и более фоновых заданий. Таким образом имеем несколько десятков тысяч загружаемых объектов в минуту.

При этом сейчас конвертация объектов совсем не используется. Тестовые испытания КД-2 + JSON показали на самом деле незначительное ухудшение производительности. Ориентировочно в пределах 5%. Функционал КД-2 использовался исключительно как сопоставление полей одного объекта другому, то есть обработчики ПКО не использовались. По большому счёту получается так, что использование КД-2 в таком случае абсолютно оправдано. Однако тестирование КД-2 + JSON пока не завершено полностью. Думаю в течение месяца будут конкретные и более точные цифры. Пока что жду =)
18. The Ded 177 08.07.22 10:20 Сейчас в теме
Правильно понимаю, что при таком подходе теряем возможность работы в событиях при загрузке? ПоляПоиска, ПриЗагрузкеОбъекта, ПослеЗагрузкиОбъекта?
19. zhichkin 1524 08.07.22 14:13 Сейчас в теме
(18) При таком подходе ПКД не выгружаются вместе с данными объекта. Следовательно правила нужно хранить на принимающей стороне. Я пока что детально не копался в алгоритмах загрузки. Честно говоря, даже не ожидал такого повышенного интереса к статье. Видимо придётся всё-таки найти время и дополнить её освещением вопроса загрузки.

Предварительно я думаю, что если ПКД хранятся в приёмнике, то можно было бы конвертировать JSON в структуру и создавать под эту структуру правила загрузки из входящих данных. В КД-2 есть такая возможность. В таком случае алгоритмы чтения XML не задействуются - должно всё работать. В крайнем случае можно по аналогии с этой статьёй эмулировать чтение XML из входящего файла - не копал, возможно, что это более сложный путь.
Оставьте свое сообщение