Оплата дней ухода за детьми-инвалидами / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

// СтандартныеПодсистемы.Печать

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

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

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

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

// ЗарплатаКадрыПодсистемы

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

// Конец ЗарплатаКадрыПодсистемы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ДатаНачалаПримененияОстаткаДнейЗаГод() Экспорт
	Возврат '20230901';
КонецФункции

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

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

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

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

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

Функция ПредставлениеПериодовУхода(МесяцыУхода) Экспорт
	Возврат СтрСоединить(МесяцыУхода.ВыгрузитьКолонку("ПредставлениеПериодов"), ";  ");
КонецФункции

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

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

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

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

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

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

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

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

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

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

Функция ДатаВступленияВСилуФорм2023()
	Возврат '20230901';
КонецФункции

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

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

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

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

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

Процедура ВывестиДанныеОСотрудникеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, ДанныеДляПечати)
	
	ОбластьСотрудник = Макет.ПолучитьОбласть("Сотрудник");
	ДлинаСтрокиСведенийОСотруднике = 45;
	
	Если ЗначениеЗаполнено(ДанныеДляПечати.ФИОСотрудника) Тогда
		ФИОСотрудника = "";
		ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(ДанныеДляПечати.ФИОСотрудника), 2, ФИОСотрудника, ДанныеДляПечати.ПолСотрудника, ДанныеДляПечати.ФизическоеЛицо);
		ШаблонСотрудник = НСтр("ru = 'От %1 (%2, %3)'");
		СтрокаСотрудник = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСотрудник, ФИОСотрудника, ДанныеДляПечати.ДолжностьСотрудника, ДанныеДляПечати.ПодразделениеСотрудника);
		
		МинимальноеКоличествоСтрокСведенийОСотруднике = 0;
		МассивСтрок = МассивСтрокЗаданнойДлины(СтрокаСотрудник, ДлинаСтрокиСведенийОСотруднике);
	Иначе
		МинимальноеКоличествоСтрокСведенийОСотруднике = 4;
		МассивСтрок = Новый Массив;
	КонецЕсли;
	
	ВывестиМассивСтрокВТабличныйДокумент(ТабличныйДокумент, ОбластьСотрудник, "Сотрудник", МассивСтрок, МинимальноеКоличествоСтрокСведенийОСотруднике);
	
КонецПроцедуры

Процедура ВывестиДанныеОВторомРодителеЗаявленияОПредоставленииДнейУхода(ТабличныйДокумент, Макет, ДанныеДляПечати)
	
	ОбластьСведенияОВторомРодителеВерх = Макет.ПолучитьОбласть("СведенияОВторомРодителеВерх");
	ОбластьСведенияОВторомРодителе	= Макет.ПолучитьОбласть("СведенияОВторомРодителе");
	
	СтруктураЗаполнения = Новый Структура;
	СведенияОВторомРодителе = ДанныеДляПечати.СведенияОВторомРодителе;
	
	ДлинаКороткойСтрокиСведенийОВторомРодителе = 75;
	МассивСтрок = МассивСтрокЗаданнойДлины(СведенияОВторомРодителе, ДлинаКороткойСтрокиСведенийОВторомРодителе);
	
	СтрокаСведенияОВторомРодителеКороткая = "";
	Если МассивСтрок.Количество() > 0 Тогда
	 СтрокаСведенияОВторомРодителеКороткая = МассивСтрок[0];
	КонецЕсли;
	
	СтруктураЗаполнения.Вставить("СведенияОВторомРодителеКороткая", СтрокаСведенияОВторомРодителеКороткая);
	ЗаполнитьЗначенияСвойств(ОбластьСведенияОВторомРодителеВерх.Параметры, СтруктураЗаполнения);
	ТабличныйДокумент.Вывести(ОбластьСведенияОВторомРодителеВерх);
	
	СведенияОВторомРодителе = Прав(СведенияОВторомРодителе, СтрДлина(СведенияОВторомРодителе) - СтрДлина(СтрокаСведенияОВторомРодителеКороткая));
	
	ДлинаСтрокиСведенийОВторомРодителе = 105;
	МинимальноеКоличествоСтрокСведенийОВторомРодителе = 9;
	
	МассивСтрок = МассивСтрокЗаданнойДлины(СведенияОВторомРодителе, ДлинаСтрокиСведенийОВторомРодителе);
	
	ВывестиМассивСтрокВТабличныйДокумент(ТабличныйДокумент, ОбластьСведенияОВторомРодителе, "СведенияОВторомРодителе", МассивСтрок, МинимальноеКоличествоСтрокСведенийОВторомРодителе);
	
КонецПроцедуры

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

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

Функция МесяцыУходаДляПечати(Выборка, ДниУходаПоВсемДокументам)
	ДниУхода = ДниУходаПоВсемДокументам.Скопировать(Новый Структура("Ссылка", Выборка.Ссылка));
	МесяцыУхода = МесяцыУхода(ДниУхода);
	Если МесяцыУхода.Количество() = 0 Тогда
		МесяцУхода = МесяцыУхода.Добавить();
		МесяцУхода.НачалоМесяца          = Выборка.ДатаНачалаСобытия;
		МесяцУхода.ПредставлениеПериодов = "";
		МесяцУхода.КоличествоДней        = 0;
		МесяцУхода.КоличествоПериодов    = 0;
	Иначе
		Для Каждого МесяцУхода Из МесяцыУхода Цикл
			МесяцУхода.ПредставлениеПериодов = СтрШаблон(НСтр("ru = '%1 %2 г.'"),
				МесяцУхода.ПредставлениеПериодов,
				Формат(МесяцУхода.НачалоМесяца, "ДФ=yyyy"));
		КонецЦикла;
	КонецЕсли;
	Возврат МесяцыУхода;
КонецФункции

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

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

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

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

Процедура ПриПечатиЗаявления2023(КонтекстПечати)
	СЭДОФСС.УстановитьСтандартныйОтступПечати(КонтекстПечати);
	Запрос = ЗапросДляПечатиЗаявленияОПредоставленииДнейУхода(КонтекстПечати.МассивОбъектов);
	РезультатыЗапроса        = Запрос.ВыполнитьПакет();
	Выборка                  = РезультатыЗапроса[0].Выбрать();
	ДниУходаПоВсемДокументам = РезультатыЗапроса[1].Выгрузить();
	Пока Выборка.Следующий() Цикл
		МесяцыУхода = МесяцыУходаДляПечати(Выборка, ДниУходаПоВсемДокументам);
		Для Каждого МесяцУхода Из МесяцыУхода Цикл
			УправлениеПечатьюБЗК.ПередПечатьюОчередногоОбъекта(КонтекстПечати);
			ВывестиШапкуЗаявления2023(КонтекстПечати, Выборка, МесяцУхода);
			УправлениеПечатьюБЗК.ПослеПечатиОчередногоОбъекта(КонтекстПечати, Выборка.Ссылка);
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры

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

Процедура ВывестиФИОРуководителяВШапкеЗаявления2023(Выборка, Секция, Параметры) Экспорт
	ФИОВПадеже = "";
	Если ЗначениеЗаполнено(Выборка.ФИОРуководителя) Тогда
		ФизическиеЛицаЗарплатаКадры.Просклонять(
			Строка(Выборка.ФИОРуководителя),
			3,
			ФИОВПадеже,
			Выборка.ПолРуководителя,
			Выборка.Руководитель);
		ФИОВПадеже = СокрЛП(ФИОВПадеже);
	КонецЕсли;
	Если ЗначениеЗаполнено(ФИОВПадеже) Тогда
		Уточнения = Новый Массив;
		Если ЗначениеЗаполнено(Выборка.ДолжностьРуководителя) Тогда
			Уточнения.Добавить(СокрЛП(Выборка.ДолжностьРуководителя));
		КонецЕсли;
		Если ЗначениеЗаполнено(Выборка.НазваниеОрганизации) Тогда
			Уточнения.Добавить(СокрЛП(Выборка.НазваниеОрганизации));
		КонецЕсли;
		Уточнение = ?(Уточнения.Количество() = 0, "", "(" + СтрСоединить(Уточнения, ", ") + ")");
		Если Уточнение = "" Тогда
			ФИОСУточнением = ФИОВПадеже;
		ИначеЕсли СтрДлина(ФИОВПадеже) > 70 Тогда // ФИО требуется переносить.
			ФИОСУточнением = ФИОВПадеже + " " + Уточнение;
		Иначе
			ФИОСУточнением = ФИОВПадеже + Символы.ПС + Уточнение;
		КонецЕсли;
		МассивСтрок = МассивСтрокЗаданнойДлины(ФИОСУточнением, 70);
	Иначе
		МассивСтрок = Новый Массив(4);
	КонецЕсли;
	
	Количество = МассивСтрок.Количество();
	Если Количество > 0 Тогда
		Параметры.Директор1 = МассивСтрок[0];
	Иначе
		Параметры.Директор1 = "";
	КонецЕсли;
	Если Количество > 1 Тогда
		Параметры.Директор2 = МассивСтрок[1];
		УстановитьВидимостьОбласти(Секция, "Директор2", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "Директор2", Ложь);
	КонецЕсли;
	Если Количество > 2 Тогда
		Параметры.Директор3 = МассивСтрок[2];
		УстановитьВидимостьОбласти(Секция, "Директор3", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "Директор3", Ложь);
	КонецЕсли;
	Если Количество > 3 Тогда
		МассивСтрок.Удалить(0);
		МассивСтрок.Удалить(0);
		МассивСтрок.Удалить(0);
		Параметры.Директор4 = СтрСоединить(МассивСтрок, " ");
		УстановитьВидимостьОбласти(Секция, "Директор4", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "Директор4", Ложь);
	КонецЕсли;
	
КонецПроцедуры

Процедура ВывестиФИОСотрудникаВШапкеЗаявления2023(Выборка, Секция, Параметры) Экспорт
	ФИОВПадеже = "";
	Если ЗначениеЗаполнено(Выборка.ФИОСотрудника) Тогда
		ФизическиеЛицаЗарплатаКадры.Просклонять(
			Строка(Выборка.ФИОСотрудника),
			2,
			ФИОВПадеже,
			Выборка.ПолСотрудника,
			Выборка.ФизическоеЛицо);
		ФИОВПадеже = СокрЛП(ФИОВПадеже);
	КонецЕсли;
	Если ЗначениеЗаполнено(ФИОВПадеже) Тогда
		Уточнения = Новый Массив;
		Если ЗначениеЗаполнено(Выборка.ДолжностьСотрудника) Тогда
			Уточнения.Добавить(СокрЛП(Выборка.ДолжностьСотрудника));
		КонецЕсли;
		Если ЗначениеЗаполнено(Выборка.ПодразделениеСотрудника) Тогда
			Уточнения.Добавить(СокрЛП(Выборка.ПодразделениеСотрудника));
		КонецЕсли;
		Уточнение = ?(Уточнения.Количество() = 0, "", "(" + СтрСоединить(Уточнения, ", ") + ")");
		Если Уточнение = "" Тогда
			ФИОСУточнением = ФИОВПадеже;
		ИначеЕсли СтрДлина(ФИОВПадеже) > 65 Тогда // ФИО требуется переносить.
			ФИОСУточнением = ФИОВПадеже + " " + Уточнение;
		Иначе
			ФИОСУточнением = ФИОВПадеже + Символы.ПС + Уточнение;
		КонецЕсли;
		МассивСтрок = МассивСтрокЗаданнойДлины(ФИОСУточнением, "65,70,70,70");
	Иначе
		МассивСтрок = Новый Массив(4);
	КонецЕсли;
	
	Количество = МассивСтрок.Количество();
	Если Количество > 0 Тогда
		Параметры.Сотрудник1 = МассивСтрок[0];
	Иначе
		Параметры.Сотрудник1 = "";
	КонецЕсли;
	Если Количество > 1 Тогда
		Параметры.Сотрудник2 = МассивСтрок[1];
		УстановитьВидимостьОбласти(Секция, "Сотрудник2", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "Сотрудник2", Ложь);
	КонецЕсли;
	Если Количество > 2 Тогда
		Параметры.Сотрудник3 = МассивСтрок[2];
		УстановитьВидимостьОбласти(Секция, "Сотрудник3", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "Сотрудник3", Ложь);
	КонецЕсли;
	Если Количество > 3 Тогда
		МассивСтрок.Удалить(0);
		МассивСтрок.Удалить(0);
		МассивСтрок.Удалить(0);
		Параметры.Сотрудник4 = СтрСоединить(МассивСтрок, " ");
		УстановитьВидимостьОбласти(Секция, "Сотрудник4", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "Сотрудник4", Ложь);
	КонецЕсли;
	
КонецПроцедуры

Процедура ВывестиСведенияОВторомРодителеВШапкеЗаявления2023(Выборка, Секция, Параметры) Экспорт
	Если ЗначениеЗаполнено(Выборка.СведенияОВторомРодителе) Тогда
		МассивСтрок = МассивСтрокЗаданнойДлины(Выборка.СведенияОВторомРодителе, "90,105,105,105");
	Иначе
		МассивСтрок = Новый Массив(5);
	КонецЕсли;
	
	Количество = МассивСтрок.Количество();
	Если Количество > 0 Тогда
		Параметры.СведенияОВторомРодителеЗаголовок = МассивСтрок[0];
		МассивСтрок.Удалить(0);
	Иначе
		Параметры.СведенияОВторомРодителеЗаголовок = "";
	КонецЕсли;
	Если Количество > 1 Тогда
		Параметры.СведенияОВторомРодителе1 = МассивСтрок[0];
		МассивСтрок.Удалить(0);
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе1", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе1", Ложь);
	КонецЕсли;
	Если Количество > 2 Тогда
		Параметры.СведенияОВторомРодителе2 = МассивСтрок[0];
		МассивСтрок.Удалить(0);
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе2", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе2", Ложь);
	КонецЕсли;
	Если Количество > 3 Тогда
		Параметры.СведенияОВторомРодителе3 = МассивСтрок[0];
		МассивСтрок.Удалить(0);
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе3", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе3", Ложь);
	КонецЕсли;
	Если Количество > 4 Тогда
		Параметры.СведенияОВторомРодителе4 = СтрСоединить(МассивСтрок, " ");;
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе4", Истина);
	Иначе
		УстановитьВидимостьОбласти(Секция, "СведенияОВторомРодителе4", Ложь);
	КонецЕсли;
	
КонецПроцедуры

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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