Выгрузка/загрузка данных в формате JSON v 1.0.5


Обработка предназначена для обмена данными между схожими конфигурациями в формате JSON. Этот формат обладает рядом существенных преимуществ по сравнению с xml и прочими популярными форматами. В отличие от существующих аналогов, обработка не использует никаких дополнительных библиотек. (де)Сериализация всех объектов происходит средствами встроенного языка и методов ЗаписатьJSON() и ПрочитатьJSON(). Работает на платформе версии не ниже 8.3.6.

Обработку можно рассматривать как альтернативу одному из наиболее популярных сейчас в 1С формату обмена данными xml. XML универсален и подходит для решения большинства задач. Но у него есть один большой недостаток: наличие тэгов и , как следствие, большой объем "лишней" информации. В JSON тэги не используются, и это позволило добиться существенного сокращения объема передаваемой информации. Например, один и тот же регистр "АдресныйКлассификатор" из демонстрационной базы УТ 11 при выгрузке в xml занимает 91 169 кб, а при выгрузке в формате JSON всего 20 352 КБ. 

Представленная обработка работает со всеми конфигурациями на платформе не ниже 8.3.6.

Возможности обработки:

1) Выгрузка/загрузка констант, справочников, документов, ПВХ, регистров сведений и накопления

2) Формирование отчета о выгрузке/загрузке по кнопке "Определить данные, выгружаемые по ссылке".  Отчет включает все подчиненные объекты и источники. Все значения кликабельны: при двойном щелчке по ссылке открывается соответствующая форма. Часто при загрузке данных бывает непонятно, откуда взялись какие-то элементы справочников или ПВХ. Отчет позволяет решить эту проблему. 

Отчет о выгрузке

 

3) Установка отбора по любым реквизитам выгружаемых объектов с использованием технологии СКД:

 Отбор выгружаемых

4) Опционально загрузка данные в режиме обмена: отлючается проверка заполнения данных, объекты не регистрируются в планах обмена

5) Опционально загрузка данных происходит в режиме Транзакции: грузится все или ничего при возникновении ошибки

6) Есть возможность не прерывать загрузку при ошибке. Эту возможность можно использовать при обмене данными между различающимися конфигурациями. Если у объекта-приемника нет какого-то реквизита источника, то он все равно будет загружен при установленной галке.

 

Порядок работы при выгрузке:

  1. Открыть обработку
  2. Отметить галочками нужные объекты
  3. Установить отборы при необходимости
  4. Нажать "Выгрузить", указать файл-приемник. Запись файла происходит на клиенте. 

 

Порядок работы при загрузке:

  1. Открыть обработку и перейти на вкладку "Загрузка"
  2. При необходимости установить настройки: Выполнять в режиме обмена данными, выполнять в транзакции, не прерывать при ошибке, показывать отчет о загрузке
  3. Нажать "Загрузить", выбрать файл-источник данных. 
Изменения в версиях:
 
1.0.2
 
— Исправлена ошибка при работе в режиме "Толстый клиент управляемое приложение
 
1.0.3
 
— Добавлена возможность выгружать с документами движения
 
1.0.4
 
-Добавлена выгрузка регистров бухгалтерии, однопальцевое чтение результирующих файлов. исправлены ошибки

39 Comments

  1. Brawler
    XML универсален и подходит для решения большинства задач. Но у него есть один большой недостаток: наличие тэгов и , как следствие, большой объем «лишней» информации.

    Все в мире относительно, как по мне, так XML лучше.

    На вкус и цвет все фломастеры разные.

    Reply
  2. kser87

    (1) Brawler, у xml при использовании в 1С есть один очень большой плюс по сравнению с JSON: почти все типы (де)сериализуются на уровне платформы. JSON же умеет работать только с примитивными типами, массивами, структурами и соответсвиями. При этом соответствие десериализуется в структуру (WTF?!) и в качестве ключа можно использовать только строку.

    Reply
  3. vasiliy_b
    При этом соответствие десериализуется в структуру (WTF?!)

    — сам еще не проверял, но если это так, то я согласен, лучше было бы наоборот, так как соответствие допускает любое значение ключа, и при десериализации в структуру, можно получить ошибку.

    Reply
  4. KurganPX

    Каждому свое.

    Десериализация при переносе данных, особенно между неидентичными конфигурациями или различными платформами является больше злом, чем добром.

    JSON придумывался не для бэкапов или обмена в виде файлов, он нужен для обмена в интернетах и в этом плане — незаменим.

    Извините, но передавать бессмысленный объем «шлака» в виде тегов, стрелок и всего остального присущего XML — это глупость бессмысленная. Зачем хранить и передавать в 20 раз больше данных, чем чем это необходимо.

    P.S. про десериализацию и JSON:

    http://v8.1c.ru/o7/201501json/index.htm

    Reply
  5. kser87

    (3) vasiliy_b, поэтому сейчас при попытке сериалации в JSON соответствия с нестроковым ключом 1С-ка падает с ошибкой

    Reply
  6. kser87

    (4) KurganPX, это только в 8.3.7 появилось=) И опять же справедливы ваши слова: при переносе данных, особенно между неидентичными конфигурациями или различными платформами является больше злом

    У меня результирующий файл примерно такой же и получается. Только я преобразую значения в структуру и ее легко сериализую.

    Reply
  7. KurganPX

    (6)

    ‘У меня результирующий файл примерно такой же и получается. Только я преобразую значения в структуру и ее легко сериализую.»

    Так я ни слова против..

    Reply
  8. kser87

    (7) KurganPX, так и я не оправдываюсь) просто говорю, как сделал. Вообще представленное по ссылке можно и в 8.3.6 реализовать: сериализовать значение в xml и результат как строку передатать в JSON. Правда смысла особого нет

    Reply
  9. BigB

    Вставил в свою конфигурацию. При проверке конфигурации на ошибки получил кучу ошибок.

    Reply
  10. kser87

    (9) BigB, Интересно. Попробую повторить. Для каких целей вставляли в конфу? Можно использовать как внешнюю.

    И вы для каких целей указали «Толстый клиент (управляемое приложение)» в проверке?

    Reply
  11. BigB

    (10) когда пишу код, то он у меня должен работать во всяких режимах. Поэтому всегда свои конфигурации проверяю с этими галками. А вставил себе, ну наверное, чтобы было. А вдруг пригодится.

    Reply
  12. kser87

    (11) BigB, понятно. Я поставил инструкции предпроцессору умышленно. Можете скачать, я включил и такой режим.. Даже не думал, что кто-то им пользуется. Насколько мне известно, даже типовые в нем не работают.

    Reply
  13. Kamikadze

    Фактически — это аналог универсальное загрузки/выгрузки между идентичными конфигурациями?

    Reply
  14. kser87

    (13) Kamikadze, да, но с «плюшками»: полная идентичность конфигураций необязательна. И есть адекватный отчет.

    Reply
  15. DonAlPatino

    А перегрузить варианты отчетов для СКД ей получится?

    Reply
  16. kser87

    (15) DonAlPatino, думаю да. Вариант вроде хранится в реквизите с типом «ХранилищеЗначения». Такое я пробовал делать.

    Ссылочные типы, которые моугт храниться в настройках, не выгружаются. Очень трудоемко написать программу, которая анализирует такое.

    Reply
  17. JetBrain

    (4) KurganPX, …согласен, и JSON используется не только в переносе данных, но и провайдерами ЭДО и EDI, пример статьи с обработкой заявки http://infostart.ru/public/436405/

    Reply
  18. kser87

    (17) st-ty@ngs.ru, только такая конструкция

    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства(«code»);                ЗаписьJSON.ЗаписатьЗначение(code);
    ЗаписьJSON.ЗаписатьИмяСвойства(«name»);                ЗаписьJSON.ЗаписатьЗначение(name);
    ….
    ЗаписьJSON.ЗаписатьКонецОбъекта();

    очень неудачная. Скорее всего, в 1С просто не доделали ЗаписьJSON и очень многие вещи невозможно сделать:

    — Записать несколько объектов

    — ЗаписьJSON.ЗаписатьЗначение(code); — в значение записать другую запись JSON или скажем структуру.

    Лучше использовать ЗаписатьJSON()

    Reply
  19. JetBrain

    (18) Лучше использовать T-SQL Запрос — это самый быстрый метод))

    Reply
  20. AKV77

    Добрый день. Конфигурация УТ 11.1 при попытке выгрузить документ Реализация товаров и услуг — ошибка:

    {ВнешняяОбработка.УниверсальныйОбменДаннымиВФорматеJSON.МодульОбъекта(1771)}: Поле объекта не обнаружено (ИмяПредопределенныхДанных)

    Структура.Вставить(«ИмяПредопределенныхДанных», ЗначениеСсылки[«ИмяПредопределенныхДанных»]);

    Reply
  21. kser87

    (20) AKV77, здравствуйте!

    Какую версию платформы используете?

    Reply
  22. xten

    Уважаемый автор! А есть ли такая чудесная вещь для 8 2 ? Спасибо!

    Reply
  23. kser87

    (22) xten, платформа 8.2 не умеет работать с json. Есть такая же, но выгружает в xml

    Reply
  24. xten

    Уважаемый автор, при загрузке файла программа пишет, что указанный файл уже существует Перезаписать его или нет, немного, кажется, неправильно, как-будто она его перезаписать хочет, а не просто загрузить. Но так , вроде, все работает. ))

    Reply
  25. kser87

    (24) xten, стандартная обработка=)

    Reply
  26. ulen

    УТ 11.2 при выгрузке стандартной обработкой через XML непонятно почему, но контактная информация партнеров не переносится.

    В данной обработке пробовали?

    Reply
  27. Aule2

    Отбираю 400+ реализаций с движениями, получаю «Переполнение стека встроенного языка на сервере» УТ 11.1.1.13 платформа (8.3.6.2299)

    Reply
  28. kser87

    (27) у вас случайно отладка не включена ? в каком режиме грузите? можно попробовать по частям

    Reply
  29. Stradivari

    Спасибо! Помогла.

    Reply
  30. jaroslav.h

    А в чем разница этой и https://infostart.ru/public/308563/ ?

    Reply
  31. kser87

    (30) в моей более продвинутый отбор.

    Reply
  32. kser87

    (30) для использования моей обработки не нужно знать язык запросов и руками добавлять объекты. Достаточно настроить отбор

    Reply
  33. shulya83

    столкнулся с двумя ошибками, что если в конфигурации есть реквизит с названием «Выбрать» не важно какого типа?

    что если в плане счетов нет субконто?

    обработка выдаёт ошибки при выгрузке )

    я у себя уже поправил

    Reply
  34. kser87

    (33) спасибо. Если на трудно, то кинь свою версию

    Reply
  35. shulya83

    как и куда?

    так же есть такой момент, если в базе источнике был реквизит предопределенный, а в базе приёмнике такого реквизита нет, то обработка упорно хочет создать предопределенный реквизит и конечно у неё это не получается сделать и вываливается с ошибкой. (пока руки не дошли исправить)

    ещё заметил что со структурой связанных документов какая то не разбериха.

    справа база приёмник унф 1.6, слева база источник унф 1.5.

    Reply
  36. shulya83

    для правильной структуры нужна правильная последовательность загрузки?

    Reply
  37. kser87

    (36) по идее не обязательно

    Reply
  38. kser87

    (36)

    (35) предопределение поправил. Больше не должен создавать

    Reply
  39. shulya83

    (38) версия таже самая? просто перекачать?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *