Выгрузка/загрузка данных в формате 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 не будет опубликован. Обязательные поля помечены *