При интеграции нескольких информационных баз на платформе 1С:Предприятие разработчики часто сталкиваются с дилеммой выбора технологии. Традиционные методы, такие как COM-соединение или выгрузка через промежуточные файлы, постепенно уходят в прошлое из-за ограничений безопасности, сложности администрирования и низкой отказоустойчивости. Рассмотрим современные подходы к организации обмена данными между конфигурациями (например, между ЗУП и самописной системой), разберем их преимущества и определим оптимальную архитектуру решения.
Прежде чем переходить к новым технологиям, проанализируем, почему «допотопные» методы вызывают недовольство системных администраторов и архитекторов:
Современная архитектура обмена должна строиться на принципах слабой связанности, безопасности и асинхронности. Разберем по шагам, из каких компонентов состоит качественный обмен.
Для надежной синхронизации нам необходимо реализовать три независимых механизма:
ПланыОбмена.Некоторые разработчики пытаются использовать реквизиты типа Выгружен (булево) или специализированные регистры сведений. Проанализируем ситуацию: использование реквизита заставляет изменять структуру таблиц и не позволяет гибко управлять обменом с несколькими узлами. Планы обмена — это встроенный и максимально оптимизированный механизм платформы для отслеживания изменений.
Рассмотрим пример кода для регистрации изменений объекта в плане обмена:
// Регистрируем изменения для конкретного узла
ПланыОбмена.ЗарегистрироватьИзменения(УзелИнформационнойБазы, СсылкаНаОбъект);
// Или регистрируем изменения для всех узлов данного плана
ПланыОбмена.ЗарегистрироватьИзменения(ПланыОбмена.СинхронизацияДанныхЧерезФорматEnterpriseData.ВсеУзлы(), СсылкаНаОбъект);
Использование планов обмена позволяет избежать «полных выгрузок» по ночам, передавая только то, что реально изменилось с момента последней синхронизации.
Это ключевой вопрос дискуссии. Оба варианта работают через протокол HTTP, но имеют важные отличия:
Web-сервисы (SOAP):
WSDL-описание, что упрощает сопряжение двух баз 1С.HTTP-сервисы (REST):
JSON.Выясним причину популярности HTTP-сервисов: они позволяют реализовать валидацию на стороне приемника. В отличие от COM, где вы «напрямую» записываете данные, HTTP-запрос попадает в обработчик на стороне принимающей базы, где выполняется код 1С, проверяющий права, заполненность реквизитов и бизнес-логику перед записью.
Пример простейшего обработчика POST-запроса в HTTP-сервисе:
Функция СотрудникиPost(Запрос)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Здесь реализуем логику поиска или создания объекта
СотрудникСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("ИдентификаторВнешний", Данные.ID);
// Возвращаем ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Данные успешно приняты");
Возврат Ответ;
КонецФункции
Проанализируем спор о форматах. XML обладает строгой схемой (XSD), что полезно для сложных структур. Однако JSON значительно компактнее и быстрее обрабатывается. В 1С 8.3 реализована отличная поддержка обоих форматов через объекты СериализаторXDTO или ЗаписьJSON.
Если ваши конфигурации используют БСП (Библиотеку стандартных подсистем), рекомендуем рассмотреть формат EnterpriseData. Это стандартизированный XML-формат от 1С, который позволяет не описывать правила для каждого поля, а использовать готовые модули интеграции.
Если в вашей инфраструктуре баз становится больше двух, стоит рассмотреть вариант с 1С:Шиной. Это отдельное решение, которое выступает посредником. Проанализируем выгоду: базы не общаются друг с другом напрямую. База-отправитель кидает сообщение в шину и «забывает» о нем. Шина гарантирует доставку, даже если база-приемник в данный момент выключена или обновляется. Это решает проблему «зависания» сессий при ожидании ответа от соседа.
При больших объемах данных (например, первичная загрузка тысяч сотрудников из ЗУП) один HTTP-запрос может выполняться слишком долго. Рассмотрим, как ускорить процесс:
ФоновыеЗадания для отправки пакетов.Таким образом, переход на HTTP-сервисы решит проблемы с безопасностью, которыми недовольны администраторы, и обеспечит масштабируемость вашей системы в будущем.