Как настроить односторонний обмен данными из ЗУП 3.1 в БП 3.0 без обратной загрузки?

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

Синхронизация данных между программами 1С:Зарплата и управление персоналом 3.1 (ЗУП) и 1С:Бухгалтерия предприятия 3.0 (БП) изначально проектировалась разработчиками фирмы 1С как двусторонний процесс. Из ЗУП в БП передаются сведения о начислениях, выплатах, страховых взносах и кадровых изменениях. В обратную сторону — из БП в ЗУП — летят подтверждения (квитанции) о приеме пакетов данных, статусы проведения документов (например, отметка «Отражено в учете» в документе ОтражениеЗарплатыВБухучете), а также обновленные элементы нормативно-справочной информации (НСИ).

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

Почему стандартная кнопка «Синхронизировать» всегда выполняет двусторонний обмен?

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

Дело в том, что кнопка «Синхронизировать» в стандартном интерфейсе 1С жестко инициализирует полный цикл интеграции. Она игнорирует пользовательские интерактивные сценарии обмена и последовательно запускает:

  1. Выгрузку данных из текущей базы во внешний файл или канал связи.
  2. Загрузку входящих данных из канала связи в текущую базу.

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

---

Решение №1. Использование регламентных сценариев обмена по расписанию

Если мы хотим, чтобы обмен происходил строго в соответствии с нашими правилами (ЗУП только отправляет, а БП только принимает), нам необходимо отказаться от использования интерактивной кнопки «Синхронизировать» и перейти на выполнение обмена через Сценарии синхронизации данных.

Проанализируем процесс настройки этого метода по шагам:

  1. Перейдем в раздел Администрирование — Синхронизация данных — Настройки синхронизации данных.
  2. Откроем настройки нашей синхронизации и перейдем по ссылке Сценарии обмена данными.
  3. Создадим новый сценарий обмена на стороне ЗУП:
    • Добавим шаг сценария.
    • В колонке «Выполняемое действие» укажем только Отправка данных.
    • Шаг «Получение данных» оставляем пустым или удаляем его.
  4. Настроим аналогичный сценарий на стороне БП, но с действием Получение данных.
  5. Для запуска обмена пользователям необходимо использовать не стандартную кнопку на панели, а запускать созданный сценарий вручную (нажав правой кнопкой мыши на сценарии -> Выполнить сценарий) либо настроить автоматическое расписание выполнения регламентного задания.

Важное ограничение: Чтобы исключить человеческий фактор, рекомендуется с помощью механизма ИзменениеФормы или через роли прав доступа скрыть стандартную кнопку «Синхронизировать» с командной панели формы синхронизации.

---

Решение №2. Корректировка правил регистрации объектов (ПРО) через Конвертацию данных

Этот метод считается наиболее профессиональным и надежным с точки зрения системной архитектуры 1С. Мы физически запретим конфигурации «1С:Бухгалтерия предприятия» регистрировать какие-либо изменения для отправки в ЗУП. При этом механизм квитирования (подтверждения получения пакетов) продолжит работать, предотвращая бесконечное раздувание таблиц регистрации изменений в ЗУП.

Разберем алгоритм реализации этого метода:

  1. Откроем конфигурацию Конвертация данных 2.1 (или 3.0 в зависимости от используемой технологии обмена).
  2. Выгрузим типовые правила регистрации объектов (ПРО) из нашей информационной базы БП 3.0.
  3. Загрузим эти правила в Конвертацию данных.
  4. Для каждого объекта метаданных (документы, справочники), выгрузку которых из БП в ЗУП необходимо заблокировать, перейдем в обработчик события ПередОбработкой или ПередВыгрузкой.
  5. Пропишем в обработчике принудительный отказ от регистрации объекта:

// Отключаем регистрацию изменений объекта для узла обмена с ЗУП
Отказ = Истина;
  1. Сохраним измененные правила регистрации в файл формата XML.
  2. Вернемся в базу БП 3.0, зайдем в настройки синхронизации, выберем пункт «Загрузить правила регистрации объектов» и импортируем наш измененный файл XML.

После этого БП 3.0 полностью перестанет регистрировать изменения по бизнес-объектам. Файл выгрузки из БП в сторону ЗУП будет содержать только техническую информацию о номере принятого сообщения (квитанцию), что позволит ЗУП успешно очищать свои таблицы регистрации изменений и не накапливать «мусорные» транзакции.

---

Решение №3. Использование даты запрета загрузки данных

Довольно интересным и быстрым «обходным» решением является установка даты запрета загрузки данных на стороне ЗУП.

Рассмотрим, как это настроить:

  1. В базе ЗУП 3.1 перейдем в раздел Администрирование — Поддержка и обслуживание — Дата запрета изменения данных.
  2. Включим флаг «Даты запрета загрузки данных».
  3. Перейдем по ссылке настроек и установим для узла обмена (нашей базы БП) дату запрета загрузки далеко в будущем — например, 31.12.3999 года.

Анализ эффективности и ограничений метода:

Этот метод действительно эффективно защищает все документы. Любой документ, который попытается прийти из БП в ЗУП, будет автоматически заблокирован механизмом даты запрета изменений и не запишется в базу данных ЗУП.

Однако у этого способа есть критический минус: справочники не имеют реквизита даты. Такие объекты НСИ, как ФизическиеЛица, Сотрудники, Контрагенты или ПодразделенияОрганизаций, не попадают под действие механизма даты запрета загрузки. Они беспрепятственно запишутся из БП в ЗУП, что может привести к нежелательному затиранию кадровой информации, а также к появлению предупреждений в журнале регистрации обмена.

---

Проблема «раздувания» регистрации изменений в ЗУП при полном отключении обратного обмена

Если вы заблокируете обратную связь из БП любым жестким методом (например, полностью исключив загрузку XML-файлов из БП в ЗУП), вы столкнетесь с тем, что в ЗУП никогда не будут сбрасываться зарегистрированные к выгрузке объекты. База данных начнет стремительно увеличиваться в объеме, а файлы выгрузки будут содержать мегабайты избыточной информации, которая уже давно перенесена в БП.

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

Для этого можно создать внешнюю обработку или написать небольшое регламентное задание, выполняющее следующий код на встроенном языке 1С:


// Выбираем узел плана обмена с Бухгалтерией Предприятия
УзелБП = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("БП");

Если ЗначениеЗаполнено(УзелБП) Тогда
    // Удаляем регистрацию абсолютно всех изменений для данного узла
    ПланыОбмена.УдалитьРегистрациюИзменений(УзелБП);
    ЗаписьЖурналаРегистрации("СинхронизацияДанных", 
        УровеньЖурналаРегистрации.Информация, , , 
        "Регистрация изменений на узле БП успешно очищена в одностороннем порядке.");
КонецЕсли;

Использование этого скрипта в связке со сценарием отправки (Решение №1) обеспечит вам полностью контролируемый, чистый и действительно односторонний перенос данных из кадровой базы в бухгалтерию.

← На главную