Удмуртская Республика, г. Ижевск
Поиск
Войти
Логин
Пароль
Заказать звонок
Логин
Пароль

ЗУП 3.1.7-3.1.8. Решаем проблему "неснимаемой" регистрации связанных регистров сведений

19 июл 2018
#Программирование
Частный случай решения проблемы обмена в распределенной базе ЗУП 3.1.7 - 3.1.8.

Если Вы настраивали обмен данными в распределенной информационной базе конфигурации 1С:Зарплата и управление персоналом, ред. 3.1, то могли заметить, что с течением времени время обмена увеличивается, появляются аварийные завершения работы программы из-за нехватки оперативной памяти и пр.

Проблема заключается в том, что при выгрузке некоторых объектов (физических лиц и др.) регистрируются для обмена и их связанные данные, которые хранятся в регистрах сведений. Например, для справочника «Физические лица» это - ФИО физических лиц, воинский учет, гражданство, документы, профессии и т.д.

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

Для обхода проблемы найдите процедуру ЗарегистрироватьСвязанныеРегистрыСведенийОбъекта() общего модуля ОбменДаннымиЗарплатаКадрыРасширенный и замените ее текст на следующий:

Если Выгрузка Или Получатели.Количество() = 0 Тогда
	Возврат;
КонецЕсли;

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

КонецЦикла;

Второй вариант - воспользоваться расширением. В нем заимствована и отредактирована вышеописанная процедура. При подключении расширения необходимо снять флажок «Безопасный режим», т.к. выполняется программный код общего модуля. Главное - не забыть отключить это расширение, когда будет выпущен релиз ЗУП с исправлением этой странной ситуации.