Работа сверхурочно / Модуль объекта

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

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

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

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

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

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

Функция ДанныеОРаботе()

	Возврат Сотрудники.Выгрузить();

КонецФункции

Функция ДанныеДляПроведения()

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

	ДанныеДляПроведения.Вставить("ДанныеОВремени", 			ДанныеОВремени);
	ДанныеДляПроведения.Вставить("ДанныеОбОтгулах", 		ДанныеОбОтгулах);
	ДанныеДляПроведения.Вставить("БухучетДанныхОВремени", 	БухучетДанныхОВремени);
	
	Возврат ДанныеДляПроведения;
	
КонецФункции

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

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

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