Описание формата 1С JDTO (JSON data transfer object)

08.04.22

Интеграция - Обмен между базами 1C

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

Платформа 1С:Предприятие 8 имеет встроенный механизм сериализации/десериализации своих объектов в формат JSON.

Сериализация:

USD = Справочники.Валюты.НайтиПоКоду("840");
	
Объект = USD.ПолучитьОбъект();
	
ЗаписьJson = Новый ЗаписьJSON();
ЗаписьJson.УстановитьСтроку();
СериализаторXDTO.ЗаписатьJSON(ЗаписьJson, Объект, НазначениеТипаXML.Явное);

JSON = ЗаписьJson.Закрыть();

Получаемый таким образом JSON можно использовать для обмена данными, как между информационными базами 1С, так и для передачи во внешние системы.

Десериализация:

ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(JSON);
		
ОбъектДанных = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);

ОбъектДанных.ОбменДанными.Загрузка = Истина;
ОбъектДанных.Записать();

При этом следует учитывать, что при загрузке JDTO в информационную базу 1С, имеющую отличную от загружаемого JSON схему данных, может возникать три типа ошибок:

1. Отсутствие соответствующего типа данных (не критичная):

Ошибка при вызове метода контекста (ПрочитатьJSON): Неизвестный тип

2. Несоответствие схемы XDTO (не критичная):

Ошибка при вызове метода контекста (ПрочитатьJSON): Ошибка преобразования данных XDTO

3. Несоответствие схемы XDTO (критичная !!! - вылетает платформа):

Недопустимое значение аргумента функции: [xdto - src\XDTOFactoryImpl.cpp (414)]

Третья ошибка тянется, судя по поиску в Интернет, ещё с платформы 8.2. Была обнаружена на версии 8.3.18.1433. Возникает в том случае, если тип значения реквизита стал составным. При загрузке однозначного типа в составной возникает вот такая ошибка. Например, в моём случае реквизит имел значение  одного перечисления, а затем к нему добавили ещё одно перечисление. Сериализатор XDTO поломался.

Важно также отметить, что порядок следования свойств объекта JDTO для 1С имеет значение.

Рассмотрим формат 1С JDTO (JSON data transfer object) более подробно на примере основных объектов 1С: перечислениях, справочниках, документах, регистрах сведений и накопления. Как правило в обмене данными с внешними системами используются именно они.

 
0. Общие понятия об объектах 1С (для не 1С-ников).
 
1. Формат JSON ссылочных типов данных.
 
2. Концепция ссылки на объект.
 
3. Концепция составного типа данных.
 
4. Формат JSON значимых типов данных.
 
5. Концепция набора записей.
 
6. Метаданные, схема данных прикладного решения 1С.
 
7. Трансформация JDTO в другой формат JSON.

 

Полезные ссылки:

JSON Schema - описание формата, примеры использования, инструменты и утилиты

JUST.NET - библиотека на языке C# для трансформации JSON аналогично XSLT

Online валидация JSON при помощи JSON Schema

См. также

SALE! 20%

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

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

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

45650 36520 руб.

04.08.2015    159676    363    267    

345

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 22572 руб.

12.06.2017    134930    722    291    

388

SALE! 20%

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

34650 27720 руб.

15.04.2019    68415    178    138    

111

SALE! 20%

Перенос данных из 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С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34168    80    58    

78

SALE! 10%

Перенос данных из УТ 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 25200 руб.

23.07.2020    46288    196    64    

158

SALE! 10%

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

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

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231396    124    327    

296

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

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

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

60000 руб.

05.10.2022    9207    9    8    

10

SALE! 10%

Перенос данных из УПП 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 25200 руб.

15.12.2021    20244    132    38    

90
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rabid_otter 134 16.07.21 08:02 Сейчас в теме
2. Yashazz 4709 16.07.21 08:15 Сейчас в теме
Имхо, ничего нового, но для начинающих, вероятно, будет полезно.
rabid_otter; 1v7; Jimbo; +3 Ответить
4. zhichkin 1438 16.07.21 13:32 Сейчас в теме
(2) Спасибо. У нас РИБ на кролике в этом формате. А в последнее время начались интеграции с новыми внутренними системами не на 1С: PHP, Ruby, Phyton и т.п. В общем-то статья, да, родилась больше именно как помощь не 1С разработчикам.
18. KUAvanesov 17.07.21 08:41 Сейчас в теме
Как мне кажется для обмена 1с с не 1с сериализация сильно избыточно. Для того чтобы команде не 1с передать состояние объекта - им придётся заполнить 100500 полей которые они не используют в своей системе. Ещё и указать им типы которые использует только 1с.
20. zhichkin 1438 17.07.21 13:47 Сейчас в теме
(18) Согласен, использовать данную технологию, как и любую другую, всегда и везде я бы тоже не стал. Всему своё время и место. Однако, если уже решили использовать 1С JDTO, то нужно подумать о трансформации JSON.
Разработка собственного сериализатора, особенно если существует большое количество систем, с которыми нужно интегрироваться, под каждую такую систему в отдельности это достаточно затратное мероприятие.
Короче говоря, что, как и где использовать это отдельная большая тема. Выбор того или иного решения всегда зависит от множества факторов и постановки конкретной задачи.
KUAvanesov; +1 Ответить
3. AntonProgma 46 16.07.21 13:24 Сейчас в теме
ЗаписьJson.УстановитьСтроку();

А это обязательное заклинание?
5. zhichkin 1438 16.07.21 13:35 Сейчас в теме
(3) Нет. Можно и в файл запись делать. Там другое заклинание используется. Конкретно этот вариант пишет в память.
6. AntonProgma 46 16.07.21 13:41 Сейчас в теме
(5) вот такие моменты у меня не сочетаются с фразой "очень простой механизм сериализации". Это не претензия к статье. Спасибо 1с, что ограничилась 4мя командами, чтобы перевести объект в json.
7. Yashazz 4709 16.07.21 13:42 Сейчас в теме
(6) Если вам надо даты в нужный формат загонять, то там 4-мя командами не ограничится.
8. AntonProgma 46 16.07.21 13:43 Сейчас в теме
(7) ну нельзя требовать от платформы слишком много! Ребята только учатся.
9. Yashazz 4709 16.07.21 14:55 Сейчас в теме
(8) А у меня нет претензий к платформе, особенно в этой части. Её инструментарий меня полностью устраивает. Я лишь указал, что не всё столь очевидно элементарно, как порой кажется начинающим; везде есть нюансы.

Вообще замечу, что мне от платформы хотелось бы только одного - стабильной работы уже имеющихся механизмов. Какое-то там особенное развитие не считаю сильно и принципиально нужным, пока бизнес-необходимости не возникнет.
parshin; Ish_2; zhichkin; a.x.a; +4 Ответить
10. zhichkin 1438 16.07.21 15:21 Сейчас в теме
(9) Поддерживаю. Плюс я бы ещё добавил, что хотелось бы побольше документации по внутреннему устройству платформы и её открытости. Впрочем этого все хотят уже давно ...
parshin; Shmell; Yashazz; +3 Ответить
11. AntonProgma 46 16.07.21 16:32 Сейчас в теме
(10) а 1 команду вместо 4х не хочется?
12. Yashazz 4709 16.07.21 16:38 Сейчас в теме
(11) Нет. Что слишком, то излишне - советую вникнуть в эту мудрую пословицу.
13. AntonProgma 46 16.07.21 16:48 Сейчас в теме
(12) если сравнить 1 и 4, то слишком окажется 1?) война это мир, свобода это рабство
14. Yashazz 4709 16.07.21 17:15 Сейчас в теме
15. zhichkin 1438 16.07.21 17:17 Сейчас в теме
(11) PHP - это две системы: web витрина и TMS.
Python - финансовая аналитика и искусственный интеллект.
Ruby - решение для торговых точек (200 штук пока что в сети).
Наверняка со временем появятся и другие системы не на 1С.
Таково время: будет больше специализированных решений, больше команд, больше интеграций.
16. AntonProgma 46 16.07.21 17:24 Сейчас в теме
(15) спасибо вам за статью! Без таких материалов действительно трудно разобраться, что ещё хочет, к примеру, дух чтения json by 1c. Откуда знать, что он оскорбится, не получив предложение, добавить пустую строку перед сериализацией объекта.
19. webester 26 17.07.21 12:18 Сейчас в теме
(11) Конечно хочется. Кому не хочется. Метод СделатьВсеХорошо(). Не знаете в каком ЯП реализовали?
17. dvsidelnikov 64 17.07.21 08:38 Сейчас в теме
Поправьте меня если я ошибаюсь: десериализация указанным способом возможна только в идентичной конфигурации (ну как минимум в конфигурации имеющей Справочник Валюта идентичный выгружаемой). Если я прав, то считаю, что было бы не лишним указать этот ньюанс в статье. Думаю многие обратятся к статье в процессе выбора технологии для реализации обмена.
21. zhichkin 1438 17.07.21 14:00 Сейчас в теме
(17) Спасибо за замечание. Внёс правку в статью.
dvsidelnikov; +1 Ответить
22. dvsidelnikov 64 17.07.21 14:32 Сейчас в теме
(21) Для человека выбирающего технологию для реализации обмена между базами с разными структурами данных (разными конфигурациями), боюсь, это не будет очевидным. Я думаю будет достаточно переформулировать фразу:
Получаемый таким образом JSON можно использовать для обмена данными, как между информационными базами 1С, так и для передачи во внешние системы
.
между информационными базами 1С с одинаковой/схожей структурой данных (конфигурацией)

В целом я сильно разделяю ваше отношения к КД - лично для меня её использование это боль и страдание.
Я, в свою очередь написал инструмент преобразующий объекты БД в Структуры (рекурсивно для ссылочных типов), обрезаю ссылки, и уже получившуюся Структуру сериализую. В базе приемнике десериализую, разворачиваю ссылки (внутренние), и уже спокойно, используя все возможности отладчика и конфигуратора, пишу алгоритмы преобразования в Объекты принимающей базы... Файлы получаются толще чем при работе классических правил, но это не критично для решаемых мной задач.
23. zhichkin 1438 17.07.21 14:47 Сейчас в теме
(22) Вариантов решения задачи всегда больше одного.
Платформа 1С имеет действительно удобные средства сериализации JSON не только для своих прикладных объектов, но и структур. Сериализация структур широко используется при обменах, особенно через http-сервисы.
Соглашусь, что выбор механизма для решения задачи зависит от её контекста.
24. AntonProgma 46 17.07.21 15:47 Сейчас в теме
(23) а вам встречались системы с менее удобными средствами работы с json, чем есть в 1с?
25. zhichkin 1438 17.07.21 16:07 Сейчас в теме
(24) Для меня это скорее вопрос про различия между строго, слабо, динамически и т.д. типизированными языками программирования. Например, в C# работать с произвольной структурой данных JSON может быть неудобно, так как придётся выбирать между использованием типа Dictionary<string, object>, возможностями Dynamic Language Runtime (DLR) или создавать строго типизированный класс и парсить JSON вручную. Обычно я выбираю третий вариант, используя генерацию таких классов - остальное C# делает за меня.
26. AntonProgma 46 17.07.21 16:37 Сейчас в теме
(25)а есть там аналоги
ЗаписьJson.УстановитьСтроку();
И
JSON = ЗаписьJson.Закрыть();
?

Просто у меня в голове не укладывается, зачем 1с понадобились эти конструкции.
27. zhichkin 1438 17.07.21 16:47 Сейчас в теме
(26) Да, в C# есть такой аналог.
Грубо говоря, суть в том, что подсунуть сериализатору для вывода потока байтов: FileStream (поток вывода в файл) или MemoryStream (поток вывода в память). API в разных языках, библиотеках и т.п. может быть разным. У 1С такой.
Dementor; +1 Ответить
28. AntonProgma 46 17.07.21 16:59 Сейчас в теме
(27) большое спасибо! Не устаю поражаться изобретательности этих людей
29. kembrik 10 19.07.21 17:31 Сейчас в теме
Активно использовал данную сериализацию для записи состояния объекта во внешнюю систему логирование. Когда программно в фоновых заданиях в нескольких потоках создаются цепочки документов, выяснить что именно было заполнено не так, до того как документ записан иной раз очень удобно
30. dumsik 34 20.07.21 16:28 Сейчас в теме
из статьи не понял, можно ли подсунуть сериализатору внешнюю JDTO схему?
31. zhichkin 1438 20.07.21 16:54 Сейчас в теме
(30) Нет, нельзя. Если предварительно трансформировать в схему текущей конфигурации 1С, то можно.
Смотрите в самом начале статьи какие ошибки Вы можете получить в случае, если схема данных загружаемого JDTO будет отличаться от схемы данных текущей информационной базы 1С.
32. nixel 1403 20.07.21 18:05 Сейчас в теме
(31) помимо СериализатораXDTO в json можно писать обычной ФабрикойXDTO. А там подсунуть можно любой ПакетXDTO с любыми настройками типов и элементов.
malikov_pro; mvgfirst; +2 Ответить
Оставьте свое сообщение