Если Вы настраивали обмен данными в распределенной информационной базе конфигурации 1С:Зарплата и управление персоналом, ред. 3.1, то могли заметить, что с течением времени время обмена увеличивается, появляются аварийные завершения работы программы из-за нехватки оперативной памяти и пр.
Проблема заключается в том, что при выгрузке некоторых объектов (физических лиц и др.) регистрируются для обмена и их связанные данные, которые хранятся в регистрах сведений. Например, для справочника «Физические лица» это - ФИО физических лиц, воинский учет, гражданство, документы, профессии и т.д.
При выполнении обмена, к тому моменту, когда выполняется выгрузка физических лиц и отрабатывают правила регистрации, ранее зарегистрированная связанная информация уже выгружена, но регистрация выполняется повторно. В результате - хотя данные и выгружены, но регистрироваться они будут вновь и вновь.
Для обхода проблемы найдите процедуру ЗарегистрироватьСвязанныеРегистрыСведенийОбъекта() общего модуля ОбменДаннымиЗарплатаКадрыРасширенный и замените ее текст на следующий:
Если Выгрузка Или Получатели.Количество() = 0 Тогда Возврат; КонецЕсли; СвязанныеРегистрыСведенийОбъекта = ОбменДаннымиПовтИспЗарплатаКадрыРасширенный.СвязанныеРегистрыСведенийОбъекта(ИмяПланаОбмена, СсылкаНаОбъект); Для Каждого СвязанныеДанные Из СвязанныеРегистрыСведенийОбъекта Цикл МетаданныеРС = Метаданные.РегистрыСведений[СвязанныеДанные.Ключ]; ИзмеренияРС = МетаданныеРС.Измерения; НаборЗаписей = РегистрыСведений[СвязанныеДанные.Ключ].СоздатьНаборЗаписей(); Выборка = СвязанныеДанные.Значение.Выбрать(); Пока Выборка.Следующий() Цикл Для каждого ИзмерениеРС Из ИзмеренияРС Цикл Если ИзмерениеРС.ОсновнойОтбор Тогда НаборЗаписей.Отбор[ИзмерениеРС.Имя].Установить(Выборка[ИзмерениеРС.Имя]); КонецЕсли; КонецЦикла; Если МетаданныеРС.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда НаборЗаписей.Отбор.Период.Установить(Выборка.Период); КонецЕсли; НаборЗаписей.Прочитать(); ИзмененияНеЗарегистрированы = Ложь; Для каждого Получатель ИЗ Получатели Цикл Если НЕ ПланыОбмена.ИзменениеЗарегистрировано(Получатель, НаборЗаписей) Тогда ИзмененияНеЗарегистрированы = Истина; Прервать; КонецЕсли; КонецЦикла; Если ИзмененияНеЗарегистрированы Тогда ПланыОбмена.ЗарегистрироватьИзменения(Получатели, НаборЗаписей); КонецЕсли; КонецЦикла; КонецЦикла;
Второй вариант - воспользоваться расширением. В нем заимствована и отредактирована вышеописанная процедура. При подключении расширения необходимо снять флажок «Безопасный режим», т.к. выполняется программный код общего модуля. Главное - не забыть отключить это расширение, когда будет выпущен релиз ЗУП с исправлением этой странной ситуации.