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

01.07.22

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

27660 24894 руб.

12.06.2017    148454    864    302    

455

Перенос данных 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.21.x).

35000 руб.

23.07.2020    58774    284    75    

224

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

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

35000 руб.

15.12.2021    27845    198    58    

153

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    175125    319    267    

388

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

16260 руб.

18.02.2016    191274    626    536    

545

SALE! 10%

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

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

55778 50200 руб.

04.12.2015    194239    254    351    

409

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

18000 руб.

20.11.2015    163278    406    386    

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

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

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

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

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