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