Как настроить строго односторонний обмен между ЗУП 3.1 и Бухгалтерией 3.0

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

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

Способ 1. Настройка сценариев синхронизации данных

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

Для настройки выполним следующие действия:

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

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

Способ 2. Установка даты запрета загрузки

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

Посмотрим, как это настроить правильно:

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

Важно: Проанализируем эффективность этого метода. Как показывает практика, дата запрета загрузки отлично блокирует изменения в документах и регистрах, однако изменения в справочниках (например, наименование подразделения или код сотрудника) все равно могут «пролетать». Это связано с тем, что справочники часто не имеют выраженной даты документа и могут игнорировать этот фильтр в зависимости от версии формата EnterpriseData.

Способ 3. Программная блокировка регистрации через расширение

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

Разберем реализацию по шагам:

  1. Создадим новое расширение в 1С:Бухгалтерия.
  2. Добавим в него общий модуль ОбменДаннымиСобытияБП.
  3. Используем аннотацию &Вместо для перехвата процедур перед записью объектов, участвующих в обмене.

Пример программного кода для реализации «отлупа» регистрации объектов:


&Вместо("СинхронизацияДанныхЧерезУниверсальныйФорматПередЗаписью")
Процедура сдСинхронизацияДанныхЧерезУниверсальныйФорматПередЗаписью(Источник, Отказ)
    Если сдПропуститьРегистрациюОбъекта(Источник) Тогда
        Возврат;
    КонецЕсли;
    ПродолжитьВызов(Источник, Отказ);
КонецПроцедуры

&Вместо("ОбменЗарплата3Бухгалтерия3ПередЗаписью")
Процедура сдОбменЗарплата3Бухгалтерия3ПередЗаписью(Источник, Отказ)
    Если сдПропуститьРегистрациюОбъекта(Источник) Тогда
        Возврат;
    КонецЕсли;
    ПродолжитьВызов(Источник, Отказ);
КонецПроцедуры

Функция сдПропуститьРегистрациюОбъекта(Источник)
    // Список объектов, которые мы ЗАПРЕЩАЕМ выгружать из БП в ЗУП
    сзОбъектыБлокировки = Новый СписокЗначений;
    сзОбъектыБлокировки.Добавить("ФизическиеЛица");
    сзОбъектыБлокировки.Добавить("ПодразделенияОрганизаций");
    сзОбъектыБлокировки.Добавить("Организации");
    
    Если сзОбъектыБлокировки.НайтиПоЗначению(Источник.Метаданные.Имя) <> Неопределено Тогда
        Возврат Истина; // Блокируем регистрацию
    КонецЕсли;
    
    Возврат Ложь;
КонецФункции

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

Способ 4. Настройка фильтрации в правилах отправки данных

В современных версиях программ 1С, использующих формат EnterpriseData, можно настроить фильтры прямо в интерфейсе Бухгалтерии. Посмотрим, как минимизировать отправку данных:

  1. В БП откроем Параметры синхронизации данных.
  2. На вкладке Правила отправки данных выберем вариант «Отправлять только выбранные».
  3. В фильтрах по организациям или подразделениям укажем заведомо невыполнимое условие (например, несуществующую организацию).

Таким образом, даже если документы будут создаваться, они не пройдут через фильтр правил отправки и не попадут в XML-пакет. В сторону ЗУП будут уходить только технические сообщения о подтверждении приема данных, что критически важно для корректной работы ПланыОбмена, чтобы файл выгрузки из ЗУП не разрастался до бесконечности.

Резюме и рекомендации

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

← На главную