Воинский учет (бронирование) / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету ЧисленностьРаботающихИЗабронированныхГражданЗапаса.

Процедура ВывестиМакетЧисленностьРаботающихИЗабронированныхГражданЗапаса(ДокументРезультат, ДанныеОтчета, ДатаОтчета)
	
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
	
	Макет 		  = УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетБронирование.ПФ_MXL_ЧисленностьРаботающихИЗабронированныхГражданЗапаса");
	Заголовок 	  = Макет.ПолучитьОбласть("Заголовок");
	Шапка 		  = Макет.ПолучитьОбласть("Шапка");
	СтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
	Подвал 		  = Макет.ПолучитьОбласть("Подвал");
	Итоги 		  = Макет.ПолучитьОбласть("Итоги");
	
	ИспользуетсяТрудПлавсостава = ПолучитьФункциональнуюОпцию("ИспользуетсяТрудПлавсостава");
	ИспользуетсяТрудЛетноПодъемногоСостава = ПолучитьФункциональнуюОпцию("ИспользуетсяТрудЛетноПодъемногоСостава");
	
	Для Каждого ДанныеОрганизации Из ДанныеОтчета.Строки Цикл
		
		ПараметрыЗаголовка = ПараметрыЗаголовкаСтруктура(ДанныеОрганизации.Организация, ДатаОтчета);
		
		ЗаполнитьЗначенияСвойств(Заголовок.Параметры, ПараметрыЗаголовка);
		ЗаполнитьЗначенияСвойств(Подвал.Параметры, ПараметрыЗаголовка);
		
		ДокументРезультат.Вывести(Заголовок);
		ДокументРезультат.Вывести(Шапка);
		
		СтрокиОтчета = СформироватьТаблицуСтрокиОтчета();
		
		ЗаполнитьЗначенияСвойств(Итоги.Параметры, ДанныеОрганизации);
		
		Для Каждого СтрокаГруппировки Из ДанныеОрганизации.Строки Цикл
			
			Если ЗначениеЗаполнено(СтрокаГруппировки.ФизическоеЛицо) Тогда 
				Прервать;
			КонецЕсли;
			
			Если ИспользуетсяТрудПлавсостава И СтрокаГруппировки.Плавсостав = Истина Тогда 
				
				ЗаполнитьЗначенияСвойств(СтрокиОтчета[21], СтрокаГруппировки);
				
			ИначеЕсли ИспользуетсяТрудЛетноПодъемногоСостава И СтрокаГруппировки.ЛетноПодъемныйСостав = Истина Тогда 
				
				ЗаполнитьЗначенияСвойств(СтрокиОтчета[20], СтрокаГруппировки);
				
			Иначе 
				
				ЗаполнитьДанныеГруппировки(СтрокаГруппировки, СтрокиОтчета);

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

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

Процедура ОписаниеСтрокиДанных(ТДанных, НомерСтрокиОтчета, ИмяСтрокиОтчета, Категория)
	
	Строка = ТДанных.Добавить();
	Строка.НомерСтрокиОтчета = НомерСтрокиОтчета;
	Строка.ИмяСтрокиОтчета = ИмяСтрокиОтчета;
	Строка.Категория = Категория;

КонецПроцедуры

Функция СформироватьТаблицуСтрокиОтчета()
	
	ТДанных = Новый ТаблицаЗначений;
	
	ТДанных.Колонки.Добавить("НомерСтрокиОтчета", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
	ТДанных.Колонки.Добавить("ИмяСтрокиОтчета",   Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
	ТДанных.Колонки.Добавить("Категория", 		  Новый ОписаниеТипов("ПеречислениеСсылка.КатегорииДолжностейДляВоинскогоУчета, ПеречислениеСсылка.КатегорииДолжностейДляУчетаЗабронированных"));
	
	ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15));
	
	ТДанных.Колонки.Добавить("ВсегоРаботающих", 						  ТипЧисло);
	ТДанных.Колонки.Добавить("ВсегоВЗапасе", 							  ТипЧисло);
	ТДанных.Колонки.Добавить("ОфицеровВЗапасе", 						  ТипЧисло);
	ТДанных.Колонки.Добавить("ПрапорщиковИСолдатВЗапасе", 				  ТипЧисло);
	ТДанных.Колонки.Добавить("ПрапорщиковСолдатОграниченноГодныхВЗапасе", ТипЧисло);
	ТДанных.Колонки.Добавить("ВсегоВЗапасеЗабронировано", 				  ТипЧисло);
	ТДанных.Колонки.Добавить("ОфицеровЗабронировано", 					  ТипЧисло);
	ТДанных.Колонки.Добавить("ПрапорщиковСолдатЗабронировано", 			  ТипЧисло);
	ТДанных.Колонки.Добавить("НезабронированоБезМобпредписаний", 		  ТипЧисло);
	ТДанных.Колонки.Добавить("ВЗапасеСМобпредписанием", 				  ТипЧисло);
	ТДанных.Колонки.Добавить("Призывников", 							  ТипЧисло);
	
	КатегорииВоинскогоУчета 	  = Перечисления.КатегорииДолжностейДляВоинскогоУчета;
	КатегорииУчетаЗабронированных = Перечисления.КатегорииДолжностейДляУчетаЗабронированных;
	
	ОписаниеСтрокиДанных(ТДанных, "1",  НСтр("ru='Руководители'"), 													КатегорииВоинскогоУчета.Руководители);
	
	ОписаниеСтрокиДанных(ТДанных, "2",  НСтр("ru='Специалисты - всего, из них по основным видам деятельности'"), 	КатегорииВоинскогоУчета.Специалисты);
	ОписаниеСтрокиДанных(ТДанных, "3",  НСтр("ru='А Сельское хозяйство'"),			    							КатегорииУчетаЗабронированных.СпециалистыСХ);
	ОписаниеСтрокиДанных(ТДанных, "4",  НСтр("ru='C Добыча полезных ископаемых'"), 									КатегорииУчетаЗабронированных.СпециалистыПолезныеИскопаемые);
	ОписаниеСтрокиДанных(ТДанных, "5",  НСтр("ru='D Обрабатывающие производства'"), 								КатегорииУчетаЗабронированных.СпециалистыОбрабатывающиеПроизводства);
	ОписаниеСтрокиДанных(ТДанных, "6",  НСтр("ru='E Производство и распределение электроэнергии, газа и воды'"), 	КатегорииУчетаЗабронированных.СпециалистыПроизводствоЭлектроэнергии);
	ОписаниеСтрокиДанных(ТДанных, "7",  НСтр("ru='F Строительство'"),												КатегорииУчетаЗабронированных.СпециалистыСтроительство);
	ОписаниеСтрокиДанных(ТДанных, "8",  НСтр("ru='I Транспорт и связь'"),											КатегорииУчетаЗабронированных.СпециалистыТранспорт);
	ОписаниеСтрокиДанных(ТДанных, "9",  НСтр("ru='M Образование'"), 												КатегорииУчетаЗабронированных.СпециалистыОбразования);
	ОписаниеСтрокиДанных(ТДанных, "10", НСтр("ru='N Здравоохранение и предоставление социальных услуг'"),			КатегорииУчетаЗабронированных.СпециалистыЗдравоохранение);
	ОписаниеСтрокиДанных(ТДанных, "11", НСтр("ru='прочие виды экономической деятельности'"),						КатегорииУчетаЗабронированных.ПрочиеСпециалисты);
	
	ОписаниеСтрокиДанных(ТДанных, "12", НСтр("ru='Другие служащие'"), 												КатегорииВоинскогоУчета.ДругиеСлужащие);
	
	ОписаниеСтрокиДанных(ТДанных, "13", НСтр("ru='Рабочие - всего'"), 												КатегорииВоинскогоУчета.Рабочие);
	ОписаниеСтрокиДанных(ТДанных, "14", НСтр("ru='в том числе: имеющие тарифные разряды'"),							КатегорииУчетаЗабронированных.РабочиеИмеющиеТарифныйРазряд);
	ОписаниеСтрокиДанных(ТДанных, "15", НСтр("ru='не имеющие тарифных разрядов'"),									КатегорииУчетаЗабронированных.РабочиеНеИмеющиеТарифныхРазрядов);
	ОписаниеСтрокиДанных(ТДанных, "16",	НСтр("ru='сельскохозяйственного производства'"),							КатегорииУчетаЗабронированных.РабочиеСХ);
	ОписаниеСтрокиДанных(ТДанных, "17",	НСтр("ru='локомотивных бригад'"),											КатегорииУчетаЗабронированных.РабочиеЛокомотивныхБригад);
	ОписаниеСтрокиДанных(ТДанных, "18",	НСтр("ru='водители'"), 														КатегорииУчетаЗабронированных.Водители);
	ОписаниеСтрокиДанных(ТДанных, "19", НСтр("ru='трактористы'"),													КатегорииУчетаЗабронированных.Трактористы);
	
	ОписаниеСтрокиДанных(ТДанных, "  ",	НСтр("ru='Из численности руководителей, специалистов и рабочих:'"), 		Неопределено);
	ОписаниеСтрокиДанных(ТДанных, "20",	НСтр("ru='летно-подъемный состав'"),										Неопределено);
	ОписаниеСтрокиДанных(ТДанных, "21",	НСтр("ru='плавающий состав'"),												Неопределено);
	
	Возврат ТДанных;
	
КонецФункции

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

Функция СформироватьТаблицуСтрокиОтчета2015()
	
	СтрокиОтчета = Новый ТаблицаЗначений;
	
	СтрокиОтчета.Колонки.Добавить("ИмяСтрокиОтчета", 	Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
	СтрокиОтчета.Колонки.Добавить("Категория", 			Новый ОписаниеТипов("ПеречислениеСсылка.КатегорииДолжностейДляВоинскогоУчета"));
	
	ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15));
	
	СтрокиОтчета.Колонки.Добавить("ВсегоРаботающих", 				ТипЧисло);
	СтрокиОтчета.Колонки.Добавить("ВсегоВЗапасе", 					ТипЧисло);
	СтрокиОтчета.Колонки.Добавить("ОфицеровВЗапасе", 				ТипЧисло);
	СтрокиОтчета.Колонки.Добавить("ПрапорщиковИСолдатВЗапасе", 		ТипЧисло);
	СтрокиОтчета.Колонки.Добавить("ВсегоВЗапасеЗабронировано", 		ТипЧисло);
	СтрокиОтчета.Колонки.Добавить("ОфицеровЗабронировано", 			ТипЧисло);
	СтрокиОтчета.Колонки.Добавить("ПрапорщиковСолдатЗабронировано", ТипЧисло);
	
	КатегорииВоинскогоУчета = Перечисления.КатегорииДолжностейДляВоинскогоУчета;
	
	НоваяСтрока = СтрокиОтчета.Добавить();
	НоваяСтрока.ИмяСтрокиОтчета = НСтр("ru='Руководители'");
	НоваяСтрока.Категория = Перечисления.КатегорииДолжностейДляВоинскогоУчета.Руководители;
	
	НоваяСтрока = СтрокиОтчета.Добавить();
	НоваяСтрока.ИмяСтрокиОтчета = НСтр("ru='Специалисты'");
	НоваяСтрока.Категория = Перечисления.КатегорииДолжностейДляВоинскогоУчета.Специалисты;
	
	НоваяСтрока = СтрокиОтчета.Добавить();
	НоваяСтрока.ИмяСтрокиОтчета = НСтр("ru='Служащие'");
	НоваяСтрока.Категория = Перечисления.КатегорииДолжностейДляВоинскогоУчета.ДругиеСлужащие;
	
	НоваяСтрока = СтрокиОтчета.Добавить();
	НоваяСтрока.ИмяСтрокиОтчета = НСтр("ru='Рабочие'");
	НоваяСтрока.Категория = Перечисления.КатегорииДолжностейДляВоинскогоУчета.Рабочие;
	
	Возврат СтрокиОтчета;
	
КонецФункции

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету ДонесениеОКоличествеГражданВЗапасе.

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету АнализОбеспеченностиТрудовымиРесурсами.

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

КонецПроцедуры

Процедура ЗаполнитьПлановыеДанныеПоОрганизации(СтрокиОтчета, Организация, ДатаОтчета)

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

Функция СформироватьТаблицуКатегорийДолжностей() 
	
	ТДанных = Новый ТаблицаЗначений;
	
	ТДанных.Колонки.Добавить("НомерСтрокиОтчета", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
	ТДанных.Колонки.Добавить("ИмяСтрокиОтчета",   Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
	ТДанных.Колонки.Добавить("Категория", 		  Новый ОписаниеТипов("ПеречислениеСсылка.КатегорииДолжностейДляВоинскогоУчета, ПеречислениеСсылка.КатегорииДолжностейДляУчетаЗабронированных"));
	
	ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15));
	
	ТДанных.Колонки.Добавить("ВсегоРаботающих", 		ТипЧисло);
	ТДанных.Колонки.Добавить("ВсегоВЗапасе", 			ТипЧисло);
	ТДанных.Колонки.Добавить("ВЗапасеСМобПредписанием", ТипЧисло);
	ТДанных.Колонки.Добавить("ОстаетсяРаботать", 		ТипЧисло);
	ТДанных.Колонки.Добавить("Потребность", 			ТипЧисло);
	ТДанных.Колонки.Добавить("ИзбытокНекомплект", 		ТипЧисло);
	
	Категории = Перечисления.КатегорииДолжностейДляВоинскогоУчета;
	
	ОписаниеСтрокиДанных(ТДанных, "1", НСтр("ru='Руководители'"), 					Категории.Руководители);
	ОписаниеСтрокиДанных(ТДанных, "2", НСтр("ru='Специалисты'"), 					Категории.Специалисты);
	ОписаниеСтрокиДанных(ТДанных, "3", НСтр("ru='Другие служащие'"), 				Категории.ДругиеСлужащие);
	ОписаниеСтрокиДанных(ТДанных, "4", НСтр("ru='Рабочие'"), 						Категории.Рабочие);
	ОписаниеСтрокиДанных(ТДанных, "5", "       " + НСтр("ru='из них водители'"), 	Перечисления.КатегорииДолжностейДляУчетаЗабронированных.Водители);
	ОписаниеСтрокиДанных(ТДанных, "6", НСтр("ru='ВСЕГО'"), 							Неопределено);
	
	Возврат ТДанных;
	
КонецФункции	

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

КонецПроцедуры

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

#Область ЧисленностьРаботающихИЗабронированныхГражданПребывающихВЗапасе

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

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

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

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

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

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

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

	КонецЕсли; 
	
	Макет.Параметры.Заполнить(ПараметрыЗаполнения);
	
КонецПроцедуры

Функция СведенияОбОрганизациях(Организации, ДатаОтчета)
	
	Запрос = Новый Запрос;
	
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос.УстановитьПараметр("Организации", Организации);
	Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета);
	
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Организации.Ссылка КАК СтруктурнаяЕдиница,
		|	Организации.Ссылка КАК Организация,
		|	&ДатаОтчета КАК Период
		|ПОМЕСТИТЬ ВТОрганизацииПериоды
		|ИЗ
		|	Справочник.Организации КАК Организации
		|ГДЕ
		|	Организации.Ссылка В(&Организации)";
	
	Запрос.Выполнить();
	
	ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
		"ИсторияРегистрацийВНалоговомОргане",
		Запрос.МенеджерВременныхТаблиц,
		Истина,
		ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(
			"ВТОрганизацииПериоды",
			"СтруктурнаяЕдиница"));
		
	ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
		"ПараметрыБронированияСотрудниковОрганизаций",
		Запрос.МенеджерВременныхТаблиц,
		Истина,
		ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(
			"ВТОрганизацииПериоды",
			"Организация"));
	
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ОрганизацииПериоды.Организация КАК Организация,
		|	Организации.Наименование КАК Наименование,
		|	Организации.НаименованиеПолное КАК НаименованиеПолное,
		|	Организации.НаименованиеСокращенное КАК НаименованиеСокращенное,
		|	Организации.ИНН КАК ИНН,
		|	ИсторияРегистрацийВНалоговомОрганеСрезПоследних.ПериодЗаписи КАК ПериодРегистрации,
		|	ЕСТЬNULL(РегистрацииВНалоговомОргане.Ссылка, ЗНАЧЕНИЕ(Справочник.РегистрацииВНалоговомОргане.ПустаяСсылка)) КАК РегистрацияВНалоговомОргане,
		|	ЕСТЬNULL(РегистрацииВНалоговомОргане.КПП, """") КАК КПП,
		|	ЕСТЬNULL(РегистрацииВНалоговомОргане.НаименованиеИФНС, """") КАК НаименованиеИФНС,
		|	ЕСТЬNULL(РегистрацииВНалоговомОргане.КодПоОКАТО, """") КАК ОКАТО,
		|	ПараметрыБронирования.Военкомат КАК Военкомат,
		|	ПараметрыБронирования.НормаБронирования КАК НормаБронирования,
		|	ПараметрыБронирования.ВидОснованияДляБронирования КАК ВидОснования,
		|	ПараметрыБронирования.РеквизитыОснованияДляБронирования КАК РеквизитыОснования,
		|	ВЫРАЗИТЬ("""" КАК СТРОКА(100)) КАК ОКОГУ
		|ИЗ
		|	ВТОрганизацииПериоды КАК ОрганизацииПериоды
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
		|		ПО ОрганизацииПериоды.Организация = Организации.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТИсторияРегистрацийВНалоговомОрганеСрезПоследних КАК ИсторияРегистрацийВНалоговомОрганеСрезПоследних
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РегистрацииВНалоговомОргане КАК РегистрацииВНалоговомОргане
		|			ПО ИсторияРегистрацийВНалоговомОрганеСрезПоследних.РегистрацияВНалоговомОргане = РегистрацииВНалоговомОргане.Ссылка
		|		ПО ОрганизацииПериоды.Организация = ИсторияРегистрацийВНалоговомОрганеСрезПоследних.СтруктурнаяЕдиница
		|			И ОрганизацииПериоды.Период = ИсторияРегистрацийВНалоговомОрганеСрезПоследних.Период
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТПараметрыБронированияСотрудниковОрганизацийСрезПоследних КАК ПараметрыБронирования
		|		ПО ОрганизацииПериоды.Организация = ПараметрыБронирования.Организация
		|			И ОрганизацииПериоды.Период = ПараметрыБронирования.Период";
	
	ПараметрыОрганизаций = Запрос.Выполнить().Выгрузить();
	
	ДанныеОКОГУ = Новый Соответствие;
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда 
		МодульГосударственнаяСлужба = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
		ДанныеОКОГУ = МодульГосударственнаяСлужба.СвойстваОрганизацийГосударственнойСлужбы(Организации);
	КонецЕсли;
	
	Для Каждого ПараметрыОрганизации Из ПараметрыОрганизаций Цикл 
		Если Не ЗначениеЗаполнено(ПараметрыОрганизации.НаименованиеПолное) Тогда 
			ПараметрыОрганизации.НаименованиеПолное = ПараметрыОрганизации.Наименование;
		КонецЕсли;
		Если ДанныеОКОГУ[ПараметрыОрганизации.Организация] <> Неопределено Тогда 
			ПараметрыОрганизации.ОКОГУ = ДанныеОКОГУ[ПараметрыОрганизации.Организация].ОКОГУ;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ПараметрыОрганизаций;
	
КонецФункции

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

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

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