При достижении определенного порога нагрузки (от 1500–2000 документов в день) классические методы обмена через COM-соединение начинают давать сбои. Они становятся медленными, нестабильными и приводят к утечкам памяти на сервере. В этой статье мы подробно разберем, как перестроить архитектуру обмена, чтобы система справлялась с интенсивным потоком данных без задержек и ошибок.
Разберем основные причины, по которым стоит отказаться от COM-технологии в современных интеграциях. Во-первых, это синхронность: пока данные передаются, вызывающий процесс заблокирован. Во-вторых, каждый вызов через COM требует создания полноценной сессии в базе-приемнике, что потребляет значительные ресурсы сервера. Проанализируем ситуацию: при выгрузке 2000 реализаций в день любая сетевая заминка или блокировка в Бухгалтерии предприятия 3.0 приведет к "зависанию" процесса в УПП 1.3.
Рассмотрим наиболее современный и быстрый способ обмена — использование HTTP-сервисов в сочетании с форматом JSON. В отличие от XML, формат JSON более компактен и быстрее обрабатывается платформой 1С.
Пошаговый алгоритм реализации:
HTTP-сервис с методом POST. Этот метод будет принимать строку JSON, содержащую данные документа.JSON.Посмотрим на пример кода для формирования и отправки JSON из УПП:
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ДанныеДокумента = Новый Структура("Номер, Дата, Контрагент, Сумма", Объект.Номер, Объект.Дата, Объект.Контрагент.Наименование, Объект.СуммаДокумента);
ЗаписатьJSON(ЗаписьJSON, ДанныеДокумента);
СтрокаJSON = ЗаписьJSON.Закрыть();
HTTPСоединение = Новый HTTPСоединение("server_address", , "user", "password");
HTTPЗапрос = Новый HTTPЗапрос("/your_service/v1/load_doc");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Ответ = HTTPСоединение.ОтправитьДляОбъекта(HTTPЗапрос);
Для того чтобы система точно знала, какие документы нужно выгрузить, проанализируем механизм ПланыОбмена. В УПП 1.3 этот механизм встроен "из коробки" и работает крайне эффективно. Создадим отдельный план обмена (например, ОбменСБухгалтерией) и включим в него только необходимые типы документов, такие как РеализацияТоваровУслуг.
Это позволит нам:
Выясним, как ускорить выгрузку 2000 документов. Если выполнять это в один поток, процесс может затянуться на часы. Рассмотрим вариант с использованием ФоновыеЗадания. Мы можем разбить пул документов, требующих выгрузки, на несколько порций и запустить несколько фоновых заданий одновременно.
Пример логики распределения нагрузки:
Плана обмена.ФоновыеЗадания.Выполнить().
Важный нюанс: при параллельной загрузке в БП 3.0 нужно внимательно следить за блокировками, чтобы разные потоки не пытались одновременно записывать данные в одни и те же регистры (например, ДанныеИнформационныхСистем или счета учета).
Проанализируем нагрузку на БП 3.0. Самая тяжелая операция — это не просто запись документа, а его Проведение. При массовой загрузке рекомендуется принимать документы в состоянии "Записан", а проведение выносить в отдельный регламентный процесс.
Рассмотрим схему:
Записать(РежимЗаписиДокумента.Запись).Выясним причину медленной работы при использовании Конвертации данных 2.0. Универсальные правила требуют парсинга XML и выполнения кода в обработчиках через Выполнить(), что существенно медленнее прямого обращения к реквизитам объекта. Если структура документа РеализацияТоваровУслуг стабильна, напишем прямой алгоритм заполнения объекта в коде HTTP-сервиса. Это даст прирост скорости в несколько раз.
Пример прямого заполнения на стороне БП 3.0:
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Дата = ДанныеИзJSON.Дата;
НовыйДок.Организация = Справочники.Организации.НайтиПоКоду(ДанныеИзJSON.КодОрганизации);
// Прямое заполнение табличной части
Для Каждого СтрокаТЧ Из ДанныеИзJSON.Товары Цикл
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(СтрокаТЧ.Код);
// ... заполнение остальных реквизитов
КонецЦикла;
НовыйДок.Записать();
Подведем итог нашего анализа. Для надежной выгрузки большого объема реализаций из УПП 1.3 в БП 3.0 следует придерживаться следующей стратегии:
Применение этих методов позволит системе стабильно обрабатывать даже возрастающие объемы данных, обеспечивая оперативность бухгалтерского учета.