Штатное расписание начисления / Модуль объекта

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

Перем ОтчетИнициализирован;

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

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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	ИнициализироватьОтчет();

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


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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Вывод унифицированной формы Т-3.

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

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

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

Процедура ВывестиШапкуТаблицыТ3(ДокументРезультат, СписокНадбавок, Макет)
	
	ЗаголовокТаблицыДоНадбавок = Макет.ПолучитьОбласть("ШапкаЛиста|ДоНадбавок");
	ЗаголовокТаблицыНадбавки = Макет.ПолучитьОбласть("ШапкаЛиста|Надбавка");
	ЗаголовокТаблицыПослеНадбавок = Макет.ПолучитьОбласть("ШапкаЛиста|ПослеНадбавок");
	ДокументРезультат.Вывести(ЗаголовокТаблицыДоНадбавок, 2);
	НомерКолонки = 6;
	Для Каждого ДанныеНадбавки Из СписокНадбавок Цикл
		ЗаголовокТаблицыНадбавки.Параметры.ИмяНадбавки = ДанныеНадбавки.Представление;
		ЗаголовокТаблицыНадбавки.Параметры.НомерКолонки = НомерКолонки;
		ДокументРезультат.Присоединить(ЗаголовокТаблицыНадбавки);
		НомерКолонки = НомерКолонки + 1;
	КонецЦикла; 
	ЗаголовокТаблицыНадбавки = Макет.ПолучитьОбласть("ШапкаЛиста|Надбавка");
	Пока НомерКолонки < 9 Цикл
		ЗаголовокТаблицыНадбавки.Параметры.НомерКолонки = НомерКолонки;
		ДокументРезультат.Присоединить(ЗаголовокТаблицыНадбавки);
		НомерКолонки = НомерКолонки + 1;
	КонецЦикла;
	ОбластьЗаголовкаНадбавок = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы - 2, 8 , ДокументРезультат.ВысотаТаблицы - 2, 8 + (НомерКолонки - 6) * 3 - 1);
	ОбластьЗаголовкаНадбавок.Объединить();
	ОбластьЗаголовкаНадбавок.Текст = НСтр("ru = 'Надбавка, руб.'");
	ЗаголовокТаблицыПослеНадбавок.Параметры.НомерКолонкиФонд = НомерКолонки;
	ЗаголовокТаблицыПослеНадбавок.Параметры.НомерКолонкиПримечание = НомерКолонки + 1;
	ДокументРезультат.Присоединить(ЗаголовокТаблицыПослеНадбавок);
	
КонецПроцедуры

Процедура ВывестиШапкуСтраницыТ3(ДокументРезультат, СписокНадбавок, Макет)
	
	ЗаголовокТаблицыДоНадбавок = Макет.ПолучитьОбласть("ШапкаСтраницы|ДоНадбавок");
	ЗаголовокТаблицыНадбавки = Макет.ПолучитьОбласть("ШапкаСтраницы|Надбавка");
	ЗаголовокТаблицыПослеНадбавок = Макет.ПолучитьОбласть("ШапкаСтраницы|ПослеНадбавок");
	ДокументРезультат.Вывести(ЗаголовокТаблицыДоНадбавок, 2);
	НомерКолонки = 6;
	Для Каждого ДанныеНадбавки Из СписокНадбавок Цикл
		ЗаголовокТаблицыНадбавки.Параметры.НомерКолонки = НомерКолонки;
		ДокументРезультат.Присоединить(ЗаголовокТаблицыНадбавки);
		НомерКолонки = НомерКолонки + 1;
	КонецЦикла; 
	ЗаголовокТаблицыНадбавки = Макет.ПолучитьОбласть("ШапкаСтраницы|Надбавка");
	Пока НомерКолонки < 9 Цикл
		ЗаголовокТаблицыНадбавки.Параметры.НомерКолонки = НомерКолонки;
		ДокументРезультат.Присоединить(ЗаголовокТаблицыНадбавки);
		НомерКолонки = НомерКолонки + 1;
	КонецЦикла;
	ЗаголовокТаблицыПослеНадбавок.Параметры.НомерКолонкиФонд = НомерКолонки;
	ЗаголовокТаблицыПослеНадбавок.Параметры.НомерКолонкиПримечание = НомерКолонки + 1;
	ДокументРезультат.Присоединить(ЗаголовокТаблицыПослеНадбавок);
	
КонецПроцедуры

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

Функция ПредставлениеЗначенийТ3(МинимальноеЗначение, МаксимальноеЗначение, Точность = 2)
	
	Если МинимальноеЗначение = МаксимальноеЗначение Тогда
		
		Возврат Формат(МинимальноеЗначение, "ЧЦ=15; ЧДЦ=" + Точность);
		
	ИначеЕсли МинимальноеЗначение = 0 Тогда
		
		Возврат Формат(МаксимальноеЗначение, "ЧЦ=15; ЧДЦ=" + Точность);
		
	ИначеЕсли МаксимальноеЗначение = 0 Тогда
		
		Возврат Формат(МинимальноеЗначение, "ЧЦ=15; ЧДЦ=" + Точность);
		
	Иначе
		
		Возврат Формат(МинимальноеЗначение, "ЧЦ=15; ЧДЦ=" + Точность) + " - " + Формат(МаксимальноеЗначение, "ЧЦ=15; ЧДЦ=" + Точность);
		
	КонецЕсли;
	
КонецФункции

Функция ПредставлениеРазмераНадбавки(СтрокаДанныхНадбавки, ПредставлениеТарифовИНадбавок, ИспользоватьВилкуСтавокВШтатномРасписании)
	
	ПредставлениеРазмераВКоэффициентах = "";
	Если НЕ ЗначениеЗаполнено(ПредставлениеТарифовИНадбавок)
		ИЛИ ПредставлениеТарифовИНадбавок = Перечисления.ПредставлениеТарифовИНадбавок.ТарифыКоэффициенты
		ИЛИ ПредставлениеТарифовИНадбавок = Перечисления.ПредставлениеТарифовИНадбавок.МесячныйРазмерВРубляхИТарифыКоэффициенты  Тогда
		
		Если ИспользоватьВилкуСтавокВШтатномРасписании Тогда
			
			ПредставлениеРазмераВКоэффициентах = ПредставлениеЗначенийТ3(
				СтрокаДанныхНадбавки.ЗначениеМин, СтрокаДанныхНадбавки.ЗначениеМакс, СтрокаДанныхНадбавки.ПоказательТочность);
				
		Иначе
			
			ПредставлениеРазмераВКоэффициентах = ПредставлениеЗначенийТ3(
				СтрокаДанныхНадбавки.Значение, СтрокаДанныхНадбавки.Значение, СтрокаДанныхНадбавки.ПоказательТочность);
				
		КонецЕсли;
		
	КонецЕсли;
	
	ПредставлениеРазмераВРублях = "";
	Если ПредставлениеТарифовИНадбавок = Перечисления.ПредставлениеТарифовИНадбавок.МесячныйРазмерВРублях
		ИЛИ ПредставлениеТарифовИНадбавок = Перечисления.ПредставлениеТарифовИНадбавок.МесячныйРазмерВРубляхИТарифыКоэффициенты Тогда
		
		Если ЗначениеЗаполнено(СтрокаДанныхНадбавки.КоличествоСтавок) И СтрокаДанныхНадбавки.КоличествоСтавок <> 0 Тогда
			
			Если ИспользоватьВилкуСтавокВШтатномРасписании Тогда
				
				ПредставлениеРазмераВРублях = ПредставлениеЗначенийТ3(
					СтрокаДанныхНадбавки.РазмерМин,
					СтрокаДанныхНадбавки.РазмерМакс);
				
			Иначе
				
				ПредставлениеРазмераВРублях = ПредставлениеЗначенийТ3(
					СтрокаДанныхНадбавки.Размер,
					СтрокаДанныхНадбавки.Размер);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
		
	Если ПредставлениеТарифовИНадбавок = Перечисления.ПредставлениеТарифовИНадбавок.МесячныйРазмерВРублях Тогда
		
		Возврат ПредставлениеРазмераВРублях;
		
	ИначеЕсли НЕ ЗначениеЗаполнено(ПредставлениеТарифовИНадбавок)
		ИЛИ ПредставлениеТарифовИНадбавок = Перечисления.ПредставлениеТарифовИНадбавок.ТарифыКоэффициенты Тогда
		
		Возврат ПредставлениеРазмераВКоэффициентах;
		
	КонецЕсли;
	
	Возврат ПредставлениеРазмераВРублях + ?(ПустаяСтрока(ПредставлениеРазмераВКоэффициентах), "", " (" + ПредставлениеРазмераВКоэффициентах + ")");
	
КонецФункции

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

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

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

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

		Если ЗначениеЗаполнено(ПараметрыЗаполнения.РуководительКадровойСлужбы) Тогда
			ПараметрыЗаполнения.РуководительКадровойСлужбыРасшифровкаПодписи = ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ФИОФизЛиц[ПараметрыЗаполнения.РуководительКадровойСлужбы]);
		КонецЕсли; 

	КонецЕсли; 
		
	Возврат ПараметрыЗаполнения;
	
КонецФункции

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

#Область Инициализация

ОтчетИнициализирован = Ложь;

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

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

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