Процессор вывода результата компоновки данных в JSON. И не только...

Опубликовал Петр Базелюк (pbazeliuk) в раздел Обмен - Обмен с другими системами

У каждого разработчика возникают задачи интеграции решений. Основная масса решений призвана вывести данные из «1С:Предприятие 8» в обусловленном формате. Разработчики используют огромную часть своих драгоценных ресурсов на реализацию определенной структуры вывода и необходимого формата. А что если...

Лирическое отступление

Вспомните свои проекты интеграции, почти все они имеют вывод в виде таблицы или дерева. Примерно год назад мне пришла голову идея, а что если использовать за основу обменов систему компоновки данных - она ведь все это умеет. Почти целый год эта идея обкатывалась на различных конфигурациях, платформах и серверах; при различных требованиях к интеграции; успешно выводила сотни миллионов объектов за один подход (BI системы). Пришло время двигать технология в массы.

Как заставить это работать?

  • Необходима платформа «1С:Предприятие 8», версия и режим совместимости 8.3.6 и выше;
  • К статье прикреплена конфигурация, в ней 3 общих модуля - это часть кодовой базы из проекта «Библиотека интеграционного счастья», а так же обработка, которая умеет выводить JSON используя схему компоновки данных. Вывод максимально аналогичен выводу в ТабличныйДокумент;
    • Общие модули это основа, которая работает с вашими настройками;
    • Дополнительная обработка это готовый пример реализации вывода в JSON. Что примечательно, вы можете реализовать такую же обработку для другого формата по аналогии и она будет работать;
    • Ничего не мешает выполнять вывод даже в очень специфичные форматы.
  • Достаточно «Сравнить и объединить» с основной конфигурацией и система готова к работе;
  • Создать схему компоновки данных, инициализировать StreamObject (Дополнительная обработка) и передать, как параметры, в основной общий модуль и на выходе получить результат;
  • Ну как же без примера:
    • Быстрый вывод. Вывод с использованием дополнительных объектов, повышенное использование памяти: 

      НастройкиМакета = IHLDataComposition.NewDataCompositionTemplateParameters();
      НастройкиМакета.Schema   = СхемаКомпоновкиДанных;
      НастройкиМакета.Template = НастройкиКомпоновкиДанных;

      НастройкиВывода = IHLDataComposition.NewOutputParameters();
      НастройкиВывода.DCTParameters = НастройкиМакета;
      НастройкиВывода.CanUseExternalFunctions = Истина;

      StreamObject = Обработки.DataProcessorJSON.Create();
      StreamObject.Initialize();
      StreamObject.WriteStartObject();

      // Последний параметр указывает на быстрый вывод
      IHLDataComposition.Output(Неопределено, StreamObject, НастройкиВывода, Ложь);

      StreamObject.WriteEndObject();
      Результат = StreamObject.Close();

    • Последовательный вывод. Медленнее, чем быстрый вывод на 22.53%, но позволяет выводить результаты ограниченные только размером оперативной памяти сервера «1С:Предприятие 8»:

      НастройкиМакета = IHLDataComposition.NewDataCompositionTemplateParameters();
      НастройкиМакета.Schema   = СхемаКомпоновкиДанных;
      НастройкиМакета.Template = НастройкиКомпоновкиДанных;

      НастройкиВывода = IHLDataComposition.NewOutputParameters();
      НастройкиВывода.DCTParameters = НастройкиМакета;
      НастройкиВывода.CanUseExternalFunctions = Истина;

      StreamObject = Обработки.DataProcessorJSON.Create();
      StreamObject.Initialize();
      StreamObject.WriteStartObject();

      // Последний параметр указывает на последовательный вывод
      IHLDataComposition.Output(Неопределено, StreamObject, НастройкиВывода, Истина);

      StreamObject.WriteEndObject();
      Результат = StreamObject.Close();

  • Поверьте, в моей практике, пока не удалось встретить обмен, который не укладывался в возможности системы компоновки данных;
  • Вся конфигурация написана на английском языке, так как необходимо гарантировать работу в иностранных конфигурациях.

Видео, как это работает:

На этом, пожалуй, закончу статью. Это еще не конец, проект живой и вы можете высказать свои предложения, а так же планирую дополнять статью.

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

Наименование Файл Версия Размер
IHL (Расширение процессора вывода компоновки данных)
.cf 20,50Kb
13.02.17
12
.cf 0.5.0.0 20,50Kb 12 Скачать
Тестовая обработка из видео "Курсы валют"
.epf 8,26Kb
14.02.17
6
.epf 8,26Kb 6 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Alexei Snitkovski (Snitkovski) 14.02.17 11:28 Сейчас в теме
Спасибо!
Очень интересная разработка - ознакомимся.
И показательно, что авторы сразу говорят о "необходимости работы в иностранных конфигурациях" - отдельное спасибо!
Inkasor; DrAku1a; Serg_1C(M); +3 Ответить
2. Трактор Трактор (Трактор) 1109 15.02.17 10:20 Сейчас в теме
Хотел изобразить что-то подобное. Но руки не доходили. Плюс посовещавшись с веб программистами решили остаться на soap.
3. Петр Базелюк (pbazeliuk) 1182 15.02.17 11:08 Сейчас в теме
(2) Идея давно летала в воздухе, но как всегда не доходят руки ни :) Вчера с коллегой приняли решения, добавить больше функциональности, справочник обменов, что бы можно было СКД редактировать прямо в «1С:Предприятии 8» и, возможно, логическое продолжение точку входа (HTTPСервис).
4. Konstantin Konstantin (KonstB) 160 16.02.17 11:47 Сейчас в теме
(0) Вопрос не по теме

Вся конфигурация написана на английском языке, так как необходимо гарантировать работу в иностранных конфигурациях


Почему тогда не

StreamObject = DataProcessors.DataProcessorJSON.Create();

или не

TemplateParameters = IHLDataComposition.NewDataCompositionTemplateParameters();

Почему часть на русском часть на "иностранном"?
5. Петр Базелюк (pbazeliuk) 1182 16.02.17 14:17 Сейчас в теме
(4) В английской версии оно так и есть, но для обывателей этого ресурса, думаю, лучше видеть знакомые слова.
6. Konstantin Konstantin (KonstB) 160 16.02.17 14:53 Сейчас в теме
(5) Ясно.

П.С, Режет глаз (часть на русском часть на "иностранном") и как результат менее понятно - ну это чисто мое мнение :) Пару раз видел на боевых конфигурациях "рушлиш" - мрак ... )
7. Ярослав Володимирович (myr4ik07) 96 16.02.17 22:15 Сейчас в теме
Несколько раз прочитал и не могу понять применения, в чем фишка, дайте ответ? Авось и ко мне дойдет где у себя это могу прикрутить...
8. Петр Базелюк (pbazeliuk) 1182 17.02.17 10:05 Сейчас в теме
(7) Представте кому-то нужны данные из «1С:Предприятие 8», ваша задача набросать СистемуКомпоновкиДанных и создать структуру отчета которая бы соответствовала вашему обмену. После прогонки данным модулем на выходе будет необходимый результат.
myr4ik07; +1 Ответить