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

01.07.22

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

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

Скачать исходный код

Наименование Файл Версия Размер
Сериализатор JSON для КД-2
.epf 8,34Kb
26
.epf 8,34Kb 26 Скачать

Обмен данными в формате 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! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 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    135460    729    291    

391

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

15.12.2021    20541    136    38    

93

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 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 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

38500 34650 руб.

15.04.2019    68758    179    139    

111

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

23.07.2020    46691    199    64    

162

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

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

48278 43450 руб.

03.12.2020    34372    81    58    

78

Перенос данных из Парус 10 в ЗГУ ред.3

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9295    9    8    

11

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

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

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    151282    366    376    

502

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11 / КА 2 / ERP 2. Переносятся документы, справочники и остатки

Обмен между базами 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 оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    190662    270    238    

269
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. quazare 3600 01.07.22 14:47 Сейчас в теме
не читал, но смысл понятен - плюс за идею
2. cezarj 27 03.07.22 11:24 Сейчас в теме
Добрый день!, а какое практическое применение? Уменьшить размер выгрузки?
3. zhichkin 1455 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 1428 04.07.22 13:34 Сейчас в теме
(5) Ну не все же http-сервисы и сторонние системы работают с XML, а вот с JSON куда больше
10. PLAstic 295 05.07.22 10:12 Сейчас в теме
(6) А какие из них, независимо от формата пакета, вообще работают с результатом КД-2?
7. zhichkin 1455 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 1455 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 1455 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 16 04.07.22 05:28 Сейчас в теме
Как минимум это облегчает допиливание уже существующих обменов, за счет уменьшения работы со стороны отправителя. Скажем у нас есть HTTP сервис и мы добавляем новый, типовой, документ для передачи. Что я обычно делаю, редактирую структуру данных, добавляю туда новые реквизиты для сериализации и так каждый раз с новым документом. Если я правильно понял данный механизм, то используя универсальный формат, у нас всегда есть готовая структура для работы, которую не надо заполнять, она уже собрана этим универсальным обменом.
zhichkin; +1 Ответить
8. DrAku1a 1715 04.07.22 15:23 Сейчас в теме
А обратный процесс - чтение из JSON по правилам обмена можно так-же сделать?
9. zhichkin 1455 04.07.22 17:10 Сейчас в теме
(8) Да, надо только причесать для публикации. Пока что не досуг =)
15. zhichkin 1455 05.07.22 17:19 Сейчас в теме
(13)
Не может быть такого, когда тебе говорят "шли нам что угодно, но в формате JSON".

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

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

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

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