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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету СписокГражданПодлежащихПостановкеНаВоинскийУчет.

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету СписокЮношейДляОВК.

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету СписокПервоначальнойПостановкиНаВоинскийУчет.

Процедура ВывестиМакетСписокПервоначальнойПостановкиНаВоинскийУчет(ДокументРезультат, ДанныеОтчета, ДатаОтчета, НачалоОтчетногоГода)
	
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_СписокПервоначальнойПостановкиНаВоинскийУчет2021");
	Если ДатаОтчета < '20170801' Тогда
		Макет = УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_СписокПервоначальнойПостановкиНаВоинскийУчет");
	ИначеЕсли ДатаОтчета < '20211027' Тогда
		Макет = УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_СписокЮношейДляОВК2017");
	КонецЕсли;
	
	Заголовок 	  = Макет.ПолучитьОбласть("Заголовок");
	Шапка 		  = Макет.ПолучитьОбласть("Шапка");
	СтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
	Подвал 		  = Макет.ПолучитьОбласть("Подвал");
	
	ВыводимыеОбласти = Новый Массив;
	ВыводимыеОбласти.Добавить(СтрокаТаблицы);
	ВыводимыеОбласти.Добавить(Подвал);
	
	Для Каждого ДанныеОрганизации Из ДанныеОтчета.Строки Цикл
		
		Если ДокументРезультат.ВысотаТаблицы > 0 Тогда
			ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПараметрыЗаголовка = ПараметрыЗаголовкаСтруктура(ДатаОтчета, ДанныеОрганизации.Организация);
		
		ЗаполнитьЗначенияСвойств(Заголовок.Параметры, ПараметрыЗаголовка);
		ЗаполнитьЗначенияСвойств(Подвал.Параметры, ПараметрыЗаголовка);
		
		Если ДатаОтчета >= '20211027' Тогда
			Заголовок.Параметры.ГодРождения 		= Формат(ДобавитьМесяц(НачалоОтчетногоГода, -17*12), "ДФ=""гггг""");
			Заголовок.Параметры.ГодПостановкиНаУчет = Формат(НачалоОтчетногоГода, "ДФ=""гггг""");
		ИначеЕсли ДатаОтчета >= '20170801' Тогда
			Заголовок.Параметры.ДатаОтчета = Формат(ДатаОтчета, "ДФ=гггг");
		Иначе
			Заголовок.Параметры.ГодРождения 		= Формат(ДобавитьМесяц(НачалоОтчетногоГода, -17*12), "ДФ=""гггг""");
			Заголовок.Параметры.ГодПостановкиНаУчет = Формат(НачалоОтчетногоГода, "ДФ=""гггг""");
		КонецЕсли;
		
		ДокументРезультат.Вывести(Заголовок);
		ДокументРезультат.Вывести(Шапка);
		
		КоличествоСтрок = ДанныеОрганизации.Строки.Количество();
		
		Для Каждого ТекСтрока Из ДанныеОрганизации.Строки Цикл 
			
			Если ТекСтрока.СистемныеПоляНомерПоПорядкуВГруппировке < КоличествоСтрок 
				И Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ДокументРезультат, СтрокаТаблицы) Тогда
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
			ИначеЕсли ТекСтрока.СистемныеПоляНомерПоПорядкуВГруппировке = КоличествоСтрок
				И Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ДокументРезультат, ВыводимыеОбласти) Тогда
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(СтрокаТаблицы.Параметры, ТекСтрока);
			
			Если ДатаОтчета < '20170801' И ТекСтрока.Старше17 Тогда 
				СтрокаТаблицы.Параметры.ФИОПолные = Строка(СтрокаТаблицы.Параметры.ФИОПолные) + ", " + Формат(ТекСтрока.ДатаРождения, "ДФ=""гггг""") + " " + НСтр("ru = 'г. р.'");
			КонецЕсли;
			
			Если ДатаОтчета >= '20211027' Тогда
				СтрокаТаблицы.Параметры.ДатаРожденияПредставление = Формат(ТекСтрока.ДатаРождения, "ДЛФ=Д");
				Если ТекСтрока.АдресПоПропискеПредставление = ТекСтрока.АдресМестаПроживанияПредставление Тогда
					СтрокаТаблицы.Параметры.АдресМестаПроживанияПредставление = "";
				КонецЕсли;
				Если ТекСтрока.АдресДляИнформированияПредставление = ТекСтрока.АдресПоПропискеПредставление
					Или ТекСтрока.АдресДляИнформированияПредставление = ТекСтрока.АдресМестаПроживанияПредставление Тогда
					СтрокаТаблицы.Параметры.АдресДляИнформированияПредставление = "";
				КонецЕсли;

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету СписокДляСверкиСВоенкоматом.

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

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету КарточкаОповещения.

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету РаспискаПриПриемеДокументов.

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету КарточкаУчета.

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

Процедура ВывестиМакетКарточкаУчета2015(ДокументРезультат, ДанныеОтчета, ДатаОтчета, НастройкиОтчета)
	
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
	
	Если ДатаОтчета >= '20170101' Тогда 
		Макет = УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_КарточкаУчета2017");
	Иначе 
		Макет = УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_КарточкаУчета2015");
	КонецЕсли;
	
	ПечатьНаДвухЛистах = Ложь;
	ПараметрПечатьНаДвухЛистах = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПечатьНаДвухЛистах"));	
	Если ПараметрПечатьНаДвухЛистах <> Неопределено Тогда
		ПечатьНаДвухЛистах = ПараметрПечатьНаДвухЛистах.Значение;
	КонецЕсли;
	
	ОбластьКарточка = Макет.ПолучитьОбласть("Лист1Карточки");
	
	Для Каждого ДанныеОрганизации Из ДанныеОтчета.Строки Цикл
		
		Если ДокументРезультат.ВысотаТаблицы > 0 Тогда
			ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПараметрыЗаголовка = ПараметрыЗаголовкаСтруктура(ДатаОтчета, ДанныеОрганизации.Организация);
		
		УстановитьПривилегированныйРежим(Истина);
		КодыОрганизации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеОрганизации.Организация,"КодПоОКПО,ИНН,ОГРН,КодОКВЭД,КодОКВЭД2,КодОКОПФ,КодОКФС,НаименованиеОКВЭД,НаименованиеОКВЭД2,НаименованиеОКОПФ,НаименованиеОКФС");
		РегистрацияВНалоговомОргане = ЗарплатаКадры.РегистрацияВНалоговомОргане(ДанныеОрганизации.Организация, ДатаОтчета);
		КодыОрганизацииИзРегистрации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РегистрацияВНалоговомОргане,"КодПоОКАТО");
		УстановитьПривилегированныйРежим(Ложь);
		
		Если ДатаОтчета >= Дата(2017, 1, 1) Тогда 
			КодыОрганизации.КодОКВЭД = КодыОрганизации.КодОКВЭД2;
			КодыОрганизации.НаименованиеОКВЭД = КодыОрганизации.НаименованиеОКВЭД2;
		КонецЕсли;
		
		ЗаполнитьЗначенияСвойств(ОбластьКарточка.Параметры, ПараметрыЗаголовка);
		ЗаполнитьЗначенияСвойств(ОбластьКарточка.Параметры, КодыОрганизации);
		ЗаполнитьЗначенияСвойств(ОбластьКарточка.Параметры, КодыОрганизацииИзРегистрации);
		ЗаполнитьЗначенияСвойств(ОбластьКарточка.Параметры, ДанныеОрганизации);
		
		ТелефоныПодписантов = ТелефоныПодписантов(ПараметрыЗаголовка);
		
		Если ЗначениеЗаполнено(ПараметрыЗаголовка.Руководитель) Тогда 
			ТелефонРуководителя = ТелефоныПодписантов[ПараметрыЗаголовка.Руководитель];
			Если ЗначениеЗаполнено(ТелефонРуководителя) Тогда 
				Если ЗначениеЗаполнено(ОбластьКарточка.Параметры.ДолжностьРуководителя) Тогда
					ОбластьКарточка.Параметры.ТелефонФакс = ", " + НСтр("ru='тел'") + ". " + ТелефонРуководителя;
				Иначе
					ОбластьКарточка.Параметры.ТелефонФакс = НСтр("ru='тел'") + ". " + ТелефонРуководителя;
				КонецЕсли; 
			КонецЕсли;
		КонецЕсли;
		
		Если ЗначениеЗаполнено(ПараметрыЗаголовка.ОтветственныйЗаВУР) Тогда 
			ТелефонОтветственногоЗаВУР = ТелефоныПодписантов[ПараметрыЗаголовка.ОтветственныйЗаВУР];
			Если ЗначениеЗаполнено(ТелефонОтветственногоЗаВУР) Тогда 
				ОбластьКарточка.Параметры.ТелефонОтветственногоЗаВУР = ", " + НСтр("ru='тел'") + ". " + ТелефонОтветственногоЗаВУР;
			КонецЕсли;
		КонецЕсли;
		
		ОбластьКарточка.Параметры.ЕстьЗабронированные = ЗначениеЗаполнено(ДанныеОрганизации.ВсегоВЗапасеЗабронировано);
		
		ЗаполнитьЧисленностьРаботающихГраждан(ОбластьКарточка, ДатаОтчета, ДанныеОрганизации.Организация, НастройкиОтчета);
		
		Если ПечатьНаДвухЛистах Тогда 
			Если ДатаОтчета >= '20170101' Тогда 
				ОбластьСтраница1 = ОбластьКарточка.ПолучитьОбласть("R1C1:R44C12");
				ОбластьСтраница2 = ОбластьКарточка.ПолучитьОбласть("R1C13:R44C27");
			Иначе 
				ОбластьСтраница1 = ОбластьКарточка.ПолучитьОбласть("R1C1:R42C12");
				ОбластьСтраница2 = ОбластьКарточка.ПолучитьОбласть("R1C13:R42C28");
			КонецЕсли;
			
			ОбластьСтраница1.Область().СоздатьФорматСтрок();
			ОбластьСтраница2.Область().СоздатьФорматСтрок();
			
			ДокументРезультат.Вывести(ОбластьСтраница1);
			ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
			ДокументРезультат.Вывести(ОбластьСтраница2);
		Иначе 	
			ДокументРезультат.Вывести(ОбластьКарточка);
		КонецЕсли;
			
	КонецЦикла;
	
КонецПроцедуры

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

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету ИзвещениеОПриемеУвольнении.

Процедура ВывестиМакетИзвещениеОПриемеУвольнении(ДокументРезультат, РезультатКомпоновки, ДатаОтчета, НастройкиОтчета)
	
	Если ДатаОтчета >= '20230805' Тогда
		ВывестиМакетИзвещениеОПриемеУвольнении2023(ДокументРезультат, РезультатКомпоновки, ДатаОтчета, НастройкиОтчета);
		Возврат;
	ИначеЕсли ДатаОтчета >= '20200218' Тогда
		ВывестиМакетИзвещениеОПриемеУвольнении2020(ДокументРезультат, РезультатКомпоновки, ДатаОтчета, НастройкиОтчета);
		Возврат;
	КонецЕсли;
	
	ДанныеОтчета = РезультатКомпоновки.ДанныеОтчета;
	ИдентификаторыМакета = РезультатКомпоновки.ИдентификаторыМакета;
	
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	
	Макет = ?(ДатаОтчета < '20170801',
		УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_ИзвещениеОПриемеУвольнении"),
		УправлениеПечатью.МакетПечатнойФормы("Отчет.ВоинскийУчетОбщий.ПФ_MXL_ИзвещениеОПриемеУвольнении2017"));
		
	ВоенкоматПриПриеме 				= Макет.ПолучитьОбласть("ВоенкоматПриПриеме");
	АдресВоенкоматаПриПриеме 		= Макет.ПолучитьОбласть("АдресВоенкоматаПриПриеме");
	Прием 							= Макет.ПолучитьОбласть("Прием");
	ВоенкоматПриУвольнении 			= Макет.ПолучитьОбласть("ВоенкоматПриУвольнении");
	АдресВоенкоматаПриУвольнении 	= Макет.ПолучитьОбласть("АдресВоенкоматаПриУвольнении");
	Увольнение 						= Макет.ПолучитьОбласть("Увольнение");
	ПустаяСтрока 					= Макет.ПолучитьОбласть("ПустаяСтрока");
	
	НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();
	
	Для Каждого ТекСтрока Из ДанныеОтчета.Строки Цикл 
		
		ПараметрыЗаголовка = ПараметрыЗаголовкаСтруктура(ДатаОтчета, ТекСтрока.Организация, ТекСтрока.Военкомат);
	
		Если ТекСтрока.ДатаПриема <= ТекСтрока.ПараметрыДанныхПериод
			И ТекСтрока.ДатаПриема >= ТекСтрока.ПараметрыДанныхНачалоПериода Тогда
			
			Если ДокументРезультат.ВысотаТаблицы > 0 Тогда
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
			КонецЕсли;
			
			ДанныеПользовательскихПолейСсылки = ЗарплатаКадрыОтчеты.ЗначенияЗаполненияПользовательскихПолей(ИдентификаторыМакета, ТекСтрока);
			
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(ВоенкоматПриПриеме, ТекСтрока, ДанныеПользовательскихПолейСсылки);
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(АдресВоенкоматаПриПриеме, ТекСтрока, ДанныеПользовательскихПолейСсылки);
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(Прием, ПараметрыЗаголовка, ТекСтрока, ДанныеПользовательскихПолейСсылки);
			
			Если НастройкиПечатныхФорм.УдалятьПрефиксыОрганизацииИИБИзНомеровКадровыхПриказов Тогда
				Прием.Параметры.НомерПриказаОПриеме = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ТекСтрока.НомерПриказаОПриеме, Истина, Истина);
			КонецЕсли;
			
			ДокументРезультат.Вывести(ВоенкоматПриПриеме);
			
			Если ЗначениеЗаполнено(ТекСтрока.ВоенкоматПриПриемеАдрес) Тогда 
				ДокументРезультат.Вывести(АдресВоенкоматаПриПриеме);
			Иначе 
				ДокументРезультат.Вывести(ПустаяСтрока);
			КонецЕсли;
			
			ДокументРезультат.Вывести(Прием);
			
		КонецЕсли;
		
		Если ЗначениеЗаполнено(ТекСтрока.ДатаУвольнения) И ТекСтрока.ДатаУвольнения <= ТекСтрока.ПараметрыДанныхПериод 
			И ТекСтрока.ДатаУвольнения >= ТекСтрока.ПараметрыДанныхНачалоПериода Тогда
			
			Если ДокументРезультат.ВысотаТаблицы > 0 Тогда
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
			КонецЕсли;
			
			ДанныеПользовательскихПолейСсылки = ЗарплатаКадрыОтчеты.ЗначенияЗаполненияПользовательскихПолей(ИдентификаторыМакета, ТекСтрока);
			
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(ВоенкоматПриУвольнении, ТекСтрока, ДанныеПользовательскихПолейСсылки);
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(АдресВоенкоматаПриУвольнении, ТекСтрока, ДанныеПользовательскихПолейСсылки);
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(Увольнение, ПараметрыЗаголовка, ТекСтрока, ДанныеПользовательскихПолейСсылки);
			
			Если НастройкиПечатныхФорм.УдалятьПрефиксыОрганизацииИИБИзНомеровКадровыхПриказов Тогда
				Увольнение.Параметры.НомерПриказаОбУвольнении = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ТекСтрока.НомерПриказаОбУвольнении, Истина, Истина);
			КонецЕсли;
			
			ДокументРезультат.Вывести(ВоенкоматПриУвольнении);
			
			Если ЗначениеЗаполнено(ТекСтрока.ВоенкоматАдрес) Тогда 
				ДокументРезультат.Вывести(АдресВоенкоматаПриУвольнении);
			Иначе 
				ДокументРезультат.Вывести(ПустаяСтрока);
			КонецЕсли;
			
			ДокументРезультат.Вывести(Увольнение);
			
		КонецЕсли;	
			
	КонецЦикла;	
	
КонецПроцедуры

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

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

////////////////////////////////////////////////////////////////////////////////
// Функции формирования отчета по макету КарточкаГражданинаПодлежащегоВоинскомуУчету.

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

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

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

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

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

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

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

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

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

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

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

КонецФункции

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

Процедура ОчиститьОбласть(ОбластьМакета)
	
	Для Счетчик = 0 По ОбластьМакета.Параметры.Количество() - 1 Цикл
		ОбластьМакета.Параметры[Счетчик] = ""
	КонецЦикла;
	
КонецПроцедуры

Функция ПредставлениеМестаРождения(Знач МестоРожденияСтрокой) Экспорт  
	
	Возврат ВоинскийУчет.ПредставлениеМестаРождения(МестоРожденияСтрокой);

КонецФункции

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

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

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