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