Сведения об изменениях для военкомата / Модуль объекта

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

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

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

	СтандартнаяОбработка = Ложь;
	
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();				   

	УстановитьЗначенияПараметров(НастройкиОтчета);

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

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


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

Процедура ИнициализироватьОтчет() Экспорт
	
	ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект);
	
КонецПроцедуры

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

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету СведенияОбИзмененияхДляВоенкомата.

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

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

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

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

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

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

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

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

	КонецЕсли; 
	
	Для каждого КлючИЗначение Из ПараметрыЗаполнения Цикл
		ПараметрыЗаголовка.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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