Регистрация переработок / Модуль объекта

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	// Проведение документа
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда 
		// Сверхурочные суммированного учета.
		ЗаписатьЗначенияПоказателейРасчетаЗарплаты(Движения, Отказ);
		// Отгулы
		УчетРабочегоВремениРасширенный.ЗарегистрироватьДниЧасыОтгуловСотрудников(Движения, ДанныеОбОтгулах());
	КонецЕсли; 
	
КонецПроцедуры

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

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

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

Процедура ЗаписатьЗначенияПоказателейРасчетаЗарплаты(Движения, Отказ)
	
	ПереработаноПоСуммированномуУчетуВПределах2Часов = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.ПереработаноПоСуммированномуУчетуВПределах2Часов");
	ПереработаноПоСуммированномуУчету = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.ПереработаноПоСуммированномуУчету");

	Если ПереработаноПоСуммированномуУчетуВПределах2Часов = Неопределено Или ПереработаноПоСуммированномуУчету = Неопределено Тогда
		Возврат;
	КонецЕсли;

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

Функция ДанныеОбОтгулах()

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

	Возврат ТаблицаОтгулов;
	
КонецФункции

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

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

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