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