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