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