Увольнение / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область УчетПособий

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

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

// Описывает реквизит документы, в котором хранится ссылка на кадровое решение. 
Функция ОписаниеРеквизитаКадровогоРешения() Экспорт
	Возврат Метаданные.Документы.Увольнение.Реквизиты.Решение;
КонецФункции

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

Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
	
	Возврат ИсправлениеДокументовЗарплатаКадры.ПараметрыИсправляемогоДокумента(ДокументСсылка,
		СвойстваИсправляемогоДокумента(ДокументСсылка));
	
КонецФункции

Функция ОбъектЗаблокирован(СсылкаНаОбъект) Экспорт
	
	Возврат Ложь;
	
КонецФункции

// СтандартныеПодсистемы.ПодключаемыеКоманды

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

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

Процедура ДобавитьКомандыПечатиПакетаДокументов(КомандыПечати, ИдентификаторыПФ) Экспорт
	
	ИдентификаторыПФОсновногоМестаРаботы = Новый Массив;
	ИдентификаторыПФОсновногоМестаРаботыЕФС = Новый Массив;
	
	// Исходящая справка о заработке для расчета пособий
	Если ПравоДоступа("Просмотр", Метаданные.Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ИмяМакетаПечатнойФормыСправки();
		КомандаПечати.Представление = НСтр("ru = 'Справка о заработке для расчета пособий'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.Порядок = 110;
		КомандаПечати.Картинка = БиблиотекаКартинок.СторонняяПечатнаяФорма;
		КомандаПечати.ДополнительныеПараметры.Вставить("СторонняяПечатнаяФорма", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
	КонецЕсли;
	
	// Справка о доходах (2-НДФЛ)
	Если ПравоДоступа("Просмотр", Метаданные.Документы.СправкаНДФЛ) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = "Форма2НДФЛ";
		КомандаПечати.Представление = НСтр("ru = 'Справка о доходах (2-НДФЛ)'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.Картинка = БиблиотекаКартинок.СторонняяПечатнаяФорма;
		КомандаПечати.ДополнительныеПараметры.Вставить("СторонняяПечатнаяФорма", Истина);
		КомандаПечати.Порядок = 120;
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
	КонецЕсли;
	
	// СЗВ-М
	Если ПравоДоступа("Просмотр", Метаданные.Документы.СведенияОЗастрахованныхЛицахСЗВ_М) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = ПерсонифицированныйУчет.ИдентификаторПечатнойФормыФормаСЗВМ();
		КомандаПечати.Представление = НСтр("ru = 'СЗВ-М'");
		КомандаПечати.Порядок = 130;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "Сотрудник");
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Дата",
			ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ДатаНачалаПриемаЕФС1"), ВидСравненияКомпоновкиДанных.Меньше);
		
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		
	КонецЕсли;
	
	// СЗВ-СТАЖ
	Если ПравоДоступа("Просмотр", Метаданные.Документы.СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = ПерсонифицированныйУчет.ИдентификаторПечатнойФормыФормаСЗВСТАЖ();
		КомандаПечати.Представление = НСтр("ru = 'СЗВ-СТАЖ'");
		КомандаПечати.Порядок = 140;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "Сотрудник");
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Дата",
			ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ДатаНачалаПриемаЕФС1"), ВидСравненияКомпоновкиДанных.Меньше);
		
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		
		// Подраздел 1.2 формы ЕФС-1
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = ПерсонифицированныйУчет.ИдентификаторПечатнойФормыПодраздела_1_2_ФормыЕФС_1();
		КомандаПечати.Представление = НСтр("ru = 'Подраздел 1.2 формы ЕФС-1'");
		КомандаПечати.Порядок = 140;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "Сотрудник");
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Дата",
			ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ДатаНачалаПриемаЕФС1"), ВидСравненияКомпоновкиДанных.БольшеИлиРавно);
		
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
		// Подразделы 1.2 и 3 формы ЕФС-1
		Если ПравоДоступа("Просмотр", Метаданные.Документы.СправкаНДФЛ) Тогда
			КомандаПечати = КомандыПечати.Добавить();
			КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
			КомандаПечати.МенеджерПечати = "Документ.Увольнение";
			КомандаПечати.Идентификатор = ПерсонифицированныйУчет.ИдентификаторПечатнойФормы_ФормаЕФС_1();
			КомандаПечати.Представление = НСтр("ru = 'Подразделы 1.2 и 3 формы ЕФС-1'");
			КомандаПечати.Порядок = 145;
			КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
			КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "Сотрудник");
			ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
			ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Дата",
				ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ДатаНачалаПриемаЕФС1"), ВидСравненияКомпоновкиДанных.БольшеИлиРавно);
			
			ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		КонецЕсли;
		
	КонецЕсли;
	
	// Сведения о трудовой деятельности, СТД-Р
	Если ПравоДоступа("Просмотр", Метаданные.Документы.СведенияОТрудовойДеятельностиРаботникаСТД_Р) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = "ПФ_MXL_СТД_Р";
		КомандаПечати.Представление = НСтр("ru = 'Сведения о трудовой деятельности, СТД-Р'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.Порядок = 150;
		КомандаПечати.Картинка = БиблиотекаКартинок.СторонняяПечатнаяФорма;
		КомандаПечати.ДополнительныеПараметры.Вставить("СторонняяПечатнаяФорма", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ПредоставлятьМероприятияТДВЭлектроннойФорме", Истина);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
	КонецЕсли;
	
	// Отчет о погашении займа
	Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ЗаймыСотрудникам) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = "ОтчетОПогашенииЗайма";
		КомандаПечати.Представление = НСтр("ru = 'Отчет о погашении займа'");
		КомандаПечати.Порядок = 160;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.Картинка = БиблиотекаКартинок.СторонняяПечатнаяФорма;
		КомандаПечати.ДополнительныеПараметры.Вставить("СторонняяПечатнаяФорма", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
	КонецЕсли;
	
	Если ПравоДоступа("Просмотр", Метаданные.Документы.СправкаНДФЛ) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = ИдентификаторПечатнойФормыРаздел3РСВ();
		КомандаПечати.Представление = НСтр("ru = 'Раздел 3 РСВ'");
		КомандаПечати.Порядок = 180;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "ФизическоеЛицо");
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
	КонецЕсли;
	
	// Форма СЗВ-ДСО
	Если ПравоДоступа("Просмотр", Метаданные.Документы.СправкаНДФЛ) Тогда
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.МенеджерПечати = "Документ.Увольнение";
		КомандаПечати.Идентификатор = Документы.СведенияДляИсчисленияДоплатыКПенсииСЗВ_ДСО.ИдентификаторКомандыПечати_ФормаСЗВ_ДСО();
		КомандаПечати.Представление = НСтр("ru = 'СЗВ-ДСО'");
		КомандаПечати.Порядок = 190;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ФункциональныеОпции = "ИспользуетсяТрудЧленовЛетныхЭкипажей,ИспользуетсяТрудШахтеров";
		КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "Сотрудник");
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботы, КомандаПечати);
		ЗарплатаКадры.ДобавитьИдентификаторКомандыДляПечатиВПакетномРежиме(ИдентификаторыПФОсновногоМестаРаботыЕФС, КомандаПечати);
		
	КонецЕсли;
	
	Если ИдентификаторыПФ.Количество() > 1 Тогда
		
		// Совместители
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.Идентификатор = СтрСоединить(ИдентификаторыПФ, ",");
		КомандаПечати.Порядок = 997;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Истина;
		КомандаПечати.Представление = НСтр("ru = 'Комплект документов при увольнении'");
		КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
		КомандаПечати.Картинка = БиблиотекаКартинок.ПечатьПакетаДокументов;
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Ложь);
		
		// До начала приема ЕФС-1
		КопияИдентификаторыПФ = ОбщегоНазначения.СкопироватьРекурсивно(ИдентификаторыПФ);
		ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КопияИдентификаторыПФ, ИдентификаторыПФОсновногоМестаРаботы);
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.Идентификатор = СтрСоединить(КопияИдентификаторыПФ, ",");
		КомандаПечати.Порядок = 998;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Истина;
		КомандаПечати.Представление = НСтр("ru = 'Комплект документов при увольнении'");
		КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
		КомандаПечати.Картинка = БиблиотекаКартинок.ПечатьПакетаДокументов;
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Дата",
			ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ДатаНачалаПриемаЕФС1"), ВидСравненияКомпоновкиДанных.Меньше);
		
		// С начала приема ЕФС-1
		КопияИдентификаторыПФ = ОбщегоНазначения.СкопироватьРекурсивно(ИдентификаторыПФ);
		ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КопияИдентификаторыПФ, ИдентификаторыПФОсновногоМестаРаботыЕФС);
		
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
		КомандаПечати.Идентификатор = СтрСоединить(КопияИдентификаторыПФ, ",");
		КомандаПечати.Порядок = 999;
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Истина;
		КомандаПечати.Представление = НСтр("ru = 'Комплект документов при увольнении'");
		КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
		КомандаПечати.Картинка = БиблиотекаКартинок.ПечатьПакетаДокументов;
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "УвольнениеСОсновногоМестаРаботы", Истина);
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "Дата",
			ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ДатаНачалаПриемаЕФС1"), ВидСравненияКомпоновкиДанных.БольшеИлиРавно);
		
	КонецЕсли;
	
КонецПроцедуры

Функция ДобавитьКомандыСозданияДокументов(КомандыСозданияДокументов, ДополнительныеПараметры) Экспорт
	
	Если КадровыйУчетРасширенный.ПравоИнтерактивногоСозданияКадровыхПриказовСотрудника() Тогда
		
		ЗарплатаКадрыРасширенный.ДобавитьВКоллекциюКомандуСозданияДокументаПоМетаданнымДокумента(
			КомандыСозданияДокументов, Метаданные.Документы.Увольнение);
		
	КонецЕсли; 
	
КонецФункции

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

Процедура ПечатьПакетаДокументовПриУвольнении(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
	
	Отчеты.ПечатнаяФормаСправкаОСреднемЗаработке.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ИмяМакетаПечатнойФормыСправки())
		Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Форма2НДФЛ")
		Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОтчетОПогашенииЗайма")
		Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_СТД_Р") Тогда
		
		Запрос = Новый Запрос;
		Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
		
		СоздатьВТСотрудникиДокументов(Запрос.МенеджерВременныхТаблиц, МассивОбъектов);
		
		Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ИмяМакетаПечатнойФормыСправки())
			Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Форма2НДФЛ")
			Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_СТД_Р") Тогда
			
			ТаблицаСправок = СправкиСотрудников(Запрос.МенеджерВременныхТаблиц);
			Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ИмяМакетаПечатнойФормыСправки()) Тогда
				
				МассивСправок = Новый Массив;
				Для Каждого СтрокаСправки Из ТаблицаСправок Цикл
					
					Если ЗначениеЗаполнено(СтрокаСправки.ИсходящаяСправкаОЗаработкеДляРасчетаПособий) Тогда
						МассивСправок.Добавить(СтрокаСправки.ИсходящаяСправкаОЗаработкеДляРасчетаПособий);
					Иначе
						
						ОбщегоНазначения.СообщитьПользователю(
							СтрШаблон(НСтр("ru='По сотрудники %1 не найдена исходящая справка для расчета пособий'"), СтрокаСправки.Сотрудник),
							СтрокаСправки.СсылкаНаУвольнение);
						
					КонецЕсли;
					
				КонецЦикла;
				
				Если МассивСправок.Количество() > 0 Тогда
					
					ЭДОБЗК.ПечатьСтороннейПечатнойФормы(
						Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий,
						МассивСправок, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
					
				Иначе
					
					УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
						КоллекцияПечатныхФорм,
						Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ИмяМакетаПечатнойФормыСправки(),
						НСтр("ru = 'Справка о заработке для расчета пособий'"),
						Новый ТабличныйДокумент);
					
				КонецЕсли;
				
			КонецЕсли;
		
			Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Форма2НДФЛ") Тогда
				
				МассивСправок = Новый Массив;
				Для Каждого СтрокаСправки Из ТаблицаСправок Цикл
					
					Если ЗначениеЗаполнено(СтрокаСправки.СправкаНДФЛ) Тогда
						МассивСправок.Добавить(СтрокаСправки.СправкаНДФЛ);
					Иначе
						
						ОбщегоНазначения.СообщитьПользователю(
							СтрШаблон(НСтр("ru='По сотрудники %1 не найдена справка 2-НДФЛ'"), СтрокаСправки.Сотрудник),
							СтрокаСправки.СсылкаНаУвольнение);
						
					КонецЕсли;
					
				КонецЦикла;
				
				Если МассивСправок.Количество() > 0 Тогда
					
					ЭДОБЗК.ПечатьСтороннейПечатнойФормы(
						Документы.СправкаНДФЛ,
						МассивСправок, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
					
				Иначе
					
					УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
						КоллекцияПечатныхФорм,
						"Форма2НДФЛ",
						НСтр("ru = 'Справка о доходах (2-НДФЛ)'"),
						Новый ТабличныйДокумент);
					
				КонецЕсли;
				
			КонецЕсли;
			
			Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_СТД_Р") Тогда
				
				МассивСправок = Новый Массив;
				Для Каждого СтрокаСправки Из ТаблицаСправок Цикл
					
					Если СтрокаСправки.ПредоставлятьМероприятияТДВЭлектроннойФорме Тогда
						
						Если ЗначениеЗаполнено(СтрокаСправки.СведенияОТрудовойДеятельностиРаботникаСТД_Р) Тогда
							МассивСправок.Добавить(СтрокаСправки.СведенияОТрудовойДеятельностиРаботникаСТД_Р);
						Иначе
							
							ОбщегоНазначения.СообщитьПользователю(
								СтрШаблон(НСтр("ru='По сотрудники %1 не найдены сведения о трудовой деятельности, СТД-Р'"), СтрокаСправки.Сотрудник),
								СтрокаСправки.СсылкаНаУвольнение);
							
						КонецЕсли;
						
					КонецЕсли;
					
				КонецЦикла;
				
				Если МассивСправок.Количество() > 0 Тогда
					
					ЭДОБЗК.ПечатьСтороннейПечатнойФормы(
						Документы.СведенияОТрудовойДеятельностиРаботникаСТД_Р,
						МассивСправок, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
					
				Иначе
					
					УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
						КоллекцияПечатныхФорм,
						"ПФ_MXL_СТД_Р",
						НСтр("ru = 'Сведения о трудовой деятельности, СТД-Р'"),
						Новый ТабличныйДокумент);
					
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЕсли;
		
		Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОтчетОПогашенииЗайма") Тогда
			
			МассивСправок = ДоговорыЗаймаФизическихЛиц(Запрос.МенеджерВременныхТаблиц);
			Если МассивСправок.Количество() > 0 Тогда
				
				ЭДОБЗК.ПечатьСтороннейПечатнойФормы(
					Документы.ДоговорЗаймаСотруднику,
					МассивСправок, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
				
			Иначе
				
				ОбщегоНазначения.СообщитьПользователю(
					НСтр("ru='Не найдено не погашенных договоров займа'"));
				
				УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
					КоллекцияПечатныхФорм,
					"ОтчетОПогашенииЗайма",
					НСтр("ru = 'Отчет о погашении займа'"),
					Новый ТабличныйДокумент);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
	ПечатьСЗВМ(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
	ПечатьСЗВСТАЖ(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
	ПечатьРаздел3РСВ(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
	ПечатьПодраздела_1_2_ФормыЕФС_1(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
	ПечатьФормаСЗВ_ДСО(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
		МодульГосударственнаяСлужба = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
		МодульГосударственнаяСлужба.ПечатьСохраняемогоДенежногоСодержания(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

Функция ИдентификаторыСтороннихПечатныхФорм()
	
	Идентификаторы = Новый Массив;
	Идентификаторы.Добавить("Форма2НДФЛ");
	Идентификаторы.Добавить(Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ИмяМакетаПечатнойФормыСправки());
	Идентификаторы.Добавить("ПФ_MXL_СТД_Р");
	Идентификаторы.Добавить("ОтчетОПогашенииЗайма");
	
	Возврат Идентификаторы
	
КонецФункции

#Область ПечатьСЗВМ

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

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

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

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

#Область ПечатьСЗВСТАЖ

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

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

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

Процедура ПечатьПодраздела_1_2_ФормыЕФС_1(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ПерсонифицированныйУчет.ИдентификаторПечатнойФормы_ФормаЕФС_1())
		Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ПерсонифицированныйУчет.ИдентификаторПечатнойФормыПодраздела_1_2_ФормыЕФС_1()) Тогда
		
		ПечатныеФормы = Новый ТабличныйДокумент;
		
		ОбъектыПоТипам = ОбщегоНазначенияБЗК.ОбъектыПоТипам(МассивОбъектов);
		Для Каждого ОбъектыТипа Из ОбъектыПоТипам Цикл
			
			МассивОбъектовТипа = ОбъектыТипа.Значение;
			Если ЗначениеЗаполнено(МассивОбъектовТипа) Тогда
				ИмяДокумента = МассивОбъектовТипа[0].Метаданные().Имя;
			Иначе
				ИмяДокумента = "СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ";
			КонецЕсли;
			
			ВыборкаПоШапкеДокумента = ПерсонифицированныйУчет.ЗапросПоШапкеДляПечатиОДВ_1(МассивОбъектовТипа, ИмяДокумента).Выбрать();
			
			Запрос = Новый Запрос;
			Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
			Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектовТипа);
			
			Запрос.Текст =
				"ВЫБРАТЬ
				|	Увольнение.Ссылка КАК Ссылка,
				|	1 КАК НомерСтроки,
				|	Увольнение.ДатаУвольнения КАК Период,
				|	Увольнение.ФизическоеЛицо КАК Сотрудник,
				|	Увольнение.Сотрудник КАК СсылкаНаСотрудника,
				|	ЗНАЧЕНИЕ(Перечисление.ТипыСведенийСЗВ_СТАЖ.Исходная) КАК ТипСведений,
				|	Увольнение.ПериодРегистрации КАК ПериодРегистрации,
				|	ГОД(Увольнение.ПериодРегистрации) КАК Год,
				|	Увольнение.Организация КАК Организация
				|ПОМЕСТИТЬ ВТСотрудникиПериоды
				|ИЗ
				|	Документ.Увольнение КАК Увольнение
				|ГДЕ
				|	Увольнение.Ссылка В(&МассивОбъектов)
				|
				|ОБЪЕДИНИТЬ ВСЕ
				|
				|ВЫБРАТЬ
				|	УвольнениеСпискомСотрудники.Ссылка,
				|	УвольнениеСпискомСотрудники.НомерСтроки,
				|	УвольнениеСпискомСотрудники.ДатаУвольнения,
				|	УвольнениеСпискомСотрудники.ФизическоеЛицо,
				|	УвольнениеСпискомСотрудники.Сотрудник,
				|	ЗНАЧЕНИЕ(Перечисление.ТипыСведенийСЗВ_СТАЖ.Исходная),
				|	УвольнениеСпискомСотрудники.Ссылка.ПериодРегистрации,
				|	ГОД(УвольнениеСпискомСотрудники.Ссылка.ПериодРегистрации),
				|	УвольнениеСпискомСотрудники.Ссылка.Организация
				|ИЗ
				|	Документ.УвольнениеСписком.Сотрудники КАК УвольнениеСпискомСотрудники
				|ГДЕ
				|	УвольнениеСпискомСотрудники.Ссылка В(&МассивОбъектов)";
			
			Запрос.Выполнить();
			
			ОписательВТ = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеФизическихЛиц(
				Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды", "Сотрудник,Период");
			ОписательВТ.ИмяВТКадровыеДанныеФизическихЛиц = "ВТКадровыеДанныеУвольненийДляЕФС1";
			
			КадровыеДанные = "Фамилия,Имя,Отчество,СтраховойНомерПФР,ДатаРождения,ИНН,Страна,ВидЗастрахованногоЛица";
			КадровыйУчет.СоздатьВТКадровыеДанныеФизическихЛиц(ОписательВТ, Истина, КадровыеДанные);
			
			КодПЖИГ = ПерсонифицированныйУчет.ВидыЗастрахованныхЛицПЖИГ();
			КодВЖИГ = ПерсонифицированныйУчет.ВидыЗастрахованныхЛицВЖИГ();
			КодВПИГ = ПерсонифицированныйУчет.ВидыЗастрахованныхЛицВПИГ();
			КодВКС = ПерсонифицированныйУчет.ВидыЗастрахованныхЛицВКС();
			
			Запрос.УстановитьПараметр("КодПЖИГ", КодПЖИГ);
			Запрос.УстановитьПараметр("КодВЖИГ", КодВЖИГ);
			Запрос.УстановитьПараметр("КодВПИГ", КодВПИГ);
			Запрос.УстановитьПараметр("КодВКС", КодВКС);
			
			Запрос.Текст =
				"ВЫБРАТЬ
				|	СотрудникиПериоды.Ссылка КАК Ссылка,
				|	СотрудникиПериоды.НомерСтроки КАК НомерСтроки,
				|	СотрудникиПериоды.Сотрудник КАК Сотрудник,
				|	СотрудникиПериоды.ТипСведений КАК ТипСведений,
				|	СотрудникиПериоды.Год КАК Год,
				|	КадровыеДанные.СтраховойНомерПФР КАК СтраховойНомерПФР,
				|	КадровыеДанные.Фамилия КАК Фамилия,
				|	КадровыеДанные.Имя КАК Имя,
				|	КадровыеДанные.Отчество КАК Отчество,
				|	КадровыеДанные.ДатаРождения КАК ДатаРождения,
				|	КадровыеДанные.ИНН КАК ИНН,
				|	ВЫБОР
				|		КОГДА КадровыеДанные.ВидЗастрахованногоЛица В (&КодПЖИГ)
				|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КодКатегорииЗарегистрированногоЛицаЕФС1.ПЖИГ)
				|		КОГДА КадровыеДанные.ВидЗастрахованногоЛица В (&КодВЖИГ)
				|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КодКатегорииЗарегистрированногоЛицаЕФС1.ВЖИГ)
				|		КОГДА КадровыеДанные.ВидЗастрахованногоЛица В (&КодВПИГ)
				|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КодКатегорииЗарегистрированногоЛицаЕФС1.ВПИГ)
				|		КОГДА КадровыеДанные.ВидЗастрахованногоЛица В (&КодВКС)
				|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КодКатегорииЗарегистрированногоЛицаЕФС1.ВКС)
				|		ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.КодКатегорииЗарегистрированногоЛицаЕФС1.ГРФ)
				|	КОНЕЦ КАК КодКатегории,
				|	ВЫБОР
				|		КОГДА КадровыеДанные.Страна = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)
				|			ТОГДА ""000""
				|		ИНАЧЕ КадровыеДанные.Страна.Код
				|	КОНЕЦ КАК Гражданство,
				|	""Х"" КАК СотрудникУволен
				|ПОМЕСТИТЬ ВТСотрудникиДокумента
				|ИЗ
				|	ВТСотрудникиПериоды КАК СотрудникиПериоды
				|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеУвольненийДляЕФС1 КАК КадровыеДанные
				|		ПО СотрудникиПериоды.Период = КадровыеДанные.Период
				|			И СотрудникиПериоды.Сотрудник = КадровыеДанные.ФизическоеЛицо";
			
			Запрос.Выполнить();
			
			СоздатьВТЗаписиОСтаже(Запрос.МенеджерВременныхТаблиц);
			
			ВыборкаСТАЖ = Документы.СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ.ЗапросПоСотрудникамДляПечати(
				МассивОбъектовТипа, , Запрос.МенеджерВременныхТаблиц).Выбрать();
			
			// ДСВ
			Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ПерсонифицированныйУчет.ИдентификаторПечатнойФормы_ФормаЕФС_1()) Тогда
				
				Запрос.Текст =
					"ВЫБРАТЬ
					|	Удержания.Ссылка КАК Ссылка
					|ИЗ
					|	ПланВидовРасчета.Удержания КАК Удержания
					|ГДЕ
					|	Удержания.КатегорияУдержания = ЗНАЧЕНИЕ(Перечисление.КатегорииУдержаний.ДСВ)";
				
				НачисленияУдержанияДСВ = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
				НачисленияУдержанияДСВ.Добавить(Перечисления.ВидыОсобыхНачисленийИУдержаний.ДСВРаботодателя);
				
				Запрос.УстановитьПараметр("НачисленияУдержанияДСВ", НачисленияУдержанияДСВ);
				Запрос.Текст =
					"ВЫБРАТЬ
					|	СотрудникиПериоды.Ссылка КАК Ссылка,
					|	СотрудникиПериоды.Организация КАК Организация,
					|	СотрудникиПериоды.НомерСтроки КАК НомерСтроки,
					|	СотрудникиПериоды.Сотрудник КАК Сотрудник,
					|	СотрудникиПериоды.СсылкаНаСотрудника КАК СсылкаНаСотрудника,
					|	МАКСИМУМ(ВЫБОР
					|			КОГДА НачисленияУдержанияПоСотрудникам.НачислениеУдержание = ЗНАЧЕНИЕ(Перечисление.ВидыОсобыхНачисленийИУдержаний.ДСВРаботодателя)
					|				ТОГДА ВЫРАЗИТЬ(НачисленияУдержанияПоСотрудникам.Регистратор КАК Документ.РеестрДСВ_3)
					|			ИНАЧЕ NULL
					|		КОНЕЦ) КАК РегистраторДСВРаботодателя,
					|	СУММА(ВЫБОР
					|			КОГДА НачисленияУдержанияПоСотрудникам.НачислениеУдержание <> ЗНАЧЕНИЕ(Перечисление.ВидыОсобыхНачисленийИУдержаний.ДСВРаботодателя)
					|				ТОГДА НачисленияУдержанияПоСотрудникам.Сумма
					|			ИНАЧЕ 0
					|		КОНЕЦ) КАК ВзносыРаботника,
					|	СУММА(ВЫБОР
					|			КОГДА НачисленияУдержанияПоСотрудникам.НачислениеУдержание = ЗНАЧЕНИЕ(Перечисление.ВидыОсобыхНачисленийИУдержаний.ДСВРаботодателя)
					|				ТОГДА НачисленияУдержанияПоСотрудникам.Сумма
					|			ИНАЧЕ 0
					|		КОНЕЦ) КАК ВзносыРаботодателя,
					|	НАЧАЛОПЕРИОДА(НачисленияУдержанияПоСотрудникам.Период, МЕСЯЦ) КАК ОтчетныйПериод
					|ПОМЕСТИТЬ ВТДанныеДСВ
					|ИЗ
					|	ВТСотрудникиПериоды КАК СотрудникиПериоды
					|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержанияПоСотрудникам
					|		ПО СотрудникиПериоды.Сотрудник = НачисленияУдержанияПоСотрудникам.ФизическоеЛицо
					|			И СотрудникиПериоды.СсылкаНаСотрудника = НачисленияУдержанияПоСотрудникам.Сотрудник
					|			И СотрудникиПериоды.Организация = НачисленияУдержанияПоСотрудникам.Организация
					|			И (НачисленияУдержанияПоСотрудникам.НачислениеУдержание В (&НачисленияУдержанияДСВ))
					|			И (НачисленияУдержанияПоСотрудникам.Период МЕЖДУ НАЧАЛОПЕРИОДА(СотрудникиПериоды.ПериодРегистрации, ГОД) И КОНЕЦПЕРИОДА(СотрудникиПериоды.ПериодРегистрации, МЕСЯЦ))
					|
					|СГРУППИРОВАТЬ ПО
					|	СотрудникиПериоды.Ссылка,
					|	СотрудникиПериоды.Организация,
					|	СотрудникиПериоды.НомерСтроки,
					|	СотрудникиПериоды.Сотрудник,
					|	СотрудникиПериоды.СсылкаНаСотрудника,
					|	НАЧАЛОПЕРИОДА(НачисленияУдержанияПоСотрудникам.Период, МЕСЯЦ)";
				
				Запрос.Выполнить();
				
				Запрос.Текст =
					"ВЫБРАТЬ
					|	СотрудникиПериоды.Ссылка КАК Ссылка,
					|	СотрудникиПериоды.НомерСтроки КАК НомерСтроки,
					|	СотрудникиПериоды.Сотрудник КАК Сотрудник,
					|	СотрудникиПериоды.Год КАК Год,
					|	КадровыеДанные.СтраховойНомерПФР КАК СтраховойНомерПФР,
					|	КадровыеДанные.Фамилия КАК Фамилия,
					|	КадровыеДанные.Имя КАК Имя,
					|	КадровыеДанные.Отчество КАК Отчество,
					|	ДанныеДСВ.РегистраторДСВРаботодателя КАК РегистраторДСВ,
					|	ДанныеДСВ.РегистраторДСВРаботодателя.НомерПлатежногоПоручения КАК НомерПоручения,
					|	ДанныеДСВ.РегистраторДСВРаботодателя.ДатаПлатежногоПоручения КАК ДатаПоручения,
					|	ДанныеДСВ.РегистраторДСВРаботодателя.ДатаИсполненияПлатежногоПоручения КАК ДатаИсполненияПоручения,
					|	ДанныеДСВ.ВзносыРаботника КАК ВзносыРаботника,
					|	ДанныеДСВ.ВзносыРаботодателя КАК ВзносыРаботодателя
					|ИЗ
					|	ВТСотрудникиПериоды КАК СотрудникиПериоды
					|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеУвольненийДляЕФС1 КАК КадровыеДанные
					|		ПО СотрудникиПериоды.Период = КадровыеДанные.Период
					|			И СотрудникиПериоды.Сотрудник = КадровыеДанные.ФизическоеЛицо
					|		ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеДСВ КАК ДанныеДСВ
					|		ПО СотрудникиПериоды.Сотрудник = ДанныеДСВ.Сотрудник
					|			И СотрудникиПериоды.СсылкаНаСотрудника = ДанныеДСВ.СсылкаНаСотрудника
					|			И СотрудникиПериоды.Организация = ДанныеДСВ.Организация
					|
					|УПОРЯДОЧИТЬ ПО
					|	Ссылка,
					|	НомерСтроки,
					|	РегистраторДСВ";
				
				ВыборкаДСВ = Запрос.Выполнить().Выбрать();
				
			Иначе
				ВыборкаДСВ = Неопределено;
			КонецЕсли;
			
			ПечатнаяФорма = ПерсонифицированныйУчет.ПечатьПодраздела_1_2_ФормыЕФС_1(
				ОбъектыПечати, ВыборкаПоШапкеДокумента, ВыборкаСТАЖ, , ВыборкаДСВ, Истина, ПараметрыПечати);
			
			Если ПечатныеФормы.ВысотаТаблицы > 0 Тогда
				ПечатныеФормы.ВывестиГоризонтальныйРазделительСтраниц();
			Иначе
				ЗарплатаКадрыОтчеты.УстановитьПоОбразцуПараметрыСтраницы(ПечатныеФормы, ПечатнаяФорма);
			КонецЕсли;
			ПечатныеФормы.Вывести(ПечатнаяФорма);
			
		КонецЦикла;
		
		Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ПерсонифицированныйУчет.ИдентификаторПечатнойФормы_ФормаЕФС_1()) Тогда
			ИмяМакета = ПерсонифицированныйУчет.ИдентификаторПечатнойФормы_ФормаЕФС_1();
			СинонимПечатнойФормы = НСтр("ru = 'Подразделы 1.2 и 3 формы ЕФС-1'");
		Иначе
			ИмяМакета = ПерсонифицированныйУчет.ИдентификаторПечатнойФормыПодраздела_1_2_ФормыЕФС_1();
			СинонимПечатнойФормы = НСтр("ru = 'Подраздел 1.2 формы ЕФС-1'");
		КонецЕсли;
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			ИмяМакета,
			СинонимПечатнойФормы,
			ПечатныеФормы);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

#Область ПечатьРасчетаСреднегоЗаработка

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

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

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

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

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

#Область ПечатьПодробногоРасчетаНачислений

// Заполняет структуру - описание документа для формирования печатной формы подробного расчета начислений.
//
// Параметры:
//   ОписаниеДокумента - структура, определяется в Обработки.ПечатьРасчетаНачислений.ОписаниеДокументаРасчетаНачислений.
//
Процедура ЗаполнитьОписаниеДокументаРасчетаНачислений(ОписаниеДокумента) Экспорт
	КатегорииСпециализированногоНачисления = Новый Массив;
	КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.КомпенсацияОтпуска);
	КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ВыходноеПособие);
	КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСреднемЗаработке);
	КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСреднемЗаработке);
	КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСДС);
	КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСДС);
	
	МетаданныеДокумента = ПустаяСсылка().Метаданные();
	
	ОписаниеДокумента.Вставить("ИмяДокумента", 								МетаданныеДокумента.Имя);
	ОписаниеДокумента.Вставить("СинонимДокумента", 							МетаданныеДокумента.Синоним);
	ОписаниеДокумента.Вставить("ЕстьРасчетСреднегоЗаработка", 				Истина);
	ОписаниеДокумента.Вставить("ЕстьРасчетСпециализированныхНачислений",	Истина);
	ОписаниеДокумента.Вставить("ЕстьРасчетЗарплаты", 						Истина);
	ОписаниеДокумента.Вставить("КатегорииСпециализированногоНачисления", 	КатегорииСпециализированногоНачисления);
	ОписаниеДокумента.Вставить("НазваниеСпециализированногоНачисления", 	НСтр("ru='Расчет при увольнении'"));
КонецПроцедуры 

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

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

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


#Область ПечатьФормаСЗВ_ДСО

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

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

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

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

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

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

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

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

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

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

#Область ОбработкаПроверкиЗаполнения

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

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

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

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

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

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

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

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

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

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

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

Процедура ДобавитьКолонкуНачалоМесяца(Таблица, ИмяКолонкиСДатой)
	
	Таблица.Колонки.Добавить("НачалоМесяца" + ИмяКолонкиСДатой, Новый ОписаниеТипов("Дата"));
	Для Каждого СтрокаТаблицы Из Таблица Цикл
		СтрокаТаблицы["НачалоМесяца" + ИмяКолонкиСДатой] = НачалоМесяца(СтрокаТаблицы[ИмяКолонкиСДатой]);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ЗапросВТНачисленияПоДокументу(МенеджерВременныхТаблиц, ПериодРегистрации, ЭтоПервыйПериод)

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

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

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

КонецФункции

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

Функция ДанныеДляСторнированияУдержанийЗаОтпуск(ДокументСсылка) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Запрос.УстановитьПараметр("ПризнакКомпенсацииУдержания", Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.УдержатьЗаИспользованныеАвансом);
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Увольнение.ВидРасчетаКомпенсацииУдержанияОтпуска КАК Удержание
	|ПОМЕСТИТЬ ВТВидыУдержаний
	|ИЗ
	|	Документ.Увольнение КАК Увольнение
	|ГДЕ
	|	Увольнение.ПризнакКомпенсацииУдержанияОтпуска = &ПризнакКомпенсацииУдержания
	|	И Увольнение.Ссылка = &Ссылка
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	УвольнениеДополнительныеОтпуска.ВидРасчетаКомпенсацииУдержания
	|ИЗ
	|	Документ.Увольнение.ДополнительныеОтпуска КАК УвольнениеДополнительныеОтпуска
	|ГДЕ
	|	УвольнениеДополнительныеОтпуска.ПризнакКомпенсацииУдержания = &ПризнакКомпенсацииУдержания
	|	И УвольнениеДополнительныеОтпуска.Ссылка = &Ссылка";
	
	Запрос.Выполнить();
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	УвольнениеУдержания.ФизическоеЛицо,
	|	УвольнениеУдержания.ДатаНачала,
	|	УвольнениеУдержания.ДатаОкончания,
	|	УвольнениеУдержания.Удержание,
	|	УвольнениеУдержания.ДокументОснование,
	|	УвольнениеУдержания.Получатель,
	|	УвольнениеУдержания.ПлатежныйАгент,
	|	УвольнениеУдержания.Результат * -1 КАК Результат,
	|	ИСТИНА КАК ФиксРасчет,
	|	ИСТИНА КАК ФиксЗаполнение,
	|	ИСТИНА КАК ФиксСтрока,
	|	УвольнениеУдержания.ИдентификаторСтрокиВидаРасчета
	|ИЗ
	|	ВТВидыУдержаний КАК ВТВидыУдержаний
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Увольнение.Удержания КАК УвольнениеУдержания
	|		ПО ВТВидыУдержаний.Удержание = УвольнениеУдержания.Удержание
	|			И (УвольнениеУдержания.Ссылка = &Ссылка)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	УвольнениеПоказатели.Показатель,
	|	УвольнениеПоказатели.Значение,
	|	УвольнениеПоказатели.ИдентификаторСтрокиВидаРасчета
	|ИЗ
	|	ВТВидыУдержаний КАК ВТВидыУдержаний
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Увольнение.Удержания КАК УвольнениеУдержания
	|		ПО ВТВидыУдержаний.Удержание = УвольнениеУдержания.Удержание
	|			И (УвольнениеУдержания.Ссылка = &Ссылка)
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Увольнение.Показатели КАК УвольнениеПоказатели
	|		ПО (УвольнениеУдержания.ИдентификаторСтрокиВидаРасчета = УвольнениеПоказатели.ИдентификаторСтрокиВидаРасчета)
	|			И (УвольнениеПоказатели.Ссылка = &Ссылка)";
	
	Результат = Запрос.ВыполнитьПакет();
	
	ДанныеДляСторнирования = Новый Структура("Удержания, Показатели");
	ДанныеДляСторнирования.Вставить("Удержания", Результат[0].Выгрузить());
	ДанныеДляСторнирования.Вставить("Показатели", Результат[1].Выгрузить());
	
	Возврат ДанныеДляСторнирования;
	
КонецФункции

Функция ВидыОтпусковОбъекта(ТекущийОбъект) Экспорт

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

КонецФункции

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

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

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

Процедура ЗаполнитьПериодРегистрацииВТабличнойЧастиНачислений(ДокументУвольнение) Экспорт
	
	Для Каждого СтрокаТабличнойЧасти Из ДокументУвольнение.Начисления Цикл
		СтрокаТабличнойЧасти.ПериодРегистрации = ДокументУвольнение.ПериодРегистрации;
	КонецЦикла;
	
	Для Каждого СтрокаТабличнойЧасти Из ДокументУвольнение.НачисленияПерерасчет Цикл
		СтрокаТабличнойЧасти.ПериодРегистрации = ДокументУвольнение.ПериодРегистрации;
	КонецЦикла;
	
	Для Каждого СтрокаТабличнойЧасти Из ДокументУвольнение.Пособия Цикл
		СтрокаТабличнойЧасти.ПериодРегистрации = ДокументУвольнение.ПериодРегистрации;
	КонецЦикла;
	
	Для Каждого СтрокаТабличнойЧасти Из ДокументУвольнение.ПособияПерерасчет Цикл
		СтрокаТабличнойЧасти.ПериодРегистрации = ДокументУвольнение.ПериодРегистрации;
	КонецЦикла;
	
	Для Каждого СтрокаТабличнойЧасти Из ДокументУвольнение.Льготы Цикл
		СтрокаТабличнойЧасти.ПериодРегистрации = ДокументУвольнение.ПериодРегистрации;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

#Область ПараметрыВыбораНачислений

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

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

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

Процедура ЗаполнитьДатуЗапретаРедактирования(ОбъектДокумента) Экспорт
	
	ЗарплатаКадры.ЗаполнитьДатуЗапретаРедактирования(ОбъектДокумента, "ДатаУвольнения");
	
КонецПроцедуры

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

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

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

Процедура ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления) Экспорт

	ПараметрыЗаполнения = ПерерасчетЗарплаты.ПараметрыЗаполненияИсходныхДанныхПерерасчетов();
	ПараметрыЗаполнения.ТаблицыНачислений = "Начисления,НачисленияПерерасчет,Пособия,ПособияПерерасчет,Льготы";
	ПерерасчетЗарплаты.ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления, Метаданные.Документы.Увольнение, ПараметрыЗаполнения);

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

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

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

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

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

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

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

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

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

Функция ИдентификаторПечатнойФормыРаздел3РСВ()
	Возврат "Раздел3РСВ";
КонецФункции

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

Функция ДанныеДляУчетаПособийПриУвольненииПустая() Экспорт
	
	ДанныеСотрудников = Новый Структура;
	ДанныеСотрудников.Вставить("ПределДоходаНеОблагаемогоСтраховымиВзносами", 0);
	ДанныеСотрудников.Вставить("ПределДоходаНеОблагаемогоНДФЛ", 0);
	
	Возврат ДанныеСотрудников;
	
КонецФункции

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

#КонецЕсли

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