Работа в выходные и праздничные дни / Модуль объекта

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

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

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

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

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

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

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

	ДанныеОРаботе = Сотрудники.Выгрузить();
	
	ДанныеОРаботе.Колонки.Добавить("ВремяВЧасах", Новый ОписаниеТипов("Булево"));
	ДанныеОРаботе.ЗаполнитьЗначения(ВремяВЧасах, "ВремяВЧасах");
	
	Возврат ДанныеОРаботе;

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

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

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

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

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

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

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