Начальная штатная расстановка / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ДляВсехСтрок( ЗначениеРазрешено(ФизическиеЛица.ФизическоеЛицо, NULL КАК ИСТИНА)
	|	) И ЗначениеРазрешено(Организация)";
КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом

#КонецОбласти

#КонецОбласти


#Область СлужебныйПрограммныйИнтерфейс

// используется при загрузке данных
Процедура РассчитатьФОТПоДокументу(ДокументОбъект) Экспорт

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

// Возвращает описание состава документа
//
// Возвращаемое значение:
//  Структура - см. ЗарплатаКадрыСоставДокументов.НовоеОписаниеСоставаОбъекта.
Функция ОписаниеСоставаОбъекта() Экспорт
	
	МетаданныеДокумента = Метаданные.Документы.НачальнаяШтатнаяРасстановка;
	Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаПоМетаданнымФизическиеЛицаВТабличныхЧастях(МетаданныеДокумента);
	
КонецФункции

#Область ОбработчикиРегистрацииФизическихЛиц

Функция ПринадлежностиОбъекта() Экспорт
	Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация");
КонецФункции

#КонецОбласти

#Область ОбработчикиПравилРегистрации

// См. ЗарплатаКадрыРасширенныйСинхронизацияДанных.ШаблонОбработчика
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляРегистрацииДвижений(Настройки);
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляСовместноРегистрируемыхОбъектов(Настройки);
КонецПроцедуры

#КонецОбласти

#Область ОбменДанными

// Регистрирует изменение организации или структурного подразделения для сотрудников и физических лиц
//
// Параметры:
//		МассивДокументов - Массив - Массив объектов заполненный при загрузке сообщения обмена
//
Процедура ЗарегистрироватьЗависимыеОбъектыПослеЗагрузкиОбменаДанными(МассивДокументов) Экспорт
	
	// Зарегистрируем сотрудников по виду документа, изменяющего принадлежность к организации
	Для Каждого ДокументОбъект Из МассивДокументов Цикл
		Для Каждого СтрокаДокумента Из ДокументОбъект.Сотрудники Цикл
			Если ЗначениеЗаполнено(СтрокаДокумента.Сотрудник) И ОбщегоНазначения.СсылкаСуществует(СтрокаДокумента.Сотрудник) Тогда
				ПланыОбмена.ЗарегистрироватьИзменения(ДокументОбъект.ОбменДанными.Получатели, СтрокаДокумента.Сотрудник);
			КонецЕсли;
		КонецЦикла;
		
		СинхронизацияДанныхЗарплатаКадры.ПринадлежностьФизлицаОрганизацииПриЗаписи(ДокументОбъект);
		СинхронизацияДанныхЗарплатаКадры.ОрганизацииСотрудниковПриЗаписи(ДокументОбъект);
		
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти	


#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

КонецПроцедуры

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
КонецПроцедуры

#КонецОбласти

Функция ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок) Экспорт
	ДанныеДляРегистрации = Новый Соответствие;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	НачальнаяШтатнаяРасстановкаСотрудники.Сотрудник,
	|	НачальнаяШтатнаяРасстановкаСотрудники.Подразделение,
	|	НачальнаяШтатнаяРасстановкаСотрудники.Должность,
	|	НачальнаяШтатнаяРасстановкаСотрудники.ДолжностьПоШтатномуРасписанию,
	|	НачальнаяШтатнаяРасстановкаСотрудники.РабочееМесто,
	|	НачальнаяШтатнаяРасстановкаСотрудники.КоличествоСтавок,
	|	НачальнаяШтатнаяРасстановкаСотрудники.ГрафикРаботы,
	|	НачальнаяШтатнаяРасстановкаСотрудники.ВидЗанятости,
	|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.Месяц,
	|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка КАК Ссылка,
	|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.Организация КАК Организация
	|ИЗ
	|	Документ.НачальнаяШтатнаяРасстановка.Сотрудники КАК НачальнаяШтатнаяРасстановкаСотрудники
	|ГДЕ
	|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка В(&МассивСсылок)
	|	И НачальнаяШтатнаяРасстановкаСотрудники.Сотрудник = НачальнаяШтатнаяРасстановкаСотрудники.Сотрудник.ГоловнойСотрудник
	|	И НЕ НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.ВидДоговора В (ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровССотрудниками.ВоеннослужащийПоПризыву), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровССотрудниками.КонтрактВоеннослужащего))
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка";
	
	Выборка = Запрос.Выполнить().Выбрать(); 
	
	Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
		ДанныеДляРегистрацииПоДокументу = УчетСтажаПФР.ДанныеДляРегистрацииВУчетеСтажаПФР();
		ДанныеДляРегистрации.Вставить(Выборка.Ссылка, ДанныеДляРегистрацииПоДокументу);
		
		Пока Выборка.Следующий() Цикл
			ОписаниеПериода = УчетСтажаПФР.ОписаниеРегистрируемогоПериода();
			ОписаниеПериода.Сотрудник = Выборка.Сотрудник;	
			ОписаниеПериода.ДатаНачалаПериода = Выборка.Месяц;
			ОписаниеПериода.Состояние = Перечисления.СостоянияСотрудника.Работа;
			ОписаниеПериода.ВидЗанятости = Выборка.ВидЗанятости;

			РегистрируемыйПериод = УчетСтажаПФР.ДобавитьЗаписьВДанныеДляРегистрацииВУчета(ДанныеДляРегистрацииПоДокументу, ОписаниеПериода);
										
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "Организация", Выборка.Организация);
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "Подразделение", Выборка.Подразделение);
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ДолжностьПоШтатномуРасписанию", Выборка.ДолжностьПоШтатномуРасписанию);
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "Должность", Выборка.Должность);
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "КоличествоСтавок", Выборка.КоличествоСтавок);
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ГрафикРаботы", Выборка.ГрафикРаботы);
			УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ВидСтажаПФР", Перечисления.ВидыСтажаПФР2014.ВключаетсяВСтажДляДосрочногоНазначенияПенсии);

			Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.РабочиеМестаОхраныТруда") Тогда 
				МодульРабочиеМестаОхраныТруда = ОбщегоНазначения.ОбщийМодуль("РабочиеМестаОхраныТруда");
				МодульРабочиеМестаОхраныТруда.УстановитьЗначениеРегистрируемогоРабочегоМеста(РегистрируемыйПериод, Выборка);
			КонецЕсли;
		КонецЦикла;	
		
	КонецЦикла;	
	
	Возврат ДанныеДляРегистрации;
	
КонецФункции	

Процедура ЗаполнитьНеподтвержденныеДанные(ПараметрыОбновления) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	КадроваяИсторияСотрудников.Регистратор КАК Регистратор
		|ПОМЕСТИТЬ ВТРегистраторыНеподтвержденныхДанных
		|ИЗ
		|	РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
		|ГДЕ
		|	ТИПЗНАЧЕНИЯ(КадроваяИсторияСотрудников.Регистратор) = ТИП(Документ.НачальнаяШтатнаяРасстановка)
		|	И КадроваяИсторияСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.НеподтвержденныеДанные)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
		|	КадроваяИсторияСотрудников.Регистратор КАК Регистратор,
		|	ВЫРАЗИТЬ(КадроваяИсторияСотрудников.Регистратор КАК Документ.НачальнаяШтатнаяРасстановка).Месяц КАК Месяц
		|ПОМЕСТИТЬ ВТРегистраторыКадровойИстории
		|ИЗ
		|	РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТРегистраторыНеподтвержденныхДанных КАК РегистраторыНеподтвержденныхДанных
		|		ПО КадроваяИсторияСотрудников.Регистратор = РегистраторыНеподтвержденныхДанных.Регистратор
		|ГДЕ
		|	ТИПЗНАЧЕНИЯ(КадроваяИсторияСотрудников.Регистратор) = ТИП(Документ.НачальнаяШтатнаяРасстановка)
		|	И КадроваяИсторияСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.НачальныеДанные)
		|	И РегистраторыНеподтвержденныхДанных.Регистратор ЕСТЬ NULL
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	РегистраторыКадровойИстории.Регистратор КАК Регистратор,
		|	РегистраторыКадровойИстории.Месяц КАК Месяц
		|ИЗ
		|	ВТРегистраторыКадровойИстории КАК РегистраторыКадровойИстории";
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
	Иначе
		
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Ложь);
		
		ДатаОтсчетаПериодическихСведений = ЗарплатаКадрыКлиентСервер.ДатаОтсчетаПериодическихСведений();
		СписокОбновленныхРегистраторов = Новый Массив;
		
		Запрос.Текст =
			"ВЫБРАТЬ
			|	РегистраторыКадровойИстории.Месяц КАК Месяц,
			|	КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
			|ИЗ
			|	ВТРегистраторыКадровойИстории КАК РегистраторыКадровойИстории
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
			|		ПО (РегистраторыКадровойИстории.Месяц = НАЧАЛОПЕРИОДА(КадроваяИсторияСотрудников.Период, ДЕНЬ))
			|			И (КадроваяИсторияСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение))";
		
		ИсключаемыеСотрудникиПериоды = Запрос.Выполнить().Выгрузить();
		
		Выборка = РезультатЗапроса.Выбрать();
		Пока Выборка.Следующий() Цикл
			
			НачатьТранзакцию();
			Блокировка = Новый БлокировкаДанных;
			
			ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КадроваяИсторияСотрудников.НаборЗаписей");
			ЭлементБлокировки.УстановитьЗначение("Регистратор", Выборка.Регистратор);
			
			ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВидыЗанятостиСотрудников.НаборЗаписей");
			ЭлементБлокировки.УстановитьЗначение("Регистратор", Выборка.Регистратор);
			
			ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДанныеСостоянийСотрудников.НаборЗаписей");
			ЭлементБлокировки.УстановитьЗначение("Регистратор", Выборка.Регистратор);
			
			Попытка
				Блокировка.Заблокировать();
			Исключение
				
				ОтменитьТранзакцию();
				
				ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление информационной базы.Ошибка блокировки'", ОбщегоНазначения.КодОсновногоЯзыка()),
					УровеньЖурналаРегистрации.Предупреждение, , Выборка.Регистратор, "РегистрСведений.КадроваяИсторияСотрудников.НаборЗаписей");
				
				Продолжить;
				
			КонецПопытки;
			
			СписокОбновленныхРегистраторов.Добавить(Выборка.Регистратор);
			
			// КадроваяИсторияСотрудников
			НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
			НаборЗаписей.Прочитать();
			
			ТаблицаНабора = НаборЗаписей.Выгрузить();
			ТаблицаНабораНеподтвержденных = ТаблицаНабора.СкопироватьКолонки();
			
			ИсключаемыеЗаписи = Новый Массив;
			Для Каждого Запись Из ТаблицаНабора Цикл
				
				Если НачалоДня(Запись.Период) = ДатаОтсчетаПериодическихСведений Тогда
					
					Запись.ВидСобытия = Перечисления.ВидыКадровыхСобытий.НеподтвержденныеДанные;
					Продолжить;
					
				КонецЕсли;
				
				СтруктураПоиска = Новый Структура("Сотрудник,ГоловнаяОрганизация,ФизическоеЛицо");
				ЗаполнитьЗначенияСвойств(СтруктураПоиска, Запись);
				
				СтруктураПоиска.Вставить("Период", ДатаОтсчетаПериодическихСведений + (Запись.Период - НачалоДня(Запись.Период)));
				
				НайденныеСтроки = ТаблицаНабора.НайтиСтроки(СтруктураПоиска);
				Если НайденныеСтроки.Количество() > 0 Тогда
					Продолжить;
				КонецЕсли;
				
				Запись.Период = Выборка.Месяц;
				
				ЗаписьНеподтвержденных = ТаблицаНабораНеподтвержденных.Добавить();
				ЗаполнитьЗначенияСвойств(ЗаписьНеподтвержденных, Запись);
				
				ЗаписьНеподтвержденных.ВидСобытия = Перечисления.ВидыКадровыхСобытий.НеподтвержденныеДанные;
				ЗаписьНеподтвержденных.Период = ДатаОтсчетаПериодическихСведений;
				
				Если ИсключаемыеСотрудникиПериоды.НайтиСтроки(Новый Структура("Месяц,Сотрудник", Запись.Период, Запись.Сотрудник)).Количество() > 0 Тогда
					ИсключаемыеЗаписи.Добавить(Запись);
				КонецЕсли;
				
			КонецЦикла;
			
			Для Каждого ИсключаемаяЗапись Из ИсключаемыеЗаписи Цикл
				ТаблицаНабора.Удалить(ИсключаемаяЗапись);
			КонецЦикла;
			
			ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаНабораНеподтвержденных, ТаблицаНабора);
			НаборЗаписей.Загрузить(ТаблицаНабора);
			
			НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
			ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
			
			// ВидыЗанятостиСотрудников
			НаборЗаписей = РегистрыСведений.ВидыЗанятостиСотрудников.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
			НаборЗаписей.Прочитать();
			
			Для Каждого Запись Из НаборЗаписей Цикл
				Запись.Период = ДатаОтсчетаПериодическихСведений;
			КонецЦикла;
			
			НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
			ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
			
			// ДанныеСостоянийСотрудников
			НаборЗаписей = РегистрыСведений.ДанныеСостоянийСотрудников.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
			НаборЗаписей.Прочитать();
			
			Для Каждого Запись Из НаборЗаписей Цикл
				Запись.Начало = ДатаОтсчетаПериодическихСведений;
			КонецЦикла;
			
			НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
			ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
			
			ЗафиксироватьТранзакцию();
			
		КонецЦикла;
		
		Если СписокОбновленныхРегистраторов.Количество() > 0 Тогда
			
			Запрос.УстановитьПараметр("СписокОбновленныхРегистраторов", СписокОбновленныхРегистраторов);
			Запрос.Текст =
				"ВЫБРАТЬ РАЗЛИЧНЫЕ
				|	ВидыЗанятостиСотрудников.Сотрудник КАК Сотрудник
				|ПОМЕСТИТЬ ВТОтборДляПереформирования
				|ИЗ
				|	РегистрСведений.ВидыЗанятостиСотрудников КАК ВидыЗанятостиСотрудников
				|ГДЕ
				|	ВидыЗанятостиСотрудников.Регистратор В(&СписокОбновленныхРегистраторов)";
			
			Запрос.Выполнить();
			РегистрыСведений.ВидыЗанятостиСотрудников.ОбновитьДвиженияИнтервальногоРегистра(Запрос.МенеджерВременныхТаблиц);
			
			ЗарплатаКадры.УничтожитьВТ(Запрос.МенеджерВременныхТаблиц, "ВТОтборДляПереформирования", Истина);
			
			Запрос.Текст =
				"ВЫБРАТЬ РАЗЛИЧНЫЕ
				|	КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
				|ПОМЕСТИТЬ ВТОтборДляПереформирования
				|ИЗ
				|	РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
				|ГДЕ
				|	КадроваяИсторияСотрудников.Регистратор В(&СписокОбновленныхРегистраторов)";
			
			Запрос.Выполнить();
			РегистрыСведений.КадроваяИсторияСотрудников.ОбновитьДвиженияИнтервальногоРегистра(Запрос.МенеджерВременныхТаблиц);
			
			Запрос.Текст =
				"ВЫБРАТЬ РАЗЛИЧНЫЕ
				|	ДанныеСостоянийСотрудников.Сотрудник КАК Сотрудник,
				|	ДанныеСостоянийСотрудников.Начало КАК Начало,
				|	ДанныеСостоянийСотрудников.Окончание КАК Окончание
				|ПОМЕСТИТЬ ВТКлючиИзменившихсяДанных
				|ИЗ
				|	РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
				|ГДЕ
				|	ДанныеСостоянийСотрудников.Регистратор В(&СписокОбновленныхРегистраторов)";
			
			Запрос.Выполнить();
			СостоянияСотрудников.ОбновитьСостоянияСотрудников(Запрос.МенеджерВременныхТаблиц, , Истина);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьНеподтвержденныеДанныеСостоянийСотрудников(ПараметрыОбновления) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	ДатаОтсчетаПериодическихСведений = ЗарплатаКадрыКлиентСервер.ДатаОтсчетаПериодическихСведений();
	Запрос.УстановитьПараметр("ДатаОтсчетаПериодическихСведений", ДатаОтсчетаПериодическихСведений);
	
	Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ДанныеСостоянийСотрудников.Регистратор КАК Регистратор
		|ИЗ
		|	РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
		|ГДЕ
		|	ТИПЗНАЧЕНИЯ(ДанныеСостоянийСотрудников.Регистратор) = ТИП(Документ.НачальнаяШтатнаяРасстановка)
		|	И ДанныеСостоянийСотрудников.Начало <> &ДатаОтсчетаПериодическихСведений";
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
	Иначе
		
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Ложь);
		
		СписокОбновленныхРегистраторов = Новый Массив;
		
		Выборка = РезультатЗапроса.Выбрать();
		Пока Выборка.Следующий() Цикл
			
			Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
				ПараметрыОбновления, "РегистрСведений.ДанныеСостоянийСотрудников.НаборЗаписей", "Регистратор", Выборка.Регистратор) Тогда
				
				Продолжить;
				
			КонецЕсли;
			
			СписокОбновленныхРегистраторов.Добавить(Выборка.Регистратор);
			
			НаборЗаписей = РегистрыСведений.ДанныеСостоянийСотрудников.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
			НаборЗаписей.Прочитать();
			
			Для Каждого Запись Из НаборЗаписей Цикл
				Запись.Начало = ДатаОтсчетаПериодическихСведений;
			КонецЦикла;
			
			НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
			ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
			
			ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
			
		КонецЦикла;
		
		Если СписокОбновленныхРегистраторов.Количество() > 0 Тогда
			
			Запрос.УстановитьПараметр("СписокОбновленныхРегистраторов", СписокОбновленныхРегистраторов);
			
			Запрос.Текст =
				"ВЫБРАТЬ РАЗЛИЧНЫЕ
				|	ДанныеСостоянийСотрудников.Сотрудник КАК Сотрудник,
				|	ДанныеСостоянийСотрудников.Начало КАК Начало,
				|	ДанныеСостоянийСотрудников.Окончание КАК Окончание
				|ПОМЕСТИТЬ ВТКлючиИзменившихсяДанных
				|ИЗ
				|	РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
				|ГДЕ
				|	ДанныеСостоянийСотрудников.Регистратор В(&СписокОбновленныхРегистраторов)";
			
			Запрос.Выполнить();
			СостоянияСотрудников.ОбновитьСостоянияСотрудников(Запрос.МенеджерВременныхТаблиц, , Истина);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьНеподтвержденныеДанныеГрафиковРаботы(ПараметрыОбновления) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	ДатаОтсчетаПериодическихСведений = ЗарплатаКадрыКлиентСервер.ДатаОтсчетаПериодическихСведений();
	Запрос.УстановитьПараметр("ДатаОтсчетаПериодическихСведений", ДатаОтсчетаПериодическихСведений);
	
	Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ГрафикРаботыСотрудников.Регистратор КАК Регистратор
		|ИЗ
		|	РегистрСведений.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
		|ГДЕ
		|	ТИПЗНАЧЕНИЯ(ГрафикРаботыСотрудников.Регистратор) = ТИП(Документ.НачальнаяШтатнаяРасстановка)
		|	И НАЧАЛОПЕРИОДА(ГрафикРаботыСотрудников.Период, ДЕНЬ) <> &ДатаОтсчетаПериодическихСведений";
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
	Иначе
		
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Ложь);
		
		СписокОбновленныхРегистраторов = Новый Массив;
		
		Выборка = РезультатЗапроса.Выбрать();
		Пока Выборка.Следующий() Цикл
			
			Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
				ПараметрыОбновления, "РегистрСведений.ГрафикРаботыСотрудников.НаборЗаписей", "Регистратор", Выборка.Регистратор) Тогда
				
				Продолжить;
				
			КонецЕсли;
			
			СписокОбновленныхРегистраторов.Добавить(Выборка.Регистратор);
			
			НаборЗаписей = РегистрыСведений.ГрафикРаботыСотрудников.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
			НаборЗаписей.Прочитать();
			
			ТаблицаНабора = НаборЗаписей.Выгрузить();
			НоваяТаблицаНабора = ТаблицаНабора.СкопироватьКолонки();
			
			Для Каждого СтрокаТаблицаНабора Из ТаблицаНабора Цикл
				
				СтруктураПоиска = Новый Структура("Период,Сотрудник", ДатаОтсчетаПериодическихСведений, СтрокаТаблицаНабора.Сотрудник);
				Если НоваяТаблицаНабора.НайтиСтроки(СтруктураПоиска).Количество() = 0 Тогда
					
					СтрокаНоваяТаблицаНабора = НоваяТаблицаНабора.Добавить();
					ЗаполнитьЗначенияСвойств(СтрокаНоваяТаблицаНабора, СтрокаТаблицаНабора);
					СтрокаНоваяТаблицаНабора.Период = ДатаОтсчетаПериодическихСведений;
					
				КонецЕсли;
				
			КонецЦикла;
			
			НаборЗаписей.Загрузить(НоваяТаблицаНабора);
			НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
			ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
			
			ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
			
		КонецЦикла;
		
		Если СписокОбновленныхРегистраторов.Количество() > 0 Тогда
			
			Запрос.УстановитьПараметр("СписокОбновленныхРегистраторов", СписокОбновленныхРегистраторов);
			
			Запрос.Текст =
				"ВЫБРАТЬ РАЗЛИЧНЫЕ
				|	ГрафикРаботыСотрудников.Сотрудник КАК Сотрудник
				|ПОМЕСТИТЬ ВТОтборДляПереформирования
				|ИЗ
				|	РегистрСведений.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
				|ГДЕ
				|	ГрафикРаботыСотрудников.Регистратор В(&СписокОбновленныхРегистраторов)";
			
			Запрос.Выполнить();
			РегистрыСведений.ГрафикРаботыСотрудников.ОбновитьДвиженияИнтервальногоРегистра(Запрос.МенеджерВременныхТаблиц);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ПерезаполнитьДвиженияЗанятостьПозицийШтатногоРасписания(ПараметрыОбновления) Экспорт
	
	Если ПараметрыОбновления.Свойство("ОбработанныеРегистраторы") Тогда
		ОбработанныеРегистраторы = ПараметрыОбновления.ОбработанныеРегистраторы;
	Иначе
		ОбработанныеРегистраторы = Новый Массив;
		ПараметрыОбновления.Вставить("ОбработанныеРегистраторы", ОбработанныеРегистраторы);
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ОбработанныеРегистраторы", ОбработанныеРегистраторы);
	Запрос.УстановитьПараметр("НачалоПериода", ЗарплатаКадрыКлиентСервер.ДатаОтсчетаПериодическихСведений());
	
	Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
		|	ЗанятостьПозицийШтатногоРасписания.Регистратор КАК Регистратор
		|ИЗ
		|	РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК ЗанятостьПозицийШтатногоРасписания
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК ЗанятостьПозицийШтатногоРасписанияНаНачалоЭксплуатации
		|		ПО ЗанятостьПозицийШтатногоРасписания.Регистратор = ЗанятостьПозицийШтатногоРасписанияНаНачалоЭксплуатации.Регистратор
		|			И (ЗанятостьПозицийШтатногоРасписания.ДействуетДо = НАЧАЛОПЕРИОДА(ЗанятостьПозицийШтатногоРасписанияНаНачалоЭксплуатации.Период, ДЕНЬ))
		|ГДЕ
		|	НЕ ЗанятостьПозицийШтатногоРасписания.Регистратор В (&ОбработанныеРегистраторы)
		|	И НАЧАЛОПЕРИОДА(ЗанятостьПозицийШтатногоРасписания.Период, ДЕНЬ) = &НачалоПериода
		|	И ЗанятостьПозицийШтатногоРасписания.ДействуетДо > ДАТАВРЕМЯ(1, 1, 1)
		|	И ТИПЗНАЧЕНИЯ(ЗанятостьПозицийШтатногоРасписания.Регистратор) = ТИП(Документ.НачальнаяШтатнаяРасстановка)";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Количество() = 0 Тогда
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбработчик(ПараметрыОбновления);
		Возврат;
	КонецЕсли;
	
	МассивРегистраторов = Новый Массив;
	
	ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПродолжитьОбработчик(ПараметрыОбновления);
	Пока Выборка.Следующий() Цикл
		
		Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(ПараметрыОбновления, "РегистрСведений.ЗанятостьПозицийШтатногоРасписания.НаборЗаписей", "Регистратор", Выборка.Регистратор) Тогда
			Продолжить;
		КонецЕсли;
		
		МассивРегистраторов.Добавить(Выборка.Регистратор);
		
		НаборЗаписей = РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
		НаборЗаписей.Прочитать();
		
		ТаблицаНабора = НаборЗаписей.Выгрузить();
		ТаблицаДобавляемыхСтрок = ТаблицаНабора.СкопироватьКолонки();
		Для Каждого СтрокаТаблицыНабора Из ТаблицаНабора Цикл
			
			Если ЗначениеЗаполнено(СтрокаТаблицыНабора.ДействуетДо) Тогда
				
				ДобавляемаяСтрока = ТаблицаДобавляемыхСтрок.Добавить();
				
				ЗаполнитьЗначенияСвойств(ДобавляемаяСтрока, СтрокаТаблицыНабора, , "Период, ДействуетДо");
				ДобавляемаяСтрока.Период = СтрокаТаблицыНабора.ДействуетДо + (СтрокаТаблицыНабора.Период - НачалоДня(СтрокаТаблицыНабора.Период));
				
				СтрокаТаблицыНабора.ДействуетДо = '00010101';
				
			КонецЕсли;
			
		КонецЦикла;
		
		ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаДобавляемыхСтрок, ТаблицаНабора);
		НаборЗаписей.Загрузить(ТаблицаНабора);
		
		ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
		
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
		
	КонецЦикла;
	
	РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.СформироватьДвиженияИнтервальногоРегистраПоМассивуРегистраторов(
		МассивРегистраторов, ПараметрыОбновления);
	
	ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыОбновления.ОбработанныеРегистраторы, МассивРегистраторов);
	
КонецПроцедуры

Процедура ЗаполнитьВременныеОсвобожденияСтавок(ПараметрыОбновления) Экспорт
	
	Если ПараметрыОбновления.Свойство("ОбработанныеРегистраторы") Тогда
		ОбработанныеРегистраторы = ПараметрыОбновления.ОбработанныеРегистраторы;
	Иначе
		ОбработанныеРегистраторы = Новый Массив;
		ПараметрыОбновления.Вставить("ОбработанныеРегистраторы", ОбработанныеРегистраторы);
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ОбработанныеРегистраторы", ОбработанныеРегистраторы);
	
	Запрос.Текст =
		"ВЫБРАТЬ
		|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка КАК Ссылка,
		|	НачальнаяШтатнаяРасстановкаСотрудники.Сотрудник КАК Сотрудник,
		|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.Месяц КАК Месяц
		|ПОМЕСТИТЬ ВТСотрудники
		|ИЗ
		|	Документ.НачальнаяШтатнаяРасстановка.Сотрудники КАК НачальнаяШтатнаяРасстановкаСотрудники
		|ГДЕ
		|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.Проведен
		|	И НЕ НачальнаяШтатнаяРасстановкаСотрудники.ОсвобождатьСтавку
		|	И НЕ НачальнаяШтатнаяРасстановкаСотрудники.Ссылка В (&ОбработанныеРегистраторы)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	Сотрудники.Ссылка КАК Ссылка,
		|	Сотрудники.Сотрудник КАК Сотрудник,
		|	ОтпускПоУходуЗаРебенком.ДатаОкончания КАК ДатаОкончания
		|ПОМЕСТИТЬ ВТСотрудникиКОбновлению
		|ИЗ
		|	ВТСотрудники КАК Сотрудники
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтпускПоУходуЗаРебенком КАК ОтпускПоУходуЗаРебенком
		|		ПО Сотрудники.Сотрудник = ОтпускПоУходуЗаРебенком.ОсновнойСотрудник
		|			И (Сотрудники.Месяц МЕЖДУ ОтпускПоУходуЗаРебенком.ДатаНачала И ОтпускПоУходуЗаРебенком.ДатаОкончания)
		|			И (ОтпускПоУходуЗаРебенком.ОсвобождатьСтавку)
		|			И (ОтпускПоУходуЗаРебенком.Проведен)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
		|	СотрудникиКОбновлению.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ ВТРегистраторыКОбновлению
		|ИЗ
		|	ВТСотрудникиКОбновлению КАК СотрудникиКОбновлению
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	РегистраторыКОбновлению.Ссылка КАК Ссылка,
		|	СотрудникиКОбновлению.Сотрудник КАК Сотрудник,
		|	СотрудникиКОбновлению.ДатаОкончания КАК ПланируемаяДатаЗавершения
		|ИЗ
		|	ВТРегистраторыКОбновлению КАК РегистраторыКОбновлению
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудникиКОбновлению КАК СотрудникиКОбновлению
		|		ПО РегистраторыКОбновлению.Ссылка = СотрудникиКОбновлению.Ссылка
		|
		|УПОРЯДОЧИТЬ ПО
		|	Ссылка";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Количество() = 0 Тогда
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбработчик(ПараметрыОбновления);
		Возврат;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПродолжитьОбработчик(ПараметрыОбновления);
	
	МассивРегистраторов = Новый Массив;
	
	Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
		
		НачатьТранзакцию();
		Блокировка = Новый БлокировкаДанных;
		
		ЭлементБлокировки = Блокировка.Добавить("Документ.НачальнаяШтатнаяРасстановка");
		ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
		
		ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗанятостьПозицийШтатногоРасписания.НаборЗаписей");
		ЭлементБлокировки.УстановитьЗначение("Регистратор", Выборка.Ссылка);
		
		Попытка
			Блокировка.Заблокировать();
		Исключение
			ОтменитьТранзакцию();
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление информационной базы.Ошибка блокировки'", ОбщегоНазначения.КодОсновногоЯзыка()),
				УровеньЖурналаРегистрации.Предупреждение, , Выборка.Ссылка, НСтр("ru = 'Документ.НачальнаяШтатнаяРасстановка'"));
			Продолжить;
		КонецПопытки;
		
		МассивРегистраторов.Добавить(Выборка.Ссылка);
		
		ОбъектДокумента = Выборка.Ссылка.ПолучитьОбъект();
		
		НаборЗаписей = РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Ссылка);
		
		НаборЗаписей.Прочитать();
		ТаблицаНабора = НаборЗаписей.Выгрузить();
		
		Пока Выборка.Следующий() Цикл
			
			СтрокаДокумента = ОбъектДокумента.Сотрудники.Найти(Выборка.Сотрудник, "Сотрудник");
			Если СтрокаДокумента <> Неопределено Тогда
				СтрокаДокумента.ОсвобождатьСтавку = Истина;
				СтрокаДокумента.ПланируемаяДатаВозврата = Выборка.ПланируемаяДатаЗавершения;
			КонецЕсли;
			
			СтруктураПоиска = Новый Структура;
			СтруктураПоиска.Вставить("Сотрудник", Выборка.Сотрудник);
			СтруктураПоиска.Вставить("ВидЗанятостиПозиции", Перечисления.ВидыЗанятостиПозицийШтатногоРасписания.Занята);
			
			СтрокиСотрудника = ТаблицаНабора.НайтиСтроки(СтруктураПоиска);
			Для Каждого СтрокаНабора Из СтрокиСотрудника  Цикл
				Если СтрокаНабора.Период >= ОбъектДокумента.Месяц Тогда
					СтрокаНабора.ВидЗанятостиПозиции = Перечисления.ВидыЗанятостиПозицийШтатногоРасписания.Свободна;
					СтрокаНабора.ПланируемаяДатаЗавершения = Выборка.ПланируемаяДатаЗавершения;
				КонецЕсли;
			КонецЦикла;
			
		КонецЦикла;
		
		НаборЗаписей.Загрузить(ТаблицаНабора);
		
		ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектДокумента);
		ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
		
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
		
	КонецЦикла;
	
	РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.СформироватьДвиженияИнтервальногоРегистраПоМассивуРегистраторов(
		МассивРегистраторов, ПараметрыОбновления);
	
	ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыОбновления.ОбработанныеРегистраторы, МассивРегистраторов);
	
КонецПроцедуры

Процедура ПеренестиВременныеОсвобожденияСтавок(ПараметрыОбновления) Экспорт
	
	Если ПараметрыОбновления.Свойство("ОбработанныеРегистраторы") Тогда
		ОбработанныеРегистраторы = ПараметрыОбновления.ОбработанныеРегистраторы;
	Иначе
		ОбработанныеРегистраторы = Новый Массив;
		ПараметрыОбновления.Вставить("ОбработанныеРегистраторы", ОбработанныеРегистраторы);
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ОбработанныеРегистраторы", ОбработанныеРегистраторы);
	
	Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
		|	НачальнаяШтатнаяРасстановкаСотрудники.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.НачальнаяШтатнаяРасстановка.Сотрудники КАК НачальнаяШтатнаяРасстановкаСотрудники
		|ГДЕ
		|	НачальнаяШтатнаяРасстановкаСотрудники.УдалитьОсвобождатьСтавку <> НачальнаяШтатнаяРасстановкаСотрудники.ОсвобождатьСтавку
		|	И НЕ НачальнаяШтатнаяРасстановкаСотрудники.Ссылка В (&ОбработанныеРегистраторы)";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Количество() = 0 Тогда
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбработчик(ПараметрыОбновления);
		Возврат;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПродолжитьОбработчик(ПараметрыОбновления);
	
	МассивРегистраторов = Новый Массив;
	
	Пока Выборка.Следующий() Цикл
		
		Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
			ПараметрыОбновления, "Документ.НачальнаяШтатнаяРасстановка", "Ссылка", Выборка.Ссылка) Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		МассивРегистраторов.Добавить(Выборка.Ссылка);
		
		ОбъектДокумента = Выборка.Ссылка.ПолучитьОбъект();
		Для Каждого СтрокаДокумента Из ОбъектДокумента.Сотрудники Цикл
			СтрокаДокумента.ОсвобождатьСтавку = СтрокаДокумента.УдалитьОсвобождатьСтавку;
			СтрокаДокумента.ПланируемаяДатаВозврата = СтрокаДокумента.УдалитьПланируемаяДатаВозврата;
		КонецЦикла;
		
		ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектДокумента);
		ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
		
	КонецЦикла;
	
	ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыОбновления.ОбработанныеРегистраторы, МассивРегистраторов);
	
КонецПроцедуры

#КонецОбласти

#КонецЕсли

Связанные материалы