Описание формата 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! 10%

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

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

50722 45650 руб.

04.08.2015    165088    384    275    

369

Перенос данных 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). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    23114    159    48    

117

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

26280 руб.

12.06.2017    140135    782    295    

409

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

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

84000 руб.

19.08.2020    24370    23    1    

25

SALE! 10%

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

50722 45650 руб.

15.04.2019    71499    180    148    

120

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

50722 45650 руб.

24.04.2015    194153    149    242    

279

SALE! 10%

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

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

50722 45650 руб.

31.10.2014    236017    99    333    

304

SALE! 10%

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

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

48278 43450 руб.

03.12.2020    36011    90    62    

86
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. rabid_otter 134 16.07.21 08:02 Сейчас в теме
2. Yashazz 4779 16.07.21 08:15 Сейчас в теме
Имхо, ничего нового, но для начинающих, вероятно, будет полезно.
rabid_otter; by_1Cnik; Jimbo; +3 Ответить
4. zhichkin 1519 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 1519 17.07.21 13:47 Сейчас в теме
(18) Согласен, использовать данную технологию, как и любую другую, всегда и везде я бы тоже не стал. Всему своё время и место. Однако, если уже решили использовать 1С JDTO, то нужно подумать о трансформации JSON.
Разработка собственного сериализатора, особенно если существует большое количество систем, с которыми нужно интегрироваться, под каждую такую систему в отдельности это достаточно затратное мероприятие.
Короче говоря, что, как и где использовать это отдельная большая тема. Выбор того или иного решения всегда зависит от множества факторов и постановки конкретной задачи.
KUAvanesov; +1 Ответить
3. AntonProgma 47 16.07.21 13:24 Сейчас в теме
ЗаписьJson.УстановитьСтроку();

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

Вообще замечу, что мне от платформы хотелось бы только одного - стабильной работы уже имеющихся механизмов. Какое-то там особенное развитие не считаю сильно и принципиально нужным, пока бизнес-необходимости не возникнет.
parshin; Ish_2; zhichkin; a.x.a; +4 Ответить
10. zhichkin 1519 16.07.21 15:21 Сейчас в теме
(9) Поддерживаю. Плюс я бы ещё добавил, что хотелось бы побольше документации по внутреннему устройству платформы и её открытости. Впрочем этого все хотят уже давно ...
parshin; Shmell; Yashazz; +3 Ответить
11. AntonProgma 47 16.07.21 16:32 Сейчас в теме
(10) а 1 команду вместо 4х не хочется?
12. Yashazz 4779 16.07.21 16:38 Сейчас в теме
(11) Нет. Что слишком, то излишне - советую вникнуть в эту мудрую пословицу.
13. AntonProgma 47 16.07.21 16:48 Сейчас в теме
(12) если сравнить 1 и 4, то слишком окажется 1?) война это мир, свобода это рабство
14. Yashazz 4779 16.07.21 17:15 Сейчас в теме
15. zhichkin 1519 16.07.21 17:17 Сейчас в теме
(11) PHP - это две системы: web витрина и TMS.
Python - финансовая аналитика и искусственный интеллект.
Ruby - решение для торговых точек (200 штук пока что в сети).
Наверняка со временем появятся и другие системы не на 1С.
Таково время: будет больше специализированных решений, больше команд, больше интеграций.
16. AntonProgma 47 16.07.21 17:24 Сейчас в теме
(15) спасибо вам за статью! Без таких материалов действительно трудно разобраться, что ещё хочет, к примеру, дух чтения json by 1c. Откуда знать, что он оскорбится, не получив предложение, добавить пустую строку перед сериализацией объекта.
33. kote 537 03.06.24 12:01 Сейчас в теме
(15)
Ruby - решение для торговых точек (200 штук пока что в сети).


Добрый день.
Очень интересно стало, что за решения на Ruby для торговых точек понадобилось - чего не хватило в 1С такого?

.. вроде для ТТ там всего с избытком (чаще люди не используют часть функционала, в крайнем случае - на 1С и допиливают)
19. webester 26 17.07.21 12:18 Сейчас в теме
(11) Конечно хочется. Кому не хочется. Метод СделатьВсеХорошо(). Не знаете в каком ЯП реализовали?
17. dvsidelnikov 73 17.07.21 08:38 Сейчас в теме
Поправьте меня если я ошибаюсь: десериализация указанным способом возможна только в идентичной конфигурации (ну как минимум в конфигурации имеющей Справочник Валюта идентичный выгружаемой). Если я прав, то считаю, что было бы не лишним указать этот ньюанс в статье. Думаю многие обратятся к статье в процессе выбора технологии для реализации обмена.
21. zhichkin 1519 17.07.21 14:00 Сейчас в теме
(17) Спасибо за замечание. Внёс правку в статью.
dvsidelnikov; +1 Ответить
22. dvsidelnikov 73 17.07.21 14:32 Сейчас в теме
(21) Для человека выбирающего технологию для реализации обмена между базами с разными структурами данных (разными конфигурациями), боюсь, это не будет очевидным. Я думаю будет достаточно переформулировать фразу:
Получаемый таким образом JSON можно использовать для обмена данными, как между информационными базами 1С, так и для передачи во внешние системы
.
между информационными базами 1С с одинаковой/схожей структурой данных (конфигурацией)

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

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