Синхронизация данных между программами 1С:Зарплата и управление персоналом 3.1 (ЗУП) и 1С:Бухгалтерия предприятия 3.0 (БП) изначально проектировалась разработчиками фирмы 1С как двусторонний процесс. Из ЗУП в БП передаются сведения о начислениях, выплатах, страховых взносах и кадровых изменениях. В обратную сторону — из БП в ЗУП — летят подтверждения (квитанции) о приеме пакетов данных, статусы проведения документов (например, отметка «Отражено в учете» в документе ОтражениеЗарплатыВБухучете), а также обновленные элементы нормативно-справочной информации (НСИ).
Однако в реальной практике автоматизации часто возникает потребность сделать этот обмен строго односторонним. Например, когда расчетчики и кадровики в ЗУП категорически не хотят, чтобы изменения реквизитов организаций, контрагентов или физлиц, сделанные бухгалтерами в БП, «прилетали» обратно и затирали исходные кадровые данные. Рассмотрим подробнее, почему стандартные механизмы дают сбой, и разберем по шагам рабочие технические решения этой задачи.
Выясним причину, почему даже при детальной настройке сценариев обмена (где на стороне БП указана только отправка, а на стороне ЗУП — только получение) при нажатии на стандартную кнопку «Синхронизировать» все равно происходит двусторонний цикл обмена.
Дело в том, что кнопка «Синхронизировать» в стандартном интерфейсе 1С жестко инициализирует полный цикл интеграции. Она игнорирует пользовательские интерактивные сценарии обмена и последовательно запускает:
Для того чтобы обойти это ограничение и заставить систему работать исключительно в одну сторону, нам потребуется применить один из альтернативных методов настройки.
---
Если мы хотим, чтобы обмен происходил строго в соответствии с нашими правилами (ЗУП только отправляет, а БП только принимает), нам необходимо отказаться от использования интерактивной кнопки «Синхронизировать» и перейти на выполнение обмена через Сценарии синхронизации данных.
Проанализируем процесс настройки этого метода по шагам:
Важное ограничение: Чтобы исключить человеческий фактор, рекомендуется с помощью механизма ИзменениеФормы или через роли прав доступа скрыть стандартную кнопку «Синхронизировать» с командной панели формы синхронизации.
---
Этот метод считается наиболее профессиональным и надежным с точки зрения системной архитектуры 1С. Мы физически запретим конфигурации «1С:Бухгалтерия предприятия» регистрировать какие-либо изменения для отправки в ЗУП. При этом механизм квитирования (подтверждения получения пакетов) продолжит работать, предотвращая бесконечное раздувание таблиц регистрации изменений в ЗУП.
Разберем алгоритм реализации этого метода:
ПередОбработкой или ПередВыгрузкой.
// Отключаем регистрацию изменений объекта для узла обмена с ЗУП
Отказ = Истина;
После этого БП 3.0 полностью перестанет регистрировать изменения по бизнес-объектам. Файл выгрузки из БП в сторону ЗУП будет содержать только техническую информацию о номере принятого сообщения (квитанцию), что позволит ЗУП успешно очищать свои таблицы регистрации изменений и не накапливать «мусорные» транзакции.
---
Довольно интересным и быстрым «обходным» решением является установка даты запрета загрузки данных на стороне ЗУП.
Рассмотрим, как это настроить:
Анализ эффективности и ограничений метода:
Этот метод действительно эффективно защищает все документы. Любой документ, который попытается прийти из БП в ЗУП, будет автоматически заблокирован механизмом даты запрета изменений и не запишется в базу данных ЗУП.
Однако у этого способа есть критический минус: справочники не имеют реквизита даты. Такие объекты НСИ, как ФизическиеЛица, Сотрудники, Контрагенты или ПодразделенияОрганизаций, не попадают под действие механизма даты запрета загрузки. Они беспрепятственно запишутся из БП в ЗУП, что может привести к нежелательному затиранию кадровой информации, а также к появлению предупреждений в журнале регистрации обмена.
---
Если вы заблокируете обратную связь из БП любым жестким методом (например, полностью исключив загрузку XML-файлов из БП в ЗУП), вы столкнетесь с тем, что в ЗУП никогда не будут сбрасываться зарегистрированные к выгрузке объекты. База данных начнет стремительно увеличиваться в объеме, а файлы выгрузки будут содержать мегабайты избыточной информации, которая уже давно перенесена в БП.
Чтобы решить эту проблему в условиях полностью одностороннего физического обмена, необходимо периодически программно очищать таблицы регистрации на узле обмена в ЗУП.
Для этого можно создать внешнюю обработку или написать небольшое регламентное задание, выполняющее следующий код на встроенном языке 1С:
// Выбираем узел плана обмена с Бухгалтерией Предприятия
УзелБП = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("БП");
Если ЗначениеЗаполнено(УзелБП) Тогда
// Удаляем регистрацию абсолютно всех изменений для данного узла
ПланыОбмена.УдалитьРегистрациюИзменений(УзелБП);
ЗаписьЖурналаРегистрации("СинхронизацияДанных",
УровеньЖурналаРегистрации.Информация, , ,
"Регистрация изменений на узле БП успешно очищена в одностороннем порядке.");
КонецЕсли;
Использование этого скрипта в связке со сценарием отправки (Решение №1) обеспечит вам полностью контролируемый, чистый и действительно односторонний перенос данных из кадровой базы в бухгалтерию.