Как настроить надежный экспорт документов из измененной УПП 1.3 в измененную БП КОРП 3.0 при больших объемах данных?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Синхронизация данных между устаревающей, но все еще активно используемой конфигурацией Управление производственным предприятием (УПП) 1.3 и современной Бухгалтерией предприятия КОРП (БП КОРП) 3.0 — это классическая и одновременно сложная задача для разработчика 1С. Ситуация существенно осложняется, если обе базы подверглись сильным кастомизациям (изменена структура метаданных), а сам обмен должен выполняться периодически, запускаться разными пользователями и обрабатывать внушительные массивы документов.

В этой статье мы подробно рассмотрим, с помощью каких механизмов лучше реализовать такой экспорт, проанализируем сильные и слабые стороны каждого технологического решения и разберем конкретные архитектурные приемы для оптимизации производительности и защиты данных от перезаписи.

Выбор технологии обмена: Конвертация данных 2.1 против EnterpriseData (КД 3.0)

При интеграции сильно измененных конфигураций перед разработчиком всегда стоит выбор между двумя концептуально разными подходами: классическим XML-обменом по правилам конвертации и использованием универсального формата обмена.

1. Использование Конвертации данных 2.1 (XML-обмен по правилам)

Это проверенный временем, максимально гибкий инструмент. Он позволяет сопоставить абсолютно любые нетиповые реквизиты, таблицы и справочники, написав произвольный код в обработчиках событий правил обмена (ПКО, ПКС, ПВД).

Однако у КД 2.1 есть критический недостаток — жесткая связанность систем (tight coupling). Поскольку БП КОРП 3.0 регулярно обновляется фирмой 1С, структура ее метаданных постоянно меняется. Любое существенное изменение в БП КОРП (например, рефакторинг перечисления ставок НДС или появление новых обязательных реквизитов в табличных частях документов) приведет к тому, что старые правила КД 2.1 сломаются. Вам придется оперативно выгружать метаданные обеих баз, загружать их в КД 2.1, пересобирать правила и обновлять их у пользователей.

2. Обмен через универсальный формат EnterpriseData (ED / Конвертация данных 3.0)

В последних релизах УПП 1.3 (начиная с версий 1.3.200+) разработчики добавили штатную поддержку синхронизации через универсальный формат. В конфигурации появились план обмена СинхронизацияДанныхЧерезУниверсальныйФормат, общий модуль МенеджерОбменаЧерезУниверсальныйФормат и соответствующие пакеты XDTO.

Главный плюс EnterpriseData — слабая связанность систем. БП КОРП «общается» не напрямую со структурой УПП, а с промежуточным стандартизированным форматом XML/XDTO. При обновлении БП КОРП логика трансляции формата ED во внутренние реквизиты обновляется автоматически силами 1С, и правила на стороне УПП переписывать не требуется. Если в ваших базах добавлены уникальные реквизиты, стандартную схему ED можно расширить либо использовать готовые модули доработки обмена (например, специализированные внешние обработки интеграции).

Решение проблемы характеристик номенклатуры при переносе в БП КОРП

Конфигурация УПП 1.3 позволяет вести детальный учет по характеристикам номенклатуры (размеры, цвета и т.д.). В типовой БП КОРП 3.0 полноценного аналога характеристик в справочнике номенклатуры нет — там учет ведется в разрезе чистых номенклатурных позиций. При проектировании правил обмена нам необходимо решить, как сопоставлять эти данные.

Рассмотрим два основных сценария решения этой проблемы:

  1. Схлопывание данных: Если детальный аналитический учет по цветам и размерам в бухгалтерии не требуется, при выгрузке документа все характеристики отбрасываются, а в БП КОРП создается или подбирается одна базовая номенклатурная позиция.
  2. Создание уникальных позиций номенклатуры в БП: Если бухгалтеру важно видеть раздельный учет, то в правилах конвертации прописывается алгоритм, который генерирует в БП КОРП под каждую связку «Товар + Характеристика» отдельный элемент справочника Номенклатура (например, наименование формируется как «Рабочий костюм (Размер 48, Рост 180)»).

Защита проведенных и проверенных документов от перезаписи

Поскольку выгрузка будет производиться периодически разными пользователями, высок риск того, что документы за прошлые периоды, которые бухгалтер уже проверил, закрыл от изменений или скорректировал вручную в БП КОРП, будут повторно перезаписаны данными из УПП. Чтобы избежать этого, необходимо внедрить механизм защиты.

Для реализации защиты на стороне БП КОРП в правилах загрузки (или через расширение конфигурации в модуле объекта документа) в обработчике «Перед записью» следует прописать блокирующий алгоритм. Проанализируем пример кода:


// Пример обработчика "Перед записью полученных данных" в приемнике БП КОРП
Если Объект.Ссылка.Проведен Тогда
    // Если документ в базе-приемнике уже проведен и период закрыт, 
    // отменяем перезапись объекта, чтобы сохранить ручные правки бухгалтера.
    // В КД 2.1 для этого можно сбросить загружаемый Объект в Неопределено:
    Объект = Неопределено;
    ВыполнитьОтказ = Истина;
КонецЕсли;

Использование этого подхода гарантирует, что ручные корректировки проводок и закрытые периоды в БП КОРП не пострадают при массовой повторной инициализации обмена пользователями со стороны УПП.

Оптимизация производительности: порционная (пакетная) выгрузка данных

Когда документов в УПП действительно много (десятки тысяч за период), попытка выгрузить их одним файлом через стандартную обработку УниверсальныйОбменДаннымиXML гарантированно приведет к критическому потреблению оперативной памяти на сервере и ошибке «Out of Memory».

Чтобы избежать падения платформы, разберем по шагам логику организации порционного обмена:

  1. Регистрируйте изменения документов на узле плана обмена.
  2. При запуске обмена выбирайте зарегистрированные изменения частями (например, по 500 или 1000 объектов).
  3. Записывайте каждую порцию в отдельный файл обмена и отправляйте его получателю.
  4. После успешного подтверждения приема пакета очищайте регистрацию для перенесенной порции объектов.

Рассмотрим пример кода на стороне УПП, реализующий выборку изменений порциями:


// Пример порционного чтения зарегистрированных изменений
УзелОтбора = ПланыОбмена.ВыбратьИзменения(УзелПолучатель, НомерСообщения, 1000); // Ограничение в 1000 объектов
Пока УзелОтбора.Следующий() Цикл
    ТекущийОбъект = УзелОтбора.Получить();
    Если ТекущийОбъект <> Неопределено Тогда
        // Производим выгрузку текущего объекта в XML-последовательность
        ВыгрузитьОбъектВПоток(ТекущийОбъект);
    КонецЕсли;
КонецЦикла;

Для повышения безопасности и скорости передачи данных вместо традиционных общих сетевых папок или FTP-соединений рекомендуется опубликовать на стороне БП КОРП специальный **HTTP-сервис**. В этом случае УПП будет передавать сформированные порционные пакеты напрямую через HTTP-запросы (POST), что минимизирует риски блокировки файлов операционной системой.

Разработка архитектуры подсистемы автообмена

Для обеспечения стабильной работы большого количества пользователей идеальным решением будет создание в УПП выделенной подсистемы автообмена. Она должна функционировать по следующему принципу:

Такой подход полностью снимает нагрузку с конечных пользователей УПП, исключает зависание сессий при проведении документов и гарантирует гарантированную доставку данных даже при нестабильном канале связи.

← На главную