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

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

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

Метод 1: Использование подписки на событие

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

  1. Создайте новую ПодпискуНаСобытие в конфигураторе для события ПриЗаписи регистра КадроваяИсторияСотрудников.
  2. В качестве источника укажите ваш регистр сведений.
  3. В обработчике события напишите код, который будет принудительно регистрировать связанного сотрудника в плане обмена.

Рассмотрим пример кода для обработчика:


Процедура ЗарегистрироватьСотрудникаПриИзмененииИстории(Источник, Отказ) Экспорт
    // Проверяем, изменился ли интересующий нас реквизит (ВидЗанятости)
    // Для этого можно сравнить данные Источника с текущими данными в базе
    Сотрудник = Источник.Сотрудник;
    МассивУзлов = ПланыОбмена.ВашПланОбмена.Выбрать();
    
    // Регистрируем объект в планах обмена
    ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, Сотрудник);
КонецПроцедуры

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

Метод 2: Настройка правил конвертации (ПКО)

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

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

  1. Создайте новое ПКО, где источником будет выступать запись регистра КадроваяИсторияСотрудников, а приемником — Справочник.Сотрудники.
  2. Настройте правила конвертации свойств так, чтобы данные из регистра корректно передавались в реквизиты справочника на стороне приемника.
  3. На вкладке свойств обязательно укажите поле поиска (например, Ссылка или УникальныйИдентификатор), чтобы система обновляла существующего сотрудника, а не создавала дубли.
  4. В обработчике ПриВыгрузке этого ПКО используйте метод ВыгрузитьПоПравилу.

Пример логики в обработчике ПриВыгрузке:


// В обработчике ПКО регистра
ВыгрузитьПоПравилу(Источник.Сотрудник, , , , "Сотрудники");

Обратите внимание: При использовании данного метода система будет инициировать процесс выгрузки сотрудника при каждом изменении записей в регистре. Чтобы не замедлять работу системы, рекомендуется проводить оптимизацию и выполнять проверку на изменение только нужных реквизитов перед вызовом метода ВыгрузитьПоПравилу.

Сравнительный анализ подходов

Выбор метода зависит от ваших задач и допустимого уровня вмешательства в конфигурацию:

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

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

← На главную