Как организовать автоматическую выгрузку данных из нескольких баз ЗУП в одну центральную базу

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Вариант 1: Адаптация механизма РИБ без создания начального образа

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

Проанализируем пошаговый алгоритм настройки такой связки:

  1. Подготовка узлов в главной базе: В центральной базе создаем узлы в плане обмена (например, ПоОрганизациям или Полный). Каждому узлу присваиваем уникальный код, соответствующий одной из периферийных баз.
  2. Программная привязка периферийной базы: Вместо создания начального образа мы заходим в существующую периферийную базу и программно назначаем ей «Главный узел». Для этого в консоли кода или обработке необходимо выполнить следующую команду: ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаУзелВЦентральнойБазе); Важно: Перед этим необходимо создать в периферийной базе элемент того же плана обмена, который будет представлять центральный узел, и найти его ссылку.
  3. Синхронизация идентификаторов: Чтобы обмен заработал, коды узлов в обеих базах должны зеркально соответствовать друг другу. В главной базе код «П1», в периферийной код «ЦБ», и наоборот.
  4. Отключение передачи изменений конфигурации: Автор исходной темы интересовался, можно ли в РИБ отключить передачу изменений конфигурации. В штатном режиме РИБ всегда синхронизирует метаданные. Если это критично, можно использовать программный перехват в модуле сеанса или перед обновлением временно сбрасывать главный узел:
    
    ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
    // Выполнение операций
    ПланыОбмена.УстановитьГлавныйУзел(НужнаяСсылка);
    
    Однако помните, что при значительном расхождении метаданных (разные реквизиты объектов) обмен данными просто завершится ошибкой.

Вариант 2: Использование собственного плана обмена и Универсального обмена XML

Если РИБ кажется слишком жестким инструментом, рассмотрим вариант с использованием механизма «Замеры изменений» и типовой обработки УниверсальныйОбменДаннымиXML. Многие отказываются от этого способа, считая, что он пригоден только для ручной выгрузки всех данных. Это не так.

Выясним, как автоматизировать этот процесс:

Мы можем создать в конфигурации (или расширении) свой собственный ПланОбмена. Его единственная задача — фиксировать изменения объектов (документов, справочников, регистров). В составе плана обмена мы указываем все нужные нам типы данных.

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

Вариант 3: Почему «Универсальный формат» (EnterpriseData) может не подходить

Проанализируем ситуацию, когда программист пытается расширить стандартный обмен через Универсальный формат в ЗУП. Часто добавленные в расширение объекты не появляются в составе передаваемых данных. Почему так происходит?

Разберем основные причины:

  1. Кэширование метаданных в БСП: Библиотека стандартных подсистем (БСП) хранит настройки планов обмена в специальных внутренних таблицах. После добавления объектов в расширение необходимо обновить параметры работы с планом обмена. Часто это делается через вызов процедур типа Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные() или через специализированные инструменты разработчика для обновления кэша БСП.
  2. Правила регистрации объектов (ПРО): Даже если объект физически есть в составе плана обмена, программа не «увидит» его для передачи, если для него не прописаны правила регистрации в XML-файле, который зашит в конфигурацию или загружен отдельно.
  3. Ограничения менеджера обмена: В ЗУП 3.1 обмен через Универсальный формат оптимизирован для взаимодействия с ERP 2 и КА 2. Многие объекты там исключены на уровне кода в модуле МенеджерОбменаЧерезУниверсальныйФормат. Править этот модуль в расширении крайне трудозатратно, так как придется переписывать огромные пласты логики формирования JSON/XML.

Проблема дублирования данных при консолидации

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

Физические лица: Это самый критичный справочник. Один и тот же сотрудник может работать в разных организациях (разные базы), но в консолидированной базе он должен быть представлен одной записью ФизическиеЛица. Если использовать стандартный обмен по GUID, вы гарантированно получите дубли.

Решение: В правилах обмена (КД 2.0) необходимо настроить поиск не по внутреннему идентификатору, а по комбинации СНИЛС + ФИО или ИНН. Это позволит системе сопоставить записи и «склеить» их в центральной базе.

Справочники настроек: Подразделения, Должности, Графики работы. В каждой базе они могут иметь свои GUID. Если выгружать их «как есть», справочники в центральной базе раздуются от одинаковых по названию, но разных по идентификаторам записей. Здесь также поможет настройка поиска по наименованию или коду в рамках владельца (Организации).

Рекомендация по архитектуре обмена

На основе практического опыта экспертов (как упоминалось в сообщении 5 форума), наиболее стабильной схемой для консолидации является разделение ответственности:

  1. РИБ для контроля структуры: Используется только для синхронизации основных классификаторов и обеспечения идентичности конфигураций.
  2. Отдельный план обмена для данных: Создается кастомный план обмена, в котором прописываются правила регистрации только для тех документов и регистров, которые реально нужны для консолидированной отчетности в ЗУП.

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

← На главную