#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Функция СторнироватьПоУчетам(Движения, Регистратор, ИсправленныйДокумент, СтруктураВидовУчета, ДополнительныеПараметры) Экспорт
РеквизитыДляПроведения = ДополнительныеПараметры.РеквизитыДляПроведения;
Сотрудники = Новый Массив;
Для Каждого КлючЗначение Из РеквизитыДляПроведения.СотрудникиСИсправленнымиДанными Цикл
Сотрудники.Добавить(КлючЗначение.Ключ);
КонецЦикла;
УчетРабочегоВремени.ЗарегистрироватьСторноЗаписиПоДокументу(Движения, РеквизитыДляПроведения.ПериодРегистрации, ИсправленныйДокумент, Сотрудники);
Возврат Истина;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ДляВсехСтрок( ЗначениеРазрешено(ФизическиеЛица.ФизическоеЛицо, NULL КАК ИСТИНА)
| ) И ЗначениеРазрешено(Организация)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаОбъекта"
И (ПолучитьФункциональнуюОпцию("ИспользоватьОбособленныеТерритории")
Или ПолучитьФункциональнуюОпцию("ИспользоватьОсобыеУсловияТрудаВОрганизации")
Или ПолучитьФункциональнуюОпцию("ИспользоватьСменыРаботыСотрудников")) Тогда
ВыбраннаяФорма = "ФормаДокументаАльтернативная";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область ОбработчикиПравилРегистрации
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры
#КонецОбласти
Функция ДополнительныеДанныеДляПечати() Экспорт
ДополнительныеДанныеДляПечати = Новый Структура;
ДополнительныеДанныеДляПечати.Вставить("НомерДокумента");
ДополнительныеДанныеДляПечати.Вставить("НомерКорректировки");
ДополнительныеДанныеДляПечати.Вставить("ОтветственныйИсполнитель");
ДополнительныеДанныеДляПечати.Вставить("ДолжностьОтветственногоИсполнителя");
ДополнительныеДанныеДляПечати.Вставить("ДолжностьКадровика");
ДополнительныеДанныеДляПечати.Вставить("ФИОКадровика");
ДополнительныеДанныеДляПечати.Вставить("ИсполнительОтБухгалтерии");
ДополнительныеДанныеДляПечати.Вставить("ДолжностьИсполнителяОтБухгалтерии");
ДополнительныеДанныеДляПечати.Вставить("ФИОИсполнителяОтБухгалтерии");
Возврат ДополнительныеДанныеДляПечати;
КонецФункции
Функция ОписаниеСоставаОбъекта() Экспорт
МетаданныеДокумента = Метаданные.Документы.ТабельУчетаРабочегоВремени;
Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаПоМетаданнымФизическиеЛицаВТабличныхЧастях(МетаданныеДокумента);
КонецФункции
Функция СвойстваИсправляемогоДокумента(ДокументСсылка) Экспорт
Реквизиты = ИсправлениеДокументовЗарплатаКадры.РеквизитыИсправляемогоРасчетногоДокумента();
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты);
КонецФункции
Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
Возврат ИсправлениеДокументовЗарплатаКадры.ПараметрыИсправляемогоДокумента(ДокументСсылка,
СвойстваИсправляемогоДокумента(ДокументСсылка));
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ПроцедурыЗаполнения
Функция ВыборкаДанныхОВремени(ДанныеТабеля, СписокСотрудников = Неопределено, ЗаполнятьТерриторииУсловияТруда = Ложь) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ПараметрыЗаполнения = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();
ПараметрыЗаполнения.ИмяВТСотрудники = "ВТСотрудники";
ПараметрыЗаполнения.ИмяВТРезультат = "ВТДанныеУчетаВремениИСостоянийСотрудников";
ПараметрыЗаполнения.РассчитыватьПлановоеВремя = Ложь;
ПараметрыЗаполнения.Организация = ДанныеТабеля.Организация;
ПараметрыЗаполнения.ДатаАктуальности = НачалоМесяца(ДанныеТабеля.ПериодРегистрации);
ПараметрыЗаполнения.ДатаНачала = ДанныеТабеля.ДатаНачалаПериода;
ПараметрыЗаполнения.ДатаОкончания = ДанныеТабеля.ДатаОкончанияПериода;
ПараметрыЗаполнения.ДатаНачала = ДанныеТабеля.ДатаНачалаПериода;
ПараметрыЗаполнения.ДатаОкончания = ДанныеТабеля.ДатаОкончанияПериода;
ПараметрыЗаполнения.МесяцДатаНачала = НачалоМесяца(ДанныеТабеля.ДатаНачалаПериода);
ПараметрыЗаполнения.МесяцДатаОкончания = КонецМесяца(ДанныеТабеля.ДатаОкончанияПериода);
ПараметрыЗаполнения.ПолучатьУжеРассчитанныеДанные = Ложь;
ПараметрыЗаполнения.ПересчитыватьФактическоеВремя = Истина;
ПараметрыЗаполнения.УчитыватьТабельныеДанныеОТерриториях = Ложь;
ПараметрыЗаполнения.ОтноситьПереходящуюЧастьСменыКДнюНачала = Истина;
ПараметрыЗаполнения.ПолучатьУсловияТрудаИТерритории = ЗаполнятьТерриторииУсловияТруда;
Если ЗначениеЗаполнено(ДанныеТабеля.Подразделение) Тогда
ПараметрыЗаполнения.Подразделение = ДанныеТабеля.Подразделение;
КонецЕсли;
ПараметрыЗаполнения.НеучитываемыеРегистраторы.Добавить(ДанныеТабеля.Ссылка);
Если ЗначениеЗаполнено(ДанныеТабеля.ИсправленныйДокумент) Тогда
ПараметрыЗаполнения.НеучитываемыеРегистраторы.Добавить(ДанныеТабеля.ИсправленныйДокумент);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыЗаполнения.НеучитываемыеРегистраторы,
ИсправлениеДокументовЗарплатаКадры.ПолучитьДокументыЦепочкиИсправлений(ДанныеТабеля.ИсправленныйДокумент));
КонецЕсли;
Запрос.УстановитьПараметр("ДатаНачала", ПараметрыЗаполнения.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ПараметрыЗаполнения.ДатаОкончания);
Запрос.УстановитьПараметр("Месяц", НачалоМесяца(ПараметрыЗаполнения.ДатаНачала));
Если СписокСотрудников = Неопределено Тогда
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = ДанныеТабеля.Организация;
ПараметрыПолученияСотрудников.НачалоПериода = ДанныеТабеля.ДатаНачалаПериода;
ПараметрыПолученияСотрудников.ОкончаниеПериода = ДанныеТабеля.ДатаОкончанияПериода;
Если ЗначениеЗаполнено(ДанныеТабеля.Подразделение) Тогда
ПараметрыПолученияСотрудников.Подразделение = ДанныеТабеля.Подразделение;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьПодработки") Тогда
ПараметрыПолученияСотрудников.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.ДобавитьОтборыПоВидуДоговора(ПараметрыПолученияСотрудников.Отборы, Истина);
КонецЕсли;
КадровыйУчетРасширенный.ПрименитьОтборПоФункциональнойОпцииВыполнятьРасчетЗарплатыПоПодразделениям(ПараметрыПолученияСотрудников);
КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников, "ВТСотрудникиОрганизации");
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизации.Сотрудник КАК Сотрудник,
| &Месяц КАК Месяц,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| ВТСотрудникиОрганизации КАК СотрудникиОрганизации";
Запрос.Выполнить();
Иначе
ТаблицаСотрудников = Новый ТаблицаЗначений;
ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудников.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудников.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудников.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
Для каждого Сотрудник Из СписокСотрудников Цикл
СтрокаТаблицы = ТаблицаСотрудников.Добавить();
СтрокаТаблицы.Сотрудник = Сотрудник;
СтрокаТаблицы.Месяц = НачалоМесяца(ДанныеТабеля.ДатаНачалаПериода);
СтрокаТаблицы.ДатаНачала = ДанныеТабеля.ДатаНачалаПериода;
СтрокаТаблицы.ДатаОкончания = ДанныеТабеля.ДатаОкончанияПериода;
КонецЦикла;
Запрос.УстановитьПараметр("ТаблицаСотрудников", ТаблицаСотрудников);
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСотрудников.Сотрудник КАК Сотрудник,
| ТаблицаСотрудников.Месяц КАК Месяц,
| ТаблицаСотрудников.ДатаНачала КАК ДатаНачала,
| ТаблицаСотрудников.ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудников КАК ТаблицаСотрудников";
Запрос.Выполнить();
КонецЕсли;
ИмяВТПериодыУточненные = УточнитьПериодыЗаполненияПоСотрудникам(Запрос.МенеджерВременныхТаблиц, НачалоМесяца(ДанныеТабеля.ПериодРегистрации), ПараметрыЗаполнения.НеучитываемыеРегистраторы);
ПараметрыЗаполнения.ИмяВТСотрудники = ИмяВТПериодыУточненные;
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыЗаполнения);
Запрос.УстановитьПараметр("Явка", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка"));
Запрос.УстановитьПараметр("ВечерниеЧасы", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаВечерниеЧасы"));
Запрос.УстановитьПараметр("НочныеЧасы", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы"));
Запрос.УстановитьПараметр("Сверхурочно", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Сверхурочные"));
Запрос.УстановитьПараметр("РабочееВремя", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя"));
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КОНЕЦПЕРИОДА(ДанныеУчетаВремениИСостоянийСотрудников.Дата, МЕСЯЦ) КАК Период,
| ДанныеУчетаВремениИСостоянийСотрудников.Сотрудник
|ПОМЕСТИТЬ ВТСотрудникиСПериодомКонцаМесяца
|ИЗ
| ВТДанныеУчетаВремениИСостоянийСотрудников КАК ДанныеУчетаВремениИСостоянийСотрудников
|ГДЕ
| ДанныеУчетаВремениИСостоянийСотрудников.ВидУчетаВремени <> &РабочееВремя";
Запрос.Выполнить();
ОписательТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиСПериодомКонцаМесяца");
ОписательТаблиц.ИмяВТКадровыеДанныеСотрудников = "ВТКадровыеДанныеСотрудниковНаКонецМесяца";
КадровыеДанные = "";
ЗарплатаКадры.ДополнитьКадровымиДаннымиНастройкиПорядкаСписка(КадровыеДанные);
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательТаблиц, Истина, КадровыеДанные);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеУчетаВремениИСостоянийСотрудников.Сотрудник КАК Сотрудник,
| ДанныеУчетаВремениИСостоянийСотрудников.Дата КАК Дата,
| ДанныеУчетаВремениИСостоянийСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
| ДанныеУчетаВремениИСостоянийСотрудников.Дни КАК Дни,
| ДанныеУчетаВремениИСостоянийСотрудников.Часы КАК Часы,
| ДанныеУчетаВремениИСостоянийСотрудников.НормаЧасов,
| ДанныеУчетаВремениИСостоянийСотрудников.Смена КАК Смена,
| ДанныеУчетаВремениИСостоянийСотрудников.ПереходящаяЧастьПредыдущейСмены КАК ПереходящаяЧастьПредыдущейСмены,
| ДанныеУчетаВремениИСостоянийСотрудников.ПереходящаяЧастьТекущейСмены КАК ПереходящаяЧастьТекущейСмены,
| ДанныеУчетаВремениИСостоянийСотрудников.ПереходящаяЧастьПредыдущейСмены
| ИЛИ ДанныеУчетаВремениИСостоянийСотрудников.ПереходящаяЧастьТекущейСмены КАК ПереходящаяЧастьСмены,
| ВЫБОР
| КОГДА ОписаниеВидовВремени.Ссылка = &Явка
| ТОГДА 1
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &Явка
| ТОГДА 2
| КОГДА ОписаниеВидовВремени.Ссылка = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ОписаниеВидовВремени.Ссылка = &НочныеЧасы
| ТОГДА 5
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &НочныеЧасы
| ТОГДА 6
| КОГДА ОписаниеВидовВремени.Ссылка = &Сверхурочно
| ТОГДА 7
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &Сверхурочно
| ТОГДА 8
| ИНАЧЕ 9
| КОНЕЦ КАК ПриоритетВидаВремени,
| ДанныеУчетаВремениИСостоянийСотрудников.Территория КАК Территория,
| ДанныеУчетаВремениИСостоянийСотрудников.УсловияТруда КАК УсловияТруда
|ИЗ
| ВТДанныеУчетаВремениИСостоянийСотрудников КАК ДанныеУчетаВремениИСостоянийСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыИспользованияРабочегоВремени КАК ОписаниеВидовВремени
| ПО ДанныеУчетаВремениИСостоянийСотрудников.ВидУчетаВремени = ОписаниеВидовВремени.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудниковНаКонецМесяца КАК КадровыеДанныеСотрудниковНаКонецМесяца
| ПО ДанныеУчетаВремениИСостоянийСотрудников.Сотрудник = КадровыеДанныеСотрудниковНаКонецМесяца.Сотрудник
| И (КОНЕЦПЕРИОДА(ДанныеУчетаВремениИСостоянийСотрудников.Дата, МЕСЯЦ) = КадровыеДанныеСотрудниковНаКонецМесяца.Период)
|ГДЕ
| ДанныеУчетаВремениИСостоянийСотрудников.ВидУчетаВремени <> &РабочееВремя
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Дата,
| ПриоритетВидаВремени,
| ОписаниеВидовВремени.Наименование,
| ВидУчетаВремени,
| Территория,
| УсловияТруда";
ПсевдонимыТаблиц = Новый Соответствие;
ПсевдонимыТаблиц.Вставить("Справочник.ПодразделенияОрганизаций", "КадровыеДанныеСотрудниковНаКонецМесяца");
ПсевдонимыТаблиц.Вставить("Справочник.Должности", "КадровыеДанныеСотрудниковНаКонецМесяца");
ПсевдонимыТаблиц.Вставить("Справочник.Сотрудники", "КадровыеДанныеСотрудниковНаКонецМесяца");
ЗарплатаКадры.ДополнитьТекстЗапросаУпорядочиваниемСотрудников(Запрос, ПсевдонимыТаблиц);
Возврат Запрос.Выполнить().Выбрать();
КонецФункции
Функция УточнитьПериодыЗаполненияПоСотрудникам(МенеджерВременныхТаблиц, ПериодРегистрации, ИсключаемыеРегистраторы = Неопределено)
ПериодыЗарегистрированныхДанныхУчетаВремени = УчетРабочегоВремениРасширенный.ПериодыЗарегистрированныхДанныхУчетаВремени(
МенеджерВременныхТаблиц,
"ВТСотрудники",
ПериодРегистрации,
Перечисления.ВидыДанныхУчетаВремениСотрудников.ДанныеТабельногоУчета,
ИсключаемыеРегистраторы);
Если ПериодыЗарегистрированныхДанныхУчетаВремени.Количество() = 0 Тогда
Возврат "ВТСотрудники";
КонецЕсли;
ПериодыЗарегистрированныхДанныхУчетаВремени.Сортировать("Сотрудник, ДатаНачала", Новый СравнениеЗначений);
УточненныеПериоды = Новый ТаблицаЗначений;
УточненныеПериоды.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
УточненныеПериоды.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
УточненныеПериоды.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
ПредыдущаяСтрока = Неопределено;
ДатаНачалаОчередногоИнтервала = Неопределено;
Для Каждого ЗарегистрированныйПериод Из ПериодыЗарегистрированныхДанныхУчетаВремени Цикл
Если ПредыдущаяСтрока = Неопределено Или ЗарегистрированныйПериод.Сотрудник <> ПредыдущаяСтрока.Сотрудник Тогда
Если ПредыдущаяСтрока <> Неопределено
И ДатаНачалаОчередногоИнтервала <= ПредыдущаяСтрока.ДатаОкончанияИсходная Тогда
УточненныйПериод = УточненныеПериоды.Добавить();
УточненныйПериод.Сотрудник = ПредыдущаяСтрока.Сотрудник;
УточненныйПериод.ДатаНачала = ДатаНачалаОчередногоИнтервала;
УточненныйПериод.ДатаОкончания = ПредыдущаяСтрока.ДатаОкончанияИсходная;
КонецЕсли;
ДатаНачалаОчередногоИнтервала = ЗарегистрированныйПериод.ДатаНачалаИсходная;
КонецЕсли;
Если ДатаНачалаОчередногоИнтервала < НачалоДня(ЗарегистрированныйПериод.ДатаНачала) Тогда
УточненныйПериод = УточненныеПериоды.Добавить();
УточненныйПериод.Сотрудник = ЗарегистрированныйПериод.Сотрудник;
УточненныйПериод.ДатаНачала = ДатаНачалаОчередногоИнтервала;
УточненныйПериод.ДатаОкончания = ЗарегистрированныйПериод.ДатаНачала - 86400;
КонецЕсли;
ДатаНачалаОчередногоИнтервала = ЗарегистрированныйПериод.ДатаОкончания + 86400;
ПредыдущаяСтрока = ЗарегистрированныйПериод;
КонецЦикла;
Если ПредыдущаяСтрока <> Неопределено
И ДатаНачалаОчередногоИнтервала <= ПредыдущаяСтрока.ДатаОкончанияИсходная Тогда
УточненныйПериод = УточненныеПериоды.Добавить();
УточненныйПериод.Сотрудник = ПредыдущаяСтрока.Сотрудник;
УточненныйПериод.ДатаНачала = ДатаНачалаОчередногоИнтервала;
УточненныйПериод.ДатаОкончания = ПредыдущаяСтрока.ДатаОкончанияИсходная;
КонецЕсли;
ЗарплатаКадры.СоздатьВТПоТаблицеЗначений(МенеджерВременныхТаблиц, УточненныеПериоды, "ВТУточненныеПериоды");
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СотрудникиСУточненнымиПериодами", ПериодыЗарегистрированныхДанныхУчетаВремени.ВыгрузитьКолонку("Сотрудник"));
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Сотрудник КАК Сотрудник,
| Сотрудники.ДатаНачала КАК ДатаНачала,
| Сотрудники.ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудникиПериодыУточненные
|ИЗ
| ВТСотрудники КАК Сотрудники
|ГДЕ
| НЕ Сотрудники.Сотрудник В (&СотрудникиСУточненнымиПериодами)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| УточненныеПериоды.Сотрудник,
| УточненныеПериоды.ДатаНачала,
| УточненныеПериоды.ДатаОкончания
|ИЗ
| ВТУточненныеПериоды КАК УточненныеПериоды";
Запрос.Выполнить();
Возврат "ВТСотрудникиПериодыУточненные";
КонецФункции
Функция ТаблицаДанныхДляЗаполнения(ДанныеТабеля, СписокСотрудников = Неопределено) Экспорт
ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Для Сч = 1 По 31 Цикл
ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени" + Сч, Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
ТаблицаДанныхОВремени.Колонки.Добавить("Территория" + Сч, Новый ОписаниеТипов("СправочникСсылка.ТерриторииВыполненияРабот"));
ТаблицаДанныхОВремени.Колонки.Добавить("УсловияТруда" + Сч, Новый ОписаниеТипов("СправочникСсылка.УсловияТруда"));
ТаблицаДанныхОВремени.Колонки.Добавить("Часов" + Сч, Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("ПереходящаяЧастьСмены" + Сч, Новый ОписаниеТипов("Булево"));
КонецЦикла;
ТаблицаСмен = Новый ТаблицаЗначений;
ТаблицаСмен.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Для НомерДня = 1 По 31 Цикл
ТаблицаСмен.Колонки.Добавить("Смена" + НомерДня, Новый ОписаниеТипов("СправочникСсылка.СменыРаботыСотрудников"));
ТаблицаСмен.Колонки.Добавить("ОтражатьЧасыВДеньНачалаСмены" + НомерДня, Новый ОписаниеТипов("Булево"));
КонецЦикла;
ПараметрыПолученияФО = Новый Структура("Организация", ДанныеТабеля.Организация);
ИспользуютсяТерритории = ПолучитьФункциональнуюОпцию("ИспользоватьОбособленныеТерритории", ПараметрыПолученияФО);
ИспользуютсяУсловияТруда = ПолучитьФункциональнуюОпцию("ИспользоватьОсобыеУсловияТрудаВОрганизации", ПараметрыПолученияФО);
ЗаполнятьТерриторииИУсловия = ИспользуютсяТерритории Или ИспользуютсяУсловияТруда;
Выборка = ВыборкаДанныхОВремени(ДанныеТабеля, СписокСотрудников, ЗаполнятьТерриторииИУсловия);
Пока Выборка.СледующийПоЗначениюПоля("Сотрудник") Цикл
СтрокиДанныхПоСотруднику = Новый Массив;
СтрокаТаблицыСмен = Неопределено;
Пока Выборка.СледующийПоЗначениюПоля("Дата") Цикл
Постфикс = Строка(День(Выборка.Дата));
КоличествоКомбинацийЗначенийИзмерений = 0;
ТекущаяСмена = Неопределено;
ОтражатьЧасыВДеньНачалаСмены = Ложь;
Пока Выборка.Следующий() Цикл
КоличествоКомбинацийЗначенийИзмерений = КоличествоКомбинацийЗначенийИзмерений + 1;
Если ЗначениеЗаполнено(Выборка.Смена) Тогда
ТекущаяСмена = Выборка.Смена;
КонецЕсли;
Если Выборка.ПереходящаяЧастьСмены И Выборка.ПереходящаяЧастьТекущейСмены Тогда
ОтражатьЧасыВДеньНачалаСмены = Истина;
КонецЕсли;
СтрокаДанныхОВремени = СтрокаТаблицыДанныхДляЗаполнения(
ТаблицаДанныхОВремени,
Выборка.Сотрудник,
СтрокиДанныхПоСотруднику,
КоличествоКомбинацийЗначенийИзмерений);
СтрокаДанныхОВремени["ВидВремени" + Постфикс] = Выборка.ВидУчетаВремени;
СтрокаДанныхОВремени["Территория" + Постфикс] = Выборка.Территория;
СтрокаДанныхОВремени["УсловияТруда" + Постфикс] = Выборка.УсловияТруда;
СтрокаДанныхОВремени["Часов" + Постфикс] = Выборка.Часы;
СтрокаДанныхОВремени["ПереходящаяЧастьСмены" + Постфикс] = Выборка.ПереходящаяЧастьСмены;
КонецЦикла;
Если ЗначениеЗаполнено(ТекущаяСмена) Или ОтражатьЧасыВДеньНачалаСмены Тогда
Если СтрокаТаблицыСмен = Неопределено Тогда
СтрокаТаблицыСмен = ТаблицаСмен.Добавить();
СтрокаТаблицыСмен.Сотрудник = Выборка.Сотрудник;
КонецЕсли;
СтрокаТаблицыСмен["Смена" + Постфикс] = ТекущаяСмена;
СтрокаТаблицыСмен["ОтражатьЧасыВДеньНачалаСмены" + Постфикс] = ОтражатьЧасыВДеньНачалаСмены;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ДанныеДляЗаполнения = Новый Структура("ДанныеОВремени, Смены", ТаблицаДанныхОВремени, ТаблицаСмен);
Возврат ДанныеДляЗаполнения;
КонецФункции
Функция СтрокаТаблицыДанныхДляЗаполнения(ТаблицаДанных, Сотрудник, СтрокиДанныхПоСотруднику, КоличествоКомбинацийЗначенийИзмерений)
Если КоличествоКомбинацийЗначенийИзмерений > СтрокиДанныхПоСотруднику.Количество() Тогда
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Сотрудник = Сотрудник;
СтрокиДанныхПоСотруднику.Добавить(СтрокаДанных);
Иначе
СтрокаДанных = СтрокиДанныхПоСотруднику[КоличествоКомбинацийЗначенийИзмерений - 1];
КонецЕсли;
Возврат СтрокаДанных;
КонецФункции
Функция ДоступныеДляВводаВидыВремени() Экспорт
ДоступныеДляВводаВидыВремени = Новый Соответствие;
ВидВремениРабочееВремя = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя");
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("РабочееВремя", ВидВремениРабочееВремя);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВидыИспользованияРабочегоВремени.ОсновноеВремя
|ИЗ
| Справочник.ВидыИспользованияРабочегоВремени КАК ВидыИспользованияРабочегоВремени
|ГДЕ
| ВидыИспользованияРабочегоВремени.Ссылка <> &РабочееВремя";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДоступныеДляВводаВидыВремени.Вставить(Выборка.ОсновноеВремя, Истина);
КонецЦикла;
Возврат ДоступныеДляВводаВидыВремени;
КонецФункции
#КонецОбласти
#Область ПроцедурыПечатиДокумента
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "ПФ_MXL_УнифицированнаяФормаТ13";
КомандаПечати.Представление = НСтр("ru = 'Т-13'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ПутьКПодписантам", "ФизическиеЛица.ФизическоеЛицо");
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "УнифицированнаяФорма0504421";
КомандаПечати.Представление = НСтр("ru = 'Табель учета рабочего времени (0504421) до 2015 года'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ФункциональныеОпции = "РаботаВБюджетномУчреждении";
КомандаПечати.Порядок = 40;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "УнифицированнаяФорма0504421с2015";
КомандаПечати.Представление = НСтр("ru = 'Табель учета рабочего времени (0504421)'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ФункциональныеОпции = "РаботаВБюджетномУчреждении";
КомандаПечати.Порядок = 30;
КомандаПечати.ДополнительныеПараметры.Вставить("ПутьКПодписантам", "ФизическиеЛица.ФизическоеЛицо");
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм,
"ПФ_MXL_УнифицированнаяФормаТ13") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
"ПФ_MXL_УнифицированнаяФормаТ13",
"Табель учета рабочего времени (Т-13)",
СформироватьПечатнуюФормуТ13(МассивОбъектов,
ОбъектыПечати));
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм,
"УнифицированнаяФорма0504421") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
"УнифицированнаяФорма0504421",
"Табель учета рабочего времени (0504421)",
ПечатнаяФорма0504421(МассивОбъектов,
ОбъектыПечати,
"УнифицированнаяФорма0504421"));
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм,
"УнифицированнаяФорма0504421с2015") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
"УнифицированнаяФорма0504421с2015",
"Табель учета рабочего времени (0504421) с 2015",
ПечатнаяФорма0504421(МассивОбъектов,
ОбъектыПечати,
"УнифицированнаяФорма0504421с2015"));
КонецЕсли;
КонецПроцедуры
Функция СформироватьЗапросДляПечати(МассивОбъектов)
ТекстЗапроса =
"ВЫБРАТЬ
| ТабельУчетаРабочегоВремениДанныеОВремени.Сотрудник КАК Сотрудник,
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка КАК Ссылка,
| МИНИМУМ(ТабельУчетаРабочегоВремениДанныеОВремени.НомерСтроки) КАК НомерСтроки
|ПОМЕСТИТЬ ВТПорядокСотрудниковВДокументах
|ИЗ
| Документ.ТабельУчетаРабочегоВремени.ДанныеОВремени КАК ТабельУчетаРабочегоВремениДанныеОВремени
|ГДЕ
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
| ТабельУчетаРабочегоВремениДанныеОВремени.Сотрудник,
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка
|;
|
|
|ВЫБРАТЬ
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка КАК Ссылка,
| ТабельУчетаРабочегоВремениДанныеОВремени.Сотрудник КАК Сотрудник,
| ТабельУчетаРабочегоВремениДанныеОВремени.Часов1 КАК Часов,
| ТабельУчетаРабочегоВремениДанныеОВремени.ВидВремени1 КАК ВидВремени,
| НАЧАЛОПЕРИОДА(ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка.ДатаНачалаПериода, МЕСЯЦ) КАК Дата,
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка.Дата КАК ДатаДокумента,
| ТабельУчетаРабочегоВремениДанныеОВремени.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ВТДанныеОВремени
|ИЗ
| Документ.ТабельУчетаРабочегоВремени.ДанныеОВремени КАК ТабельУчетаРабочегоВремениДанныеОВремени
|ГДЕ
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка В(&МассивОбъектов)
| И ТабельУчетаРабочегоВремениДанныеОВремени.ВидВремени1 <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ПустаяСсылка)";
ЧастиЗапроса = Новый Массив;
ЧастиЗапроса.Добавить(ТекстЗапроса);
Для Сч = 2 По 31 Цикл
ТекстЗапроса = "
| ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка,
| ТабельУчетаРабочегоВремениДанныеОВремени.Сотрудник,
| ТабельУчетаРабочегоВремениДанныеОВремени.Часов%1,
| ТабельУчетаРабочегоВремениДанныеОВремени.ВидВремени%1,
| ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка.ДатаНачалаПериода, МЕСЯЦ), ДЕНЬ, %2),
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка.Дата КАК ДатаДокумента,
| ТабельУчетаРабочегоВремениДанныеОВремени.НомерСтроки КАК НомерСтроки
|ИЗ
| Документ.ТабельУчетаРабочегоВремени.ДанныеОВремени КАК ТабельУчетаРабочегоВремениДанныеОВремени
|ГДЕ
| ТабельУчетаРабочегоВремениДанныеОВремени.Ссылка В(&МассивОбъектов)
| И ТабельУчетаРабочегоВремениДанныеОВремени.ВидВремени%1 <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ПустаяСсылка)";
ТекстЗапроса = СтрШаблон(ТекстЗапроса, Сч, Сч-1);
ЧастиЗапроса.Добавить(ТекстЗапроса);
КонецЦикла;
ЧастиЗапроса.Добавить(ЗарплатаКадрыОбщиеНаборыДанных.РазделительЗапросов());
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеОВремени.Сотрудник КАК Сотрудник,
| ДанныеОВремени.Дата КАК Период
|ПОМЕСТИТЬ ВТСотрудникиДокументов
|ИЗ
| ВТДанныеОВремени КАК ДанныеОВремени
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДанныеОВремени.Сотрудник,
| ДанныеОВремени.ДатаДокумента
|ИЗ
| ВТДанныеОВремени КАК ДанныеОВремени";
ЧастиЗапроса.Добавить(ТекстЗапроса);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = СтрСоединить(ЧастиЗапроса);
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Выполнить();
ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
Запрос.МенеджерВременныхТаблиц,
"ВТСотрудникиДокументов");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Ложь, "ФамилияИО,ФИОПолные,Должность,ТабельныйНомер");
Запрос.Текст =
"ВЫБРАТЬ
| ТабельУчетаРабочегоВремени.Дата КАК Дата,
| ТабельУчетаРабочегоВремени.ДатаНачалаПериода КАК ДатаНачалаПериода,
| ТабельУчетаРабочегоВремени.ДатаОкончанияПериода КАК ДатаОкончанияПериода,
| ТабельУчетаРабочегоВремени.Номер КАК Номер,
| ТабельУчетаРабочегоВремени.Ссылка КАК Ссылка,
| ТабельУчетаРабочегоВремени.Организация КАК Организация,
| ТабельУчетаРабочегоВремени.Организация.НаименованиеПолное КАК ОрганизацияНаименование,
| ТабельУчетаРабочегоВремени.Подразделение КАК Подразделение,
| ТабельУчетаРабочегоВремени.Подразделение.Наименование КАК ПодразделениеНаименование,
| ТабельУчетаРабочегоВремени.Организация.КодПоОКПО КАК ОрганизацияКодПоОКПО,
| ТабельУчетаРабочегоВремени.Руководитель КАК Руководитель,
| ТабельУчетаРабочегоВремени.ДолжностьРуководителя КАК ДолжностьРуководителя,
| ТабельУчетаРабочегоВремени.РаботникКадровойСлужбы КАК РаботникКадровойСлужбы,
| ТабельУчетаРабочегоВремени.ДолжностьРаботникаКадровойСлужбы КАК ДолжностьРаботникаКадровойСлужбы,
| ТабельУчетаРабочегоВремени.Исполнитель КАК Исполнитель,
| ТабельУчетаРабочегоВремени.ДолжностьИсполнителя КАК ДолжностьИсполнителя,
| ТабельУчетаРабочегоВремени.ИсполнительОтБухгалтерии КАК ИсполнительОтБухгалтерии,
| ТабельУчетаРабочегоВремени.ДолжностьИсполнителяОтБухгалтерии КАК ДолжностьИсполнителяОтБухгалтерии,
| ТабельУчетаРабочегоВремени.Ответственный КАК Ответственный
|ПОМЕСТИТЬ ВТДанныеДокументов
|ИЗ
| Документ.ТабельУчетаРабочегоВремени КАК ТабельУчетаРабочегоВремени
|ГДЕ
| ТабельУчетаРабочегоВремени.Ссылка В(&МассивОбъектов)";
Запрос.Выполнить();
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Истина, "Руководитель,РаботникКадровойСлужбы,Исполнитель,ИсполнительОтБухгалтерии", "ВТДанныеДокументов");
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокументов.Дата КАК Дата,
| ДанныеДокументов.ДатаНачалаПериода КАК ДатаНачалаПериода,
| ДанныеДокументов.ДатаОкончанияПериода КАК ДатаОкончанияПериода,
| ДанныеДокументов.Номер КАК Номер,
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.ОрганизацияНаименование КАК ОрганизацияНаименование,
| ДанныеДокументов.Подразделение КАК Подразделение,
| ДанныеДокументов.ПодразделениеНаименование КАК ПодразделениеНаименование,
| ДанныеДокументов.ОрганизацияКодПоОКПО КАК ОрганизацияКодПоОКПО,
| ФИОРуководителя.РасшифровкаПодписи КАК ФИОРуководителя,
| ДанныеДокументов.ДолжностьРуководителя КАК ДолжностьРуководителя,
| ФИОРаботникаКадровойСлужбы.РасшифровкаПодписи КАК ФИОКадровика,
| ДанныеДокументов.ДолжностьРаботникаКадровойСлужбы КАК ДолжностьКадровика,
| ДанныеДокументов.Исполнитель КАК Исполнитель,
| ФИОИсполнителя.РасшифровкаПодписи КАК ФИООтветственного,
| ДанныеДокументов.ДолжностьИсполнителя КАК ДолжностьОтветственного,
| ДанныеДокументов.Ответственный КАК Ответственный,
| ДанныеДокументов.ИсполнительОтБухгалтерии КАК ИсполнительОтБухгалтерии,
| ФИОИсполнителяОтБухгалтерии.РасшифровкаПодписи КАК ФИОИсполнителяОтБухгалтерии,
| ДанныеДокументов.ДолжностьИсполнителяОтБухгалтерии КАК ДолжностьИсполнителяОтБухгалтерии
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОРуководителя
| ПО ДанныеДокументов.Ссылка = ФИОРуководителя.Ссылка
| И ДанныеДокументов.Руководитель = ФИОРуководителя.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОРаботникаКадровойСлужбы
| ПО ДанныеДокументов.Ссылка = ФИОРаботникаКадровойСлужбы.Ссылка
| И ДанныеДокументов.РаботникКадровойСлужбы = ФИОРаботникаКадровойСлужбы.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОИсполнителя
| ПО ДанныеДокументов.Ссылка = ФИОИсполнителя.Ссылка
| И ДанныеДокументов.Исполнитель = ФИОИсполнителя.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОИсполнителяОтБухгалтерии
| ПО ДанныеДокументов.Ссылка = ФИОИсполнителяОтБухгалтерии.Ссылка
| И ДанныеДокументов.ИсполнительОтБухгалтерии = ФИОИсполнителяОтБухгалтерии.ФизическоеЛицо
|
|УПОРЯДОЧИТЬ ПО
| ДанныеДокументов.Ссылка
|;
|
|
|ВЫБРАТЬ
| ДанныеОВремени.Ссылка КАК Ссылка,
| ДанныеОВремени.Сотрудник КАК Сотрудник,
| ДанныеОВремени.Дата КАК Дата,
| ДанныеОВремени.ВидВремени КАК ВидВремени,
| ДанныеОВремени.Часов КАК Часов,
| ОписаниеВидовВремени.Наименование КАК ВидВремениНаименование,
| ОписаниеВидовВремени.БуквенныйКодБюджетный КАК БуквенныйКодБюджетный,
| ОписаниеВидовВремени.БуквенныйКодБюджетный2009 КАК БуквенныйКодБюджетный2009,
| ОписаниеВидовВремени.БуквенныйКод КАК БуквенныйКод,
| ОписаниеВидовВремени.РабочееВремя КАК РабочееВремя,
| ОписаниеВидовВремени.ОсновноеВремя КАК ОсновноеВремя,
| ВЫБОР
| КОГДА ОписаниеВидовВремени.Ссылка = &Явка
| ТОГДА 1
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &Явка
| ТОГДА 2
| КОГДА ОписаниеВидовВремени.Ссылка = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ОписаниеВидовВремени.Ссылка = &НочныеЧасы
| ТОГДА 5
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &НочныеЧасы
| ТОГДА 6
| КОГДА ОписаниеВидовВремени.Ссылка = &Сверхурочно
| ТОГДА 7
| КОГДА ОписаниеВидовВремени.ОсновноеВремя = &Сверхурочно
| ТОГДА 8
| ИНАЧЕ 9
| КОНЕЦ КАК Приоритет,
| КадровыеДанныеСотрудниковДолжности.Должность КАК ДолжностьСсылка,
| Должности.Наименование КАК Должность,
| ЕСТЬNULL(КадровыеДанныеСотрудниковФИО.ФамилияИО, """") КАК ФамилияИО,
| ЕСТЬNULL(КадровыеДанныеСотрудниковФИО.ФИОПолные, """") КАК ФИОПолные,
| КадровыеДанныеСотрудниковФИО.ФамилияИО КАК ФамилияИО1,
| КадровыеДанныеСотрудниковФИО.ФИОПолные КАК ФИОПолные1,
| КадровыеДанныеСотрудниковФИО.ТабельныйНомер КАК ТабельныйНомер,
| Сотрудники.Наименование КАК СотрудникНаименование,
| ОписаниеВидовВремени.Целосменное КАК Целосменное,
| ВЫБОР
| КОГДА ДанныеОВремени.ВидВремени В (&ВидыВремениСплошнойРегистрации)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ВидВремениСплошнойРегистрации
|ИЗ
| ВТДанныеОВремени КАК ДанныеОВремени
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ДанныеОВремени.Сотрудник = Сотрудники.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыИспользованияРабочегоВремени КАК ОписаниеВидовВремени
| ПО ДанныеОВремени.ВидВремени = ОписаниеВидовВремени.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПорядокСотрудниковВДокументах КАК ПорядокСотрудниковВДокументах
| ПО ДанныеОВремени.Ссылка = ПорядокСотрудниковВДокументах.Ссылка
| И ДанныеОВремени.Сотрудник = ПорядокСотрудниковВДокументах.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудниковДолжности
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности КАК Должности
| ПО КадровыеДанныеСотрудниковДолжности.Должность = Должности.Ссылка
| ПО ДанныеОВремени.Сотрудник = КадровыеДанныеСотрудниковДолжности.Сотрудник
| И ДанныеОВремени.Дата = КадровыеДанныеСотрудниковДолжности.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудниковФИО
| ПО ДанныеОВремени.Сотрудник = КадровыеДанныеСотрудниковФИО.Сотрудник
| И ДанныеОВремени.ДатаДокумента = КадровыеДанныеСотрудниковФИО.Период
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| ПорядокСотрудниковВДокументах.НомерСтроки,
| Сотрудник,
| Должность,
| Дата,
| Приоритет,
| ДанныеОВремени.НомерСтроки";
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Явка", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка"));
Запрос.УстановитьПараметр("ВечерниеЧасы", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаВечерниеЧасы"));
Запрос.УстановитьПараметр("НочныеЧасы", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы"));
Запрос.УстановитьПараметр("Сверхурочно", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Сверхурочные"));
Запрос.УстановитьПараметр("ВидыВремениСплошнойРегистрации", УчетРабочегоВремениРасширенный.ВидыВремениСплошнойРегистрации());
Возврат Запрос.ВыполнитьПакет();
КонецФункции
Функция СформироватьПечатнуюФормуТ13(МассивОбъектов, ОбъектыПечати)
НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();
ВидВремениВыходной = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни");
ВидВремениОплачиваемыеНерабочиеДни =
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УНИФИЦИРОВАННАЯ_ФОРМА_Т_13";
Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_УнифицированнаяФормаТ13");
РезультатыЗапросаПоДокументам = СформироватьЗапросДляПечати(МассивОбъектов);
КоличествоРезультатов = РезультатыЗапросаПоДокументам.Количество();
ВыборкаПоДаннымДокументов = РезультатыЗапросаПоДокументам[КоличествоРезультатов - 2].Выбрать();
ДанныеДокументов = Новый Соответствие;
Пока ВыборкаПоДаннымДокументов.Следующий() Цикл
ДанныеДокумента = Новый Структура("Дата, ДатаНачалаПериода, ДатаОкончанияПериода, Номер, ОрганизацияНаименование, Подразделение, ПодразделениеНаименование, ОрганизацияКодПоОКПО"
+ ",ФИОРуководителя,ДолжностьРуководителя,ФИОКадровика,ДолжностьКадровика,ФИООтветственного,ДолжностьОтветственного");
ЗаполнитьЗначенияСвойств(ДанныеДокумента, ВыборкаПоДаннымДокументов);
ДанныеДокументов.Вставить(ВыборкаПоДаннымДокументов.Ссылка, ДанныеДокумента);
КонецЦикла;
ВыборкаДанныхОВремени = РезультатыЗапросаПоДокументам[КоличествоРезультатов - 1].Выбрать();
ТекущийЛист = Новый ТабличныйДокумент;
ТекущийЛист.АвтоМасштаб = Истина;
ТекущийЛист.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Ссылка") Цикл
Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда
ТекущийЛист = Новый ТабличныйДокумент;
ТекущийЛист.АвтоМасштаб = Истина;
ТекущийЛист.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ДанныеДокумента = ДанныеДокументов[ВыборкаДанныхОВремени.Ссылка];
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапкаПараметры = Новый Структура("ДатаЗаполнения,НомерДокумента,ДатаНачала,ДатаОкончания,ОрганизацияНаименование,СообщениеОНеприменимостиПечатнойФормы,ПодразделениеНаименование,ОрганизацияКодПоОКПО");
ОбластьШапкаПараметры.ДатаЗаполнения = ДанныеДокумента.Дата;
ОбластьШапкаПараметры.НомерДокумента = ДанныеДокумента.Номер;
ОбластьШапкаПараметры.ДатаНачала = ДанныеДокумента.ДатаНачалаПериода;
ОбластьШапкаПараметры.ДатаОкончания = ДанныеДокумента.ДатаОкончанияПериода;
ОбластьШапкаПараметры.ОрганизацияНаименование = ДанныеДокумента.ОрганизацияНаименование;
ОбластьШапкаПараметры.ОрганизацияКодПоОКПО = ДанныеДокумента.ОрганизацияКодПоОКПО;
ОбластьШапкаПараметры.СообщениеОНеприменимостиПечатнойФормы =
ЗарплатаКадры.СообщениеОНеприменимостиПечатнойФормы(
ДанныеДокумента.Дата,
'20150619',
"Приказа Минфина РФ",
'20150330',
"52н");
Если НастройкиПечатныхФорм.ВыводитьПолнуюИерархиюПодразделений И ЗначениеЗаполнено(ДанныеДокумента.Подразделение) Тогда
ОбластьШапкаПараметры.ПодразделениеНаименование = ДанныеДокумента.Подразделение.ПолноеНаименование();
Иначе
ОбластьШапкаПараметры.ПодразделениеНаименование = ДанныеДокумента.ПодразделениеНаименование;
КонецЕсли;
ОбластьШапка.Параметры.Заполнить(ОбластьШапкаПараметры);
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ТабличныйДокумент.Вывести(ОбластьШапка);
ТекущийЛист.Вывести(ОбластьШапка);
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
ТекущийЛист.Вывести(ОбластьШапкаТаблицы);
НомерСотрудника = 0;
ОбластьДанныеОВремени = Макет.ПолучитьОбласть("Строка");
ИменаПараметровДанныеОВремени = "Сотрудник,ТабельныйНомер,НомерПП,ДниПерваяПоловина,ЧасыПерваяПоловина,ДниВтораяПоловина,ЧасыВтораяПоловина,ДниЗаМесяц,ЧасыЗаМесяц";
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Сотрудник") Цикл
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Должность") Цикл
ОтработаноДнейЗаПервуюПоловинуМесяца = 0;
ОтработаноЧасовЗаВторуюПоловинуМесяца = 0;
ОтработаноДнейЗаВторуюПоловинуМесяца = 0;
ОтработаноЧасовЗаПервуюПоловинуМесяца = 0;
ОтработаноДнейЗаМесяц = 0;
ОтработаноЧасовЗаМесяц = 0;
НомерСотрудника = НомерСотрудника + 1;
ОбластьДанныеОВремениПараметры = Новый Структура(ИменаПараметровДанныеОВремени);
Если НомерСотрудника > 1 Тогда
ВывестиДанныеСотрудникаВКоллекцию(ТабличныйДокумент, ТекущийЛист, ОбластьДанныеОВремени, ОбластьШапкаТаблицы);
ОбластьДанныеОВремени = Макет.ПолучитьОбласть("Строка");
КонецЕсли;
Если НастройкиПечатныхФорм.ВыводитьПолныеФИОВСписочныхПечатныхФормах Тогда
ФИО = ВыборкаДанныхОВремени.ФИОПолные;
Иначе
ФИО = ВыборкаДанныхОВремени.ФамилияИО;
КонецЕсли;
ОбластьДанныеОВремениПараметры.Сотрудник = ФИО + "
|(" + ВыборкаДанныхОВремени.Должность + ")";
ОбластьДанныеОВремениПараметры.ТабельныйНомер = ВыборкаДанныхОВремени.ТабельныйНомер;
ОбластьДанныеОВремениПараметры.НомерПП = НомерСотрудника;
ОтклоненияПоСотруднику = Новый ТаблицаЗначений;
ОтклоненияПоСотруднику.Колонки.Добавить("ВидВремени");
ОтклоненияПоСотруднику.Колонки.Добавить("БуквенныйКод");
ОтклоненияПоСотруднику.Колонки.Добавить("Часов");
ОтклоненияПоСотруднику.Колонки.Добавить("Дней");
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Дата") Цикл
ПредставлениеВидовВремени = "";
ЧасыПоВидамВремениСтрока = "";
КоличествоЗаписейНаДату = 0;
ЭтоОтклонение = Ложь;
РабочийДень = Ложь;
Пока ВыборкаДанныхОВремени.Следующий() Цикл
Если Не ВыборкаДанныхОВремени.РабочееВремя
И ВыборкаДанныхОВремени.ВидВремени <> ВидВремениВыходной
И ВыборкаДанныхОВремени.ВидВремени <> ВидВремениОплачиваемыеНерабочиеДни
И ВыборкаДанныхОВремени.ОсновноеВремя <> Справочники.ВидыИспользованияРабочегоВремени.ПустаяСсылка() Тогда
ОтклоненияПоВидуВремени = ОтклоненияПоСотруднику.Добавить();
ОтклоненияПоВидуВремени.ВидВремени = ВыборкаДанныхОВремени.ВидВремени;
ОтклоненияПоВидуВремени.БуквенныйКод = ВыборкаДанныхОВремени.БуквенныйКод;
ОтклоненияПоВидуВремени.Дней = 1;
ОтклоненияПоВидуВремени.Часов = ВыборкаДанныхОВремени.Часов;
ЭтоОтклонение = Истина;
КонецЕсли;
ПредставлениеВидовВремени = ПредставлениеВидовВремени + "/"+ ВыборкаДанныхОВремени.БуквенныйКод;
Если Не ВыборкаДанныхОВремени.Целосменное Тогда
ЧасыПоВидамВремениСтрока = ЧасыПоВидамВремениСтрока + "/" + Формат(ВыборкаДанныхОВремени.Часов, "ЧГ=");
КонецЕсли;
Если ВыборкаДанныхОВремени.РабочееВремя
И ВыборкаДанныхОВремени.ОсновноеВремя <> Справочники.ВидыИспользованияРабочегоВремени.ПустаяСсылка() Тогда
РабочийДень = Истина;
ОтработаноЧасовЗаМесяц = ОтработаноЧасовЗаМесяц + ВыборкаДанныхОВремени.Часов;
Если День(ВыборкаДанныхОВремени.Дата) > 15 Тогда
ОтработаноЧасовЗаВторуюПоловинуМесяца = ОтработаноЧасовЗаВторуюПоловинуМесяца + ВыборкаДанныхОВремени.Часов;
Иначе
ОтработаноЧасовЗаПервуюПоловинуМесяца = ОтработаноЧасовЗаПервуюПоловинуМесяца + ВыборкаДанныхОВремени.Часов;
КонецЕсли;
КонецЕсли;
КоличествоЗаписейНаДату = КоличествоЗаписейНаДату + 1;
КонецЦикла;
Если КоличествоЗаписейНаДату = 1 И ЭтоОтклонение Тогда
ЧасыПоВидамВремениСтрока = "";
КонецЕсли;
Если РабочийДень Тогда
ОтработаноДнейЗаМесяц = ОтработаноДнейЗаМесяц + 1;
Если День(ВыборкаДанныхОВремени.Дата) > 15 Тогда
ОтработаноДнейЗаВторуюПоловинуМесяца = ОтработаноДнейЗаВторуюПоловинуМесяца + 1;
Иначе
ОтработаноДнейЗаПервуюПоловинуМесяца = ОтработаноДнейЗаПервуюПоловинуМесяца + 1;
КонецЕсли;
КонецЕсли;
НомерДня = День(ВыборкаДанныхОВремени.Дата);
ОбластьДанныеОВремениПараметры.Вставить("Символ" + НомерДня, Сред(ПредставлениеВидовВремени, 2));
ОбластьДанныеОВремениПараметры.Вставить("ДополнительноеЗначение"+ НомерДня, Сред(ЧасыПоВидамВремениСтрока, 2));
КонецЦикла;
ОбластьДанныеОВремениПараметры.ДниПерваяПоловина = ОтработаноДнейЗаПервуюПоловинуМесяца;
ОбластьДанныеОВремениПараметры.ЧасыПерваяПоловина = ОтработаноЧасовЗаПервуюПоловинуМесяца;
ОбластьДанныеОВремениПараметры.ДниВтораяПоловина = ОтработаноДнейЗаВторуюПоловинуМесяца;
ОбластьДанныеОВремениПараметры.ЧасыВтораяПоловина = ОтработаноЧасовЗаВторуюПоловинуМесяца;
ОбластьДанныеОВремениПараметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
ОбластьДанныеОВремениПараметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
ОтклоненияПоСотруднику.Свернуть("ВидВремени, БуквенныйКод", "Дней, Часов");
СчОтклонений = 1;
Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
Если СчОтклонений > 8 Тогда
Прервать;
КонецЕсли;
ОбластьДанныеОВремениПараметры.Вставить("НеявкаКод" + СчОтклонений, ОтклонениеПоВидуВремени.БуквенныйКод);
ОбластьДанныеОВремениПараметры.Вставить("НеявкаДниЧасы" + СчОтклонений, Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=")
+ ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", ""));
СчОтклонений = СчОтклонений + 1;
КонецЦикла;
ОбластьДанныеОВремени.Параметры.Заполнить(ОбластьДанныеОВремениПараметры);
КонецЦикла;
КонецЦикла;
ОбластьПодвал.Параметры.Заполнить(ДанныеДокумента);
Если НомерСотрудника > 0 Тогда
ВывестиДанныеСотрудникаВКоллекцию(ТабличныйДокумент, ТекущийЛист, ОбластьДанныеОВремени, ОбластьШапкаТаблицы, ОбластьПодвал);
Иначе
ТабличныйДокумент.Вывести(ОбластьПодвал);
ТекущийЛист.Вывести(ОбластьПодвал);
КонецЕсли;
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаДанныхОВремени.Ссылка);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Функция ПечатнаяФорма0504421(МассивОбъектов, ОбъектыПечати, ИдентификаторОтчета = "УнифицированнаяФорма0504421с2015")
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ВидВремениВыходной = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.УчетБюджетныхУчреждений") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ОтчетыПечатныеФормыБюджетныхУчреждений");
ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Форма0504421";
ТабличныйДокумент.ТолькоПросмотр = Истина;
РезультатыЗапросаПоДокументам = СформироватьЗапросДляПечати(МассивОбъектов);
КоличествоРезультатов = РезультатыЗапросаПоДокументам.Количество();
ВыборкаПоДаннымДокументов = РезультатыЗапросаПоДокументам[КоличествоРезультатов - 2].Выбрать();
ДанныеДокументов = Новый Соответствие;
Пока ВыборкаПоДаннымДокументов.Следующий() Цикл
ДанныеДокумента = Новый Структура("
|Дата,
|ДатаНачалаПериода,
|ДатаОкончанияПериода,
|Номер,
|Организация,
|ОрганизацияНаименование,
|Подразделение,
|ПодразделениеНаименование,
|ОрганизацияКодПоОКПО,
|ФИОРуководителя,
|ДолжностьРуководителя,
|ФИОКадровика,
|ДолжностьКадровика,
|Исполнитель,
|Ответственный,
|ФИООтветственного,
|ДолжностьОтветственного,
|ИсполнительОтБухгалтерии,
|ФИОИсполнителяОтБухгалтерии,
|ДолжностьИсполнителяОтБухгалтерии");
ЗаполнитьЗначенияСвойств(ДанныеДокумента, ВыборкаПоДаннымДокументов);
ДанныеДокументов.Вставить(ВыборкаПоДаннымДокументов.Ссылка, ДанныеДокумента);
КонецЦикла;
Выборка = РезультатыЗапросаПоДокументам[КоличествоРезультатов - 1].Выбрать();
ТекущийЛист = Новый ТабличныйДокумент;
ТекущийЛист.АвтоМасштаб = Истина;
ТекущийЛист.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
ДокументПечати = Выборка.Ссылка;
ДокументРезультат = Новый ТабличныйДокумент;
ДанныеДокумента = ДанныеДокументов[ДокументПечати];
Если ИдентификаторОтчета = "УнифицированнаяФорма0504421с2015" Тогда
КлючВарианта = "Форма0504421с2015";
Иначе
КлючВарианта = "Форма0504421";
КонецЕсли;
ДополнительныеДанныеДляПечати = ДополнительныеДанныеДляПечати();
ДополнительныеДанныеДляПечати.НомерДокумента = ДанныеДокумента.Номер;
ДополнительныеДанныеДляПечати.НомерКорректировки = НомерКорректировкиТабеля(Выборка.Ссылка);
ДополнительныеДанныеДляПечати.ОтветственныйИсполнитель = ДанныеДокумента.Исполнитель;
ДополнительныеДанныеДляПечати.ДолжностьОтветственногоИсполнителя = ДанныеДокумента.ДолжностьОтветственного;
ДополнительныеДанныеДляПечати.ДолжностьКадровика = ДанныеДокумента.ДолжностьКадровика;
ДополнительныеДанныеДляПечати.ФИОКадровика = ДанныеДокумента.ФИОКадровика;
ДополнительныеДанныеДляПечати.ИсполнительОтБухгалтерии = ДанныеДокумента.ИсполнительОтБухгалтерии;
ДополнительныеДанныеДляПечати.ДолжностьИсполнителяОтБухгалтерии = ДанныеДокумента.ДолжностьИсполнителяОтБухгалтерии;
ДополнительныеДанныеДляПечати.ФИОИсполнителяОтБухгалтерии = ДанныеДокумента.ФИОИсполнителяОтБухгалтерии;
ДанныеОВремени = ПустоеДеревоЗначенийДанныхОВремени();
СтрокаПоОрганизации = ДанныеОВремени.Строки.Добавить();
СтрокаПоОрганизации.Организация = ДанныеДокумента.Организация;
СтрокаПоОрганизации.ОрганизацияКодПоОКПО = ДанныеДокумента.ОрганизацияКодПоОКПО;
СтрокаПоОрганизации.ОрганизацияНаименование = ДанныеДокумента.ОрганизацияНаименование;
СтрокаПоОрганизации.ОрганизацияНаименованиеПолное = ДанныеДокумента.ОрганизацияНаименование;
СтрокаПоОрганизации.Подразделение = ДанныеДокумента.Подразделение;
СтрокаПоОрганизации.ПодразделениеНаименование = ДанныеДокумента.ПодразделениеНаименование;
СтрокаПоОрганизации.Месяц = НачалоМесяца(ДанныеДокумента.ДатаНачалаПериода);
СтрокаПоОрганизации.ПараметрыДанныхОтветственный = ДанныеДокумента.Ответственный;
НомерСотрудника = 0;
Пока Выборка.СледующийПоЗначениюПоля("Сотрудник") Цикл
Пока Выборка.СледующийПоЗначениюПоля("Должность") Цикл
НомерСотрудника = НомерСотрудника + 1;
СтрокаПоСотруднику = СтрокаПоОрганизации.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПоСотруднику, СтрокаПоОрганизации);
СтрокаПоСотруднику.Сотрудник = Выборка.Сотрудник;
СтрокаПоСотруднику.СотрудникКод = Выборка.ТабельныйНомер;
СтрокаПоСотруднику.СотрудникНаименование = Выборка.СотрудникНаименование;
СтрокаПоСотруднику.ФИОПолные = Выборка.ФИОПолные;
СтрокаПоСотруднику.ФамилияИО = Выборка.ФамилияИО;
СтрокаПоСотруднику.ДолжностьКонецМесяца = Выборка.ДолжностьСсылка;
СтрокаПоСотруднику.ДолжностьКонецМесяцаНаименование = Выборка.Должность;
СтрокаПоСотруднику.СистемныеПоляНомерПоПорядкуВГруппировке = НомерСотрудника;
Пока Выборка.СледующийПоЗначениюПоля("Дата") Цикл
СтрокаПоДате = СтрокаПоСотруднику.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПоДате, СтрокаПоСотруднику);
Пока Выборка.Следующий() Цикл
СтрокаПоДню = СтрокаПоДате.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПоДню, СтрокаПоДате);
СтрокаПоДню.ВидУчетаВремени = Выборка.ВидВремени;
СтрокаПоДню.ВидУчетаВремениБуквенныйКодБюджетный = Выборка.БуквенныйКодБюджетный;
СтрокаПоДню.ВидУчетаВремениБуквенныйКодБюджетный2009 = Выборка.БуквенныйКодБюджетный2009;
СтрокаПоДню.ВидУчетаВремениНаименование = Выборка.ВидВремениНаименование;
СтрокаПоДню.ВидУчетаВремениОсновноеВремя = Выборка.ОсновноеВремя;
СтрокаПоДню.ВидУчетаВремениРабочееВремя = Выборка.РабочееВремя;
СтрокаПоДню.ВидУчетаВремениЦелосменное = Выборка.Целосменное;
СтрокаПоДню.Дата = Выборка.Дата;
СтрокаПоДню.Часы = Выборка.Часов;
СтрокаПоДню.ПриоритетВидаВремени = Выборка.Приоритет;
Если Не Выборка.РабочееВремя
И Выборка.ВидВремени <> ВидВремениВыходной
И Выборка.ОсновноеВремя <> Справочники.ВидыИспользованияРабочегоВремени.ПустаяСсылка() Тогда
СтрокаПоДню.Отклонение = Истина;
Иначе
СтрокаПоДню.Отклонение = Ложь;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Модуль.ВывестиМакетФормы0504421(ДокументРезультат,
ДанныеОВремени,
ДанныеДокумента.ДатаНачалаПериода,
ДанныеДокумента.ДатаОкончанияПериода,
ДанныеДокумента.Дата,
ЗначениеЗаполнено(ДанныеДокумента.Подразделение),
Истина,
КлючВарианта,
ДополнительныеДанныеДляПечати);
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ТабличныйДокумент.Вывести(ДокументРезультат);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДокументПечати);
КонецЦикла;
КонецЕсли;
Возврат ТабличныйДокумент;
КонецФункции
Функция НомерКорректировкиТабеля(Табель)
ИсправленныеДокументы = ИсправлениеДокументовЗарплатаКадры.ПолучитьДокументыЦепочкиИсправлений(Табель);
КоличествоИсправлений = ИсправленныеДокументы.Количество();
Возврат ?(КоличествоИсправлений > 0, КоличествоИсправлений, 0);
КонецФункции
Функция ПустоеДеревоЗначенийДанныхОВремени()
ТипВидРабочегоВремени = Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени");
ТипДата = Новый ОписаниеТипов("Дата");
ТипЧисло = Новый ОписаниеТипов("Число");
ТипБулево = Новый ОписаниеТипов("Булево");
ТипСтрока3 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(3));
ТипСтрока10 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10));
ТипСтрока50 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50));
ТипСтрока100 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100));
ТипСтрока150 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150));
ДанныеОВремени = Новый ДеревоЗначений;
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремени", ТипВидРабочегоВремени);
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремениБуквенныйКодБюджетный", ТипСтрока3);
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремениБуквенныйКодБюджетный2009", ТипСтрока3);
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремениНаименование", ТипСтрока50);
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремениОсновноеВремя", ТипВидРабочегоВремени);
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремениРабочееВремя", ТипБулево);
ДанныеОВремени.Колонки.Добавить("ВидУчетаВремениЦелосменное", ТипБулево);
ДанныеОВремени.Колонки.Добавить("Дата", ТипДата);
ДанныеОВремени.Колонки.Добавить("ДолжностьКонецМесяца", Новый ОписаниеТипов("СправочникСсылка.Должности"));
ДанныеОВремени.Колонки.Добавить("ДолжностьКонецМесяцаНаименование", ТипСтрока150);
ДанныеОВремени.Колонки.Добавить("Имя", ТипСтрока50);
ДанныеОВремени.Колонки.Добавить("Месяц", ТипДата);
ДанныеОВремени.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));
ДанныеОВремени.Колонки.Добавить("ОрганизацияКодПоОКПО", ТипСтрока10);
ДанныеОВремени.Колонки.Добавить("ОрганизацияНаименование", ТипСтрока150);
ДанныеОВремени.Колонки.Добавить("ОрганизацияНаименованиеПолное", Новый ОписаниеТипов("Строка"));
ДанныеОВремени.Колонки.Добавить("Отклонение", ТипБулево);
ДанныеОВремени.Колонки.Добавить("Отчество", ТипСтрока50);
ДанныеОВремени.Колонки.Добавить("ПараметрыДанныхОтветственный", Новый ОписаниеТипов("СправочникСсылка.Пользователи"));
ДанныеОВремени.Колонки.Добавить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"));
ДанныеОВремени.Колонки.Добавить("ПодразделениеНаименование", ТипСтрока150);
ДанныеОВремени.Колонки.Добавить("ПриоритетВидаВремени", ТипЧисло);
ДанныеОВремени.Колонки.Добавить("РабочиеДни", ТипЧисло);
ДанныеОВремени.Колонки.Добавить("РабочиеЧасы", ТипЧисло);
ДанныеОВремени.Колонки.Добавить("СистемныеПоляНомерПоПорядкуВГруппировке", ТипЧисло);
ДанныеОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ДанныеОВремени.Колонки.Добавить("СотрудникКод", ТипСтрока10);
ДанныеОВремени.Колонки.Добавить("СотрудникНаименование", ТипСтрока100);
ДанныеОВремени.Колонки.Добавить("Фамилия", ТипСтрока50);
ДанныеОВремени.Колонки.Добавить("ФамилияИО", ТипСтрока100);
ДанныеОВремени.Колонки.Добавить("ФИОПолные", ТипСтрока150);
ДанныеОВремени.Колонки.Добавить("Часы", ТипЧисло);
Возврат ДанныеОВремени;
КонецФункции
Процедура ВывестиДанныеСотрудникаВКоллекцию(ТабличныйДокумент, ТекущийЛист, ОбластьДанныеОВремени, ОбластьШапкаТаблицы, ОбластьПодвал = Неопределено)
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьДанныеОВремени);
Если ОбластьПодвал <> Неопределено Тогда
МассивОбластей.Добавить(ОбластьПодвал);
КонецЕсли;
Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТекущийЛист, МассивОбластей) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТекущийЛист = Новый ТабличныйДокумент;
ТекущийЛист.АвтоМасштаб = Истина;
ТекущийЛист.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
ТекущийЛист.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьДанныеОВремени);
ТекущийЛист.Вывести(ОбластьДанныеОВремени);
Если ОбластьПодвал <> Неопределено Тогда
ТабличныйДокумент.Вывести(ОбластьПодвал);
ТекущийЛист.Вывести(ОбластьПодвал);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СозданиеНовогоДокумента
Функция ДанныеНовогоДокумента() Экспорт
ДанныеДокумента = Новый Структура();
ДанныеДокумента.Вставить("Дата", ТекущаяДатаСеанса());
ДанныеДокумента.Вставить("Организация", Неопределено);
ДанныеДокумента.Вставить("Подразделение", Неопределено);
ДанныеДокумента.Вставить("ПериодРегистрации", НачалоМесяца(ТекущаяДатаСеанса()));
ДанныеДокумента.Вставить("ДатаНачалаПериода", НачалоМесяца(ТекущаяДатаСеанса()));
ДанныеДокумента.Вставить("ДатаОкончанияПериода", КонецМесяца(ТекущаяДатаСеанса()));
ДанныеДокумента.Вставить("ИсправленныйДокумент", Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка());
ДанныеДокумента.Вставить("Руководитель", Неопределено);
ДанныеДокумента.Вставить("ДолжностьРуководителя", Неопределено);
ДанныеДокумента.Вставить("ОснованиеПодписиРуководителя", "");
ДанныеДокумента.Вставить("РаботникКадровойСлужбы", Неопределено);
ДанныеДокумента.Вставить("ДолжностьРаботникаКадровойСлужбы", Неопределено);
ДанныеДокумента.Вставить("ОснованиеПодписиРаботникаКадровойСлужбы", "");
ДанныеДокумента.Вставить("Исполнитель", Неопределено);
ДанныеДокумента.Вставить("ДолжностьИсполнителя", Неопределено);
ДанныеДокумента.Вставить("ОснованиеПодписиИсполнителя", "");
ДанныеДокумента.Вставить("Сотрудники", Неопределено);
ДанныеДокумента.Вставить("Ответственный", Неопределено);
ДанныеДокумента.Вставить("Действие", "Заполнить");
Возврат ДанныеДокумента;
КонецФункции
#КонецОбласти
#КонецЕсли