Исходные условия
Команда: более 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С |
 |
| В табличной части обработки указываем соответствие между полем источником и полем приемником |
 |
| Поле приемник - необязательное. Данные поля источника, которому не назначен поле приемник, будет доступно при описании алгоритмов конвертации данных |
 |
Поле Источник имеет Назначение:
Идентификатор - указывается для поля, которое является идентификатором текущего набора данных;
Данные - указывается для поля, которое является источником данных для создания объекта приемника 1С;
Тип - указывается для поля, которое является идентификатором типа текущего набора данных |
 |
| Поля Приемник, Тип приемника и Реквизит условия - это информация о реквизите приемника данных, куда будет сконвертировано значение Источника |
 |
| Если в Реквизит условия установлено значение #АвтоПоиск#, то поиск значения будет выполнен по публичным идентификаторам. В случае отсутствия значения в публичных идентификаторах, в управляющем модуле Идентификатора обмена будет выполнен алгоритм автопоиска, ели он был предварительно описан |
 |
| Флаг "Это поле табличной части" говорит что Источник - это табличная часть |
 |
| С помощью команды "Показать дополнительные настройки" можно посмотреть дополнительные данные сопоставления полей, и изменит, например "Контейнер значения". Это поле переопределяет табличную часть приемник |
 |
| Команда "Код правил конвертации" генерирует и показывает код, который является правилом конвертации входящих данных в объект 1С. Его необходимо скопировать в буфер обмена и вставить в новый общий модуль правил конвертации, который называется как указано в поле Имя ПКО. Полученные общий модуль правил конвертации необходимо указать в подсистеме, которая указана в поле "Подсистема ПКО" элемента справочника "Идентификатор обмена" |
 |
Допускается и рекомендуется доработка сгенерированных правил конвертации в конфигураторе. События которые доступны к доработке:
ПриОпределенииПриемникаДанных - переопределение поиска уже ранее созданного объекта 1С;
ПриЗаполненииРеквизитов - событие заполнения шапки документа/справочника;
ПослеДобавленияСтрокиТЧ - событие заполнения строки табличной части;
ПередЗаписью;
ПослеЗаписи |
 |
Обработка "Обмен данными"
| Рабочий стол обмена с внешними системами. |
 |
| Команда "Загрузить все данные" страницы "Загрузка данных" выполняет загрузку и конвертацию данных из внешней системы, которой соответствует значение из "Идентификатор обмена" |
 |
| Результат загрузки и конвертации данных смотрим на странице "Протокол обмена" |
 |
| Является источником данных для подсистемы "Мост - конвертация данных". Предназначен для хранения входящих данных. До записи в этот РС допускается изменение и модификация входящих данных при транспорте из внешних систем. |
 |
Регистр сведений "Публичные идентификаторы"
| Предназначен для быстрого поиска ссылок 1С по их идентификаторам обмена. |
 |
Регистр сведений "Протокол обмена"
| Предназначен для фиксации "Идентификатора", который был принят к фактической конвертации в объект 1С. |
 |
Регистр сведений "Протокол обмена - история"
| Предназначен для фиксации результатов конвертации "Идентификатора". Будет зафиксирован результат конвертации и те этапы, которые указаны в настройках справочника "Идентификаторы обмена" |
 |
Пример реализации
Решим задачу по организации загрузки данных из информационной системы "Тест". Решать ее будем с помощью подсистемы "Мост - конвертация данных".
*все имена метаданных могут быть произвольными
| Шаг |
Действие |
Представление |
| 1 |
Процедура "мостТранспортДанных_Тест.ЗагрузкаДанныхИзВнешнихСистем" забирает данные из внешних систем и записывает их в РС "Inbox" |
| 2 |
Подсистема "Мост - конвертация данных" считывает данные из РС "Inbox" и конвертирует каждое сообщение в коллекцию данных "Соответствие" (далее — Данные ВХ) |
| 3 |
Общий модуль "мостДиспетчер_Тест" связывает Данные ВХ с общим модулем правила конвертации "мостПКО_Тест_Справочник_ДемоСправочник" (далее — Инструкция КД)
|
| 4 |
Подсистема "Мост - конвертация данных" выполняет Инструкцию КД, где Данные ВХ прогоняются через правило конвертации объекта мостПКО_Тест_Справочник_ДемоСправочник, в результате чего создаётся или обновляется Объект 1С |
| 5 |
При создании Объекта 1С его идентификатор добавляется в РС "Публичные идентификаторы", "Протокол обмена" и "Протокол обмена — история" |
Отладка
Для более легкого восприятия в подсистему "Мост - конвертация данных" добавлен Демо пример, в котором обыграны самые сложные, на мой взгляд, примеры правил конвертации.
Заключение
"Мост — конвертация данных" представляет собой архитектурное ядро, обеспечивающее единообразный подход к обработке и конвертации данных. Данная подсистема является базовым компонентом, который мы можем дорабатывать и развивать для реализации единообразной интеграции с различными внешними источниками данных.
Страничка проекта
data_conversion_bridge_1C