Отсутствие с сохранением оплаты / Модуль менеджера

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ТекстСообщенияНеЗаполненВидРасчета(ВнутрисменноеОтсутствие) Экспорт
	ТекстСообщения = НСтр("ru = 'Не найдено ни одного начисления для регистрации %1отсутствий'");
		
	Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ?(ВнутрисменноеОтсутствие, НСтр("ru = 'внутрисменных '"), ""));	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ДанныеДляРегистрацииВУчете;
														
КонецФункции		

// Функция возвращает структуру с описанием данного вида документа.
//
Функция ОписаниеДокумента() Экспорт 

	ОписаниеДокумента = ЗарплатаКадрыРасширенныйКлиентСервер.СтруктураОписанияДокумента();
	
	ОписаниеДокумента.КраткоеНазваниеИменительныйПадеж	 = НСтр("ru = 'отсутствие'");
	ОписаниеДокумента.КраткоеНазваниеРодительныйПадеж	 = НСтр("ru = 'отсутствия'");
	ОписаниеДокумента.ИмяРеквизитаСотрудник				 = "Сотрудник";
	ОписаниеДокумента.ИмяРеквизитаОтсутствующийСотрудник = "Сотрудник";
	ОписаниеДокумента.ИмяРеквизитаДатаНачалаСобытия		 = "ДатаНачала";
	ОписаниеДокумента.ИмяРеквизитаДатаОкончанияСобытия	 = "ДатаОкончания";
	
	Возврат ОписаниеДокумента;

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

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

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

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

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

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

	ПараметрыЗаполнения = ПерерасчетЗарплаты.ПараметрыЗаполненияИсходныхДанныхПерерасчетов();
	ПерерасчетЗарплаты.ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления, Метаданные.Документы.ОплатаПоСреднемуЗаработку, ПараметрыЗаполнения);

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

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

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

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

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

#Область ДанныеНовогоДокумента  

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

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

Функция ЭтоМежрасчетнаяВыплата(ПорядокВыплаты) Экспорт
	Возврат РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(ПорядокВыплаты);
КонецФункции

Функция НовыйИдентификаторСтроки(НомерТаблицы) Экспорт
	Возврат НомерТаблицы * 1000000 + 1;
КонецФункции	

Функция ОписаниеДокументаРасчета(РегистрацияНачисленийДоступна) Экспорт

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

Функция ОписаниеТаблицыСохраняемоеДенежноеСодержание() Экспорт
	Возврат КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыСохраняемоеДенежноеСодержание();
КонецФункции

Функция ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений) Экспорт
	
	ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();

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

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

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

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

Функция ОписаниеТаблицыКорректировкиВыплаты() Экспорт
	ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
	Возврат ОписаниеТаблицы;
КонецФункции

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

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

Функция СпособыРасчетаСреднегоЗаработка() Экспорт

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

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

#КонецЕсли

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