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