Отчеты по сотрудникам / Модуль объекта

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

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

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

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


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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Универсальные процедуры и Функции.

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

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

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

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

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