Перемещение в другое подразделение / Модуль объекта

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

#Область ОбработчикиСобытий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		Если ДанныеЗаполнения.Свойство("Действие") И ДанныеЗаполнения.Действие = "Исправить" Тогда
			ИсправлениеДокументовЗарплатаКадры.СкопироватьДокумент(ЭтотОбъект, ДанныеЗаполнения.Ссылка);
			ИсправленныйДокумент = ДанныеЗаполнения.Ссылка;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

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

	ИсправлениеДокументовЗарплатаКадры.ПроверитьЗаполнение(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ, "ПериодическиеСведения", "ДатаПеремещения");
	
	Если ОтразитьВТрудовойКнижке И ДатаПеремещения >= '20210701' Тогда
		
		Для Каждого СтрокаТабличнойЧасти Из Сотрудники Цикл
			
			ПутьКПолю = "Сотрудники[" + Формат(СтрокаТабличнойЧасти.НомерСтроки - 1, "ЧРГ=; ЧН=") + "].";
			Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.ТрудоваяФункция) Тогда
				
				КодПоОКЗ = ЭлектронныеТрудовыеКнижкиПовтИсп.КодПоОКЗТрудовойФункции(
					СтрокаТабличнойЧасти.ТрудоваяФункция, ДатаПеремещения);
				Если Не ЗначениеЗаполнено(КодПоОКЗ) Тогда
				
					ТекстСообщения = СтрШаблон(
						НСтр("ru = 'В строке %1, у выбранной трудовой функции (%2) не заполнено, поле ""Код по ОКЗ""'"),
						СтрокаТабличнойЧасти.НомерСтроки,
						СтрокаТабличнойЧасти.ТрудоваяФункция);
					ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, ПутьКПолю + "ТрудоваяФункция", "Объект", Отказ);
					
				КонецЕсли;
				
			Иначе
				
				ТекстСообщения = СтрШаблон(
					НСтр("ru = 'В строке %1, поле ""Трудовая функция"" не заполнено'"),
					СтрокаТабличнойЧасти.НомерСтроки);
				ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, ПутьКПолю + "ТрудоваяФункция", "Объект", Отказ);
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
		
	ПроведениеСервер.ПодготовитьНаборыЗаписейКУдалениюПроведения(ЭтотОбъект, ЗначениеЗаполнено(ИсправленныйДокумент));
		
КонецПроцедуры

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

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

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

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

Функция СовместноРегистрируемыеОбъекты() Экспорт
	Возврат Сотрудники.ВыгрузитьКолонку("Сотрудник");
КонецФункции

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

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

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

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

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

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

Функция ДанныеДляРегистрацииВУчетаСтажаПФР()
	МассивСсылок = Новый Массив;
	МассивСсылок.Добавить(Ссылка);
	
	ДанныеДляРегистрацииВУчете = Документы.ПеремещениеВДругоеПодразделение.ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок);
	
	Возврат ДанныеДляРегистрацииВУчете[Ссылка];
														
КонецФункции	

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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