gifts2017

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

Опубликовал Андрей Волин (kser87) в раздел Администрирование - Распределенная БД (УРИБ, УРБД)

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

- Добавлена возможность выгружать с документами движения

Скачать файлы

Наименование Файл Версия Размер
Выгрузка загрузка данных в формате JSON 114
.epf 66,04Kb
11.03.16
114
.epf 66,04Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Игорь Фелькер (Brawler) 28.01.16 08:58
XML универсален и подходит для решения большинства задач. Но у него есть один большой недостаток: наличие тэгов и , как следствие, большой объем "лишней" информации.

Все в мире относительно, как по мне, так XML лучше.
На вкус и цвет все фломастеры разные.
2. Андрей Волин (kser87) 28.01.16 10:45
(1) Brawler, у xml при использовании в 1С есть один очень большой плюс по сравнению с JSON: почти все типы (де)сериализуются на уровне платформы. JSON же умеет работать только с примитивными типами, массивами, структурами и соответсвиями. При этом соответствие десериализуется в структуру (WTF?!) и в качестве ключа можно использовать только строку.
vasiliy_b; +1 Ответить
3. Василий Зайцев (vasiliy_b) 28.01.16 13:54
При этом соответствие десериализуется в структуру (WTF?!)
- сам еще не проверял, но если это так, то я согласен, лучше было бы наоборот, так как соответствие допускает любое значение ключа, и при десериализации в структуру, можно получить ошибку.
4. Artyom Brykhovetskiy (KurganPX) 28.01.16 13:55
Каждому свое.
Десериализация при переносе данных, особенно между неидентичными конфигурациями или различными платформами является больше злом, чем добром.
JSON придумывался не для бэкапов или обмена в виде файлов, он нужен для обмена в интернетах и в этом плане - незаменим.
Извините, но передавать бессмысленный объем "шлака" в виде тегов, стрелок и всего остального присущего XML - это глупость бессмысленная. Зачем хранить и передавать в 20 раз больше данных, чем чем это необходимо.
P.S. про десериализацию и JSON:
http://v8.1c.ru/o7/201501json/index.htm
leonidol; dj_serega; Alex_E; st-ty@ngs.ru; JohnyDeath; +5 Ответить 2
5. Андрей Волин (kser87) 28.01.16 14:23
(3) vasiliy_b, поэтому сейчас при попытке сериалации в JSON соответствия с нестроковым ключом 1С-ка падает с ошибкой
6. Андрей Волин (kser87) 28.01.16 14:31
(4) KurganPX, это только в 8.3.7 появилось=) И опять же справедливы ваши слова: при переносе данных, особенно между неидентичными конфигурациями или различными платформами является больше злом

У меня результирующий файл примерно такой же и получается. Только я преобразую значения в структуру и ее легко сериализую.
7. Artyom Brykhovetskiy (KurganPX) 28.01.16 14:49
(6) kser87,
'У меня результирующий файл примерно такой же и получается. Только я преобразую значения в структуру и ее легко сериализую."
Так я ни слова против..
8. Андрей Волин (kser87) 28.01.16 14:50
(7) KurganPX, так и я не оправдываюсь) просто говорю, как сделал. Вообще представленное по ссылке можно и в 8.3.6 реализовать: сериализовать значение в xml и результат как строку передатать в JSON. Правда смысла особого нет
9. BigB (BigB) 01.02.16 21:45
Вставил в свою конфигурацию. При проверке конфигурации на ошибки получил кучу ошибок.
Прикрепленные файлы:
10. Андрей Волин (kser87) 01.02.16 21:49
(9) BigB, Интересно. Попробую повторить. Для каких целей вставляли в конфу? Можно использовать как внешнюю.

И вы для каких целей указали "Толстый клиент (управляемое приложение)" в проверке?
11. BigB (BigB) 02.02.16 00:02
(10) kser87, когда пишу код, то он у меня должен работать во всяких режимах. Поэтому всегда свои конфигурации проверяю с этими галками. А вставил себе, ну наверное, чтобы было. А вдруг пригодится.
12. Андрей Волин (kser87) 02.02.16 01:10
(11) BigB, понятно. Я поставил инструкции предпроцессору умышленно. Можете скачать, я включил и такой режим.. Даже не думал, что кто-то им пользуется. Насколько мне известно, даже типовые в нем не работают.
13. Игорь Дзеса (Kamikadze) 03.02.16 11:01
Фактически - это аналог универсальное загрузки/выгрузки между идентичными конфигурациями?
14. Андрей Волин (kser87) 03.02.16 11:11
(13) Kamikadze, да, но с "плюшками": полная идентичность конфигураций необязательна. И есть адекватный отчет.
15. Вячеслав Алпатов (DonAlPatino) 03.02.16 14:20
А перегрузить варианты отчетов для СКД ей получится?
16. Андрей Волин (kser87) 03.02.16 14:52
(15) DonAlPatino, думаю да. Вариант вроде хранится в реквизите с типом "ХранилищеЗначения". Такое я пробовал делать.

Ссылочные типы, которые моугт храниться в настройках, не выгружаются. Очень трудоемко написать программу, которая анализирует такое.
17. Stepan Tyumentsev (st-ty@ngs.ru) 06.02.16 07:39
(4) KurganPX, ...согласен, и JSON используется не только в переносе данных, но и провайдерами ЭДО и EDI, пример статьи с обработкой заявки http://infostart.ru/public/436405/
18. Андрей Волин (kser87) 06.02.16 14:30
(17) st-ty@ngs.ru, только такая конструкция

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


очень неудачная. Скорее всего, в 1С просто не доделали ЗаписьJSON и очень многие вещи невозможно сделать:
- Записать несколько объектов
- ЗаписьJSON.ЗаписатьЗначение(code); - в значение записать другую запись JSON или скажем структуру.

Лучше использовать ЗаписатьJSON()
19. Stepan Tyumentsev (st-ty@ngs.ru) 06.02.16 16:14
(18) kser87, Лучше использовать T-SQL Запрос - это самый быстрый метод))
20. Андрей (AKV77) 03.05.16 11:46
Добрый день. Конфигурация УТ 11.1 при попытке выгрузить документ Реализация товаров и услуг - ошибка:

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



21. Андрей Волин (kser87) 05.05.16 15:40
(20) AKV77, здравствуйте!
Какую версию платформы используете?
22. Сергей Иванов (xten) 07.08.16 00:12
Уважаемый автор! А есть ли такая чудесная вещь для 8 2 ? Спасибо!
23. Андрей Волин (kser87) 07.08.16 23:09
(22) xten, платформа 8.2 не умеет работать с json. Есть такая же, но выгружает в xml
24. Сергей Иванов (xten) 11.08.16 21:12
Уважаемый автор, при загрузке файла программа пишет, что указанный файл уже существует Перезаписать его или нет, немного, кажется, неправильно, как-будто она его перезаписать хочет, а не просто загрузить. Но так , вроде, все работает. ))
25. Андрей Волин (kser87) 16.08.16 22:19
(24) xten, стандартная обработка=)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа