Лирическое отступление
Вспомните свои проекты интеграции, почти все они имеют вывод в виде таблицы или дерева. Примерно год назад мне пришла голову идея, а что если использовать за основу обменов систему компоновки данных - она ведь все это умеет. Почти целый год эта идея обкатывалась на различных конфигурациях, платформах и серверах; при различных требованиях к интеграции; успешно выводила сотни миллионов объектов за один подход (BI системы). Пришло время двигать технология в массы.
Как заставить это работать?
Версия 0.5.0.0
- Необходима платформа «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();
- Быстрый вывод. Вывод с использованием дополнительных объектов, повышенное использование памяти:
- Поверьте, в моей практике, пока не удалось встретить обмен, который не укладывался в возможности системы компоновки данных;
- Вся конфигурация написана на английском языке, так как необходимо гарантировать работу в иностранных конфигурациях.
Видео, как это работает:
Версия 0.6.0.0
- Необходима платформа «1С:Предприятие 8», версия и режим совместимости 8.3.6 и выше;
- К статье прикреплена конфигурация, в ней локализированная часть подсистемы - из проекта «Библиотека интеграционного счастья»;
- Достаточно «Сравнить и объединить» с основной конфигурацией и система готова к работе;
- После установки необходимо выполнить такие шаги:
- добавить необходимые методы в справочник IHL_Methods (конфигурация пока поставляеться без встроенных методов)
- после этого можно создавать элементы справочника IHL_ExchangeSettings (XML и CSV форматы пока не локализированы)
- после выбора необходимого формата станет возможно добавлять методы из справочника IHL_Methods
- на этом этапе можно редактировать схему компоновки данных (Edit schema), а так же в конструкторе можно загрузить схему из файла
-
после создания СКД, появляеться возможность изменять настройки СКД через компоновщик настроек (страницы Structure, Parameters, Fields, Filter, Order). Внимание, после изменения СКД в компоновщик настроек будут загружены настройки по умолчанию.
- на вкладке тестирование можно протестировать вывод в табличный документ и в текстовый документ в формате обмена, что был выбран при создании справочника
- Элементы справочника можно использовать для хранения и тестирования настроек ваших обменов; Вызывать необходимые настройки при определенных событиях и организовывать обмены (пока это на плечах ваших программистов, в версии 0.7.0.0 будет проще);
- Так же осталась возможность из предыдущей версии: создать схему компоновки данных, инициализировать StreamObject (Дополнительная обработка) и передать, как параметры, в основной общий модуль и на выходе получить результат;
- Небольшие изменения в примере из версии 0.5.0.0:
- Быстрый вывод. Вывод с использованием дополнительных объектов, повышенное использование памяти:
DataCompositionTemplate = IHL_DataComposition.NewDataCompositionTemplateParameters();
DataCompositionTemplate.Schema = DataCompositionSchema;
DataCompositionTemplate.Template = DataCompositionSettings;
OutputParameters = IHL_DataComposition.NewOutputParameters();
OutputParameters.DCTParameters = DataCompositionTemplate;
OutputParameters.CanUseExternalFunctions = True;
StreamObject = DataProcessors.DataProcessorJSON.Create();
StreamObject.Initialize();
StreamObject.WriteStartObject();
// Последний параметр указывает на быстрый вывод
IHL_DataComposition.Output(Undefined, StreamObject, OutputParameters, False);
StreamObject.WriteEndObject();
Result = StreamObject.Close(); - Последовательный вывод. Медленнее, чем быстрый вывод на 22.53%, но позволяет выводить результаты ограниченные только размером оперативной памяти сервера «1С:Предприятие 8»:
DataCompositionTemplate = IHL_DataComposition.NewDataCompositionTemplateParameters();
DataCompositionTemplate.Schema = DataCompositionSchema;
DataCompositionTemplate.Template = DataCompositionSettings;
OutputParameters = IHL_DataComposition.NewOutputParameters();
OutputParameters.DCTParameters = DataCompositionTemplate;
OutputParameters.CanUseExternalFunctions = True;
StreamObject = DataProcessors.DataProcessorJSON.Create();
StreamObject.Initialize();
StreamObject.WriteStartObject();
// Последний параметр указывает на последовательный вывод
IHL_DataComposition.Output(Undefined, StreamObject, OutputParameters, True);
StreamObject.WriteEndObject();
Result = StreamObject.Close();
- Быстрый вывод. Вывод с использованием дополнительных объектов, повышенное использование памяти:
Планы для версии 0.7.0.0:
- Локализировать интерфейс програмного получения настроек обмена;
- Локализировать возможность обрабатывать API необходимого формата (Describe API, описать API есть возможность, но нигде не используеться);
- Локализировать базовый авторизационный модуль (Базовая авторизация) + прикрепить видео трех-шаговой OAuth авторизации;
- Локализировать подписки на события для вызова методов обмена из справочника IHL_ExchangeSettings.
На этом, пожалуй, закончу статью. Это еще не конец, проект живой и вы можете высказать свои предложения, а так же планирую дополнять статью.