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

01.07.22

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

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

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
Сериализатор JSON для КД-2
.epf 8,34Kb
26
26
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

См. также

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    138185    761    292    

404

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

Переход и перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.227.x), ERP 2.5 (2.5.16.x), КА 2.5 (2.5.16.x) .

28000 руб.

24.06.2020    62388    51    27    

81

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

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

28000 руб.

15.12.2021    21815    144    40    

104

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

45650 руб.

15.04.2019    70394    174    146    

117

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

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

28000 руб.

23.07.2020    48455    208    64    

170

SALE! %

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

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

45650 27000 руб.

24.04.2015    192510    142    241    

272

Перенос данных 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, почту.

14580 руб.

18.02.2016    184551    573    509    

516

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

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

39500 руб.

25.02.2015    169764    293    253    

374
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. quazare 3730 01.07.22 14:47 Сейчас в теме
не читал, но смысл понятен - плюс за идею
2. cezarj 28 03.07.22 11:24 Сейчас в теме
Добрый день!, а какое практическое применение? Уменьшить размер выгрузки?
3. zhichkin 1507 03.07.22 13:28 Сейчас в теме
(2) Добрый день! Практическое применение JSON. Http-сервисы, обмен сообщениями, интеграция со стронними системами. Вот это вот всё. Уменьшение размера выгрузки в том числе.
rusmil; DrAku1a; cleaner_it; sapervodichka; +4 Ответить
5. PLAstic 295 04.07.22 10:05 Сейчас в теме
(3) Все ваши аргументы либо применимы и к XML, либо не применимы к КД-2 даже с JSON. В остатке имеем только "уменьшение размера выгрузки".
6. Bassgood 1437 04.07.22 13:34 Сейчас в теме
(5) Ну не все же http-сервисы и сторонние системы работают с XML, а вот с JSON куда больше
10. PLAstic 295 05.07.22 10:12 Сейчас в теме
(6) А какие из них, независимо от формата пакета, вообще работают с результатом КД-2?
7. zhichkin 1507 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 295 05.07.22 10:14 Сейчас в теме
(7) В целом фразы верные. Я тоже топлю за JSON. Но я не вижу практического применения именно данной реализации - в связке с КД-2.
Чуть позже найду пару статей по теме, подцеплю. Там и аргументация есть.
Вот одна из статей. https://dzone.com/articles/the-rest-of-the-10-commandments
Там тоже поднимается вопрос "XML или JSON". И более глобальный - про организацию интерфейса.
12. zhichkin 1507 05.07.22 12:25 Сейчас в теме
(11) Мне кажется, что КД-2 это больше про трансформацию, чем формат. Другими словами лично у меня, когда я говорю про КД-2, в первую очередь возникает аналогия с XSLT.
Предположим у нас есть две базы 1С и они обмениваются между собой в формате JSON. Мне интересно: каким образом Вы бы предложили выполнять трансформацию одного JSON в другой средствами 1С, если не использовать КД-2 ?
13. PLAstic 295 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 1507 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 295 06.07.22 14:05 Сейчас в теме
(14) Если вас больше заботит производительность, то я бы рекомендовал сделать такой финт...
Когда загружается (и выгружается тоже) пакет, то обработка загрузки, подгружая правила, парсит их, создаёт кучу таблиц и заполняет пачку переменных. И так каждый раз.
Перевесьте эти операции на загрузку правил обмена в конфу. Подгрузили новые правила - один раз распарсим их, один раз заполним все таблицы, сохраняем в хранилище и далее при загрузке просто достаём из памяти. Объектных сущностей там нет, т.ч. на битые ссылки не попадёте.
Это ускоряет процесс обмена в такое кол-во раз, что о проблемах производительности вы просто забываете. Как раз на ИСе читал статью, где чел сделал это, но сейчас не найду, давно это было.

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

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

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

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

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