Исходные условия
Команда: более 1-го разработчика
Основные задачи разработки: 60% задач - это приём входящих данных в форматах JSON и XML из внешних информационных систем, и их конвертация в объект 1С.
Пояснение: внешние информационные системы — это системы не из семейства «1С:Предприятие», и данные, которые они передают, не являются данными в формате КД 2 или КД 3 (EnterpriseData).
Описание процесса
При получении задачи по загрузке и конвертации данных из внешних систем разработчик выполняет её в соответствии со своими навыками и опытом. Он выбирает наиболее понятный и, с его точки зрения, эффективный способ решения задачи. Как следствие, каждый специалист реализует функционал по-своему, что в дальнейшем создает сложности при поддержке и развитии решения другими разработчиками.
Проблема
При организации обмена с внешней системой каждый разработчик реализует загрузку и конвертацию данных по-своему. Это приводит к определённым издержкам. В результате разобраться в таком обмене может только разработчик N, поскольку он его и создавал. Подключение к поддержке или развитию этого обмена любого другого специалиста потребует значительного времени на погружение в код и логику, придуманные его автором. В худшем случае другие разработчики создадут собственную реализацию загрузки и конвертации входящих данных в объект 1С, чем порождают ещё один "стандарт" загрузчика.
Как результат - отсутствие единообразия в решении подобных задач.
Потребность
Требуется инструмент для единообразного приёма и конвертации данных из внешних систем в объекты 1С. Существующие решения в архитектуре КД 2 и КД 3 не подходят для нашей проблемы, так как внешние системы редко предоставляют данные в том виде, который необходим для работы их алгоритмов.
Необходимая нам подсистема должна быть универсальной и не зависеть от конкретного формата входящих данных. Это позволит обеспечить гибкость при работе с различными форматами из внешних источников данных.
Идея решения
Поскольку архитектура решений КД 2 и КД 3 предусматривает разработку правил конвертации под конкретный формат данных, наша подсистема должна функционировать на более высоком уровне абстракции и не зависеть от формата входящих данных. Любые входящие данные — будь то JSON или XML — в конечном итоге перед конвертацией преобразуются в определённые типы коллекций 1С: Структура или Соответствие. Именно эти типы представляют собой следующий уровень абстракции.
Мы должны описывать правила конвертации для универсальных коллекций 1С. Следовательно, наша подсистема должна на основе заданных правил конвертации преобразовывать Соответствие в Объект 1С. Образно говоря, правила конвертации между Соответствием и Объектом 1С — это Мост, пройдя через который данные универсальной коллекции становятся полноценным объектом 1С.
Решение
Мост — конвертация данных — подсистема, в которой реализованы следующие функции:
- Сохранение входящих данных в регистре сведений Inbox (реализация паттерна Inbox).
- Преобразование форматов JSON и XML в универсальную коллекцию 1С типа Соответствие.
- Интерактивное описание правил конвертации Соответствия в объект 1С.
- Выполнение конвертации по заданным правилам Соответствия в объект 1С.
- Логирование этапов конвертации (при необходимости).
- Кэширование поиска ссылочных данных.
Описание решения
Пример реализации
Решим задачу по организации загрузки данных из информационной системы "Тест". Решать ее будем с помощью подсистемы "Мост - конвертация данных".
*все имена метаданных могут быть произвольными
Отладка
Для более легкого восприятия в подсистему "Мост - конвертация данных" добавлен Демо пример, в котором обыграны самые сложные, на мой взгляд, примеры правил конвертации.
Заключение
"Мост — конвертация данных" представляет собой архитектурное ядро, обеспечивающее единообразный подход к обработке и конвертации данных. Данная подсистема является базовым компонентом, который мы можем дорабатывать и развивать для реализации единообразной интеграции с различными внешними источниками данных.
Страничка проекта
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.269
Вступайте в нашу телеграмм-группу Инфостарт