Норма времени по плану отработанного времени

Продолжаю дорабатывать модуль по расчету зарплаты в УТ от Codestar.  О предыдущих хитростях по спуску параметра вниз по стеку я уже писал.

Теперь понадобилось нормы времени рассчитывать по плановому времени.

Для этого добавил в начисление галочку «По плановым часам»:

Далее в менеджере регистра сведений «Нормы времени» осталось только посчитать норму времени по плановому времени работы сотрудника за месяц.

И опять мы сталкиваемся с необходимостью передать вниз по стеку текущего сотрудника, для которого рассчитывается норма.

На этот раз я завел параметр сеанса «Сотрудник для норм» — учусь на ваших советах. При запуске расчета устанавливаю его:

&НаСервере
&Вместо("ПолучитьРезультатНачисленияУдержания")
Функция дор_ПолучитьРезультатНачисленияУдержания(СтрокаТЧ, тПланФакт)
	//Устанавливаем сотрудника
	ПараметрыСеанса.дор_СотрудникДляНорм = СтрокаТЧ.Физлицо;
	Результат = ПродолжитьВызов(СтрокаТЧ, тПланФакт);
	Возврат Результат;
КонецФункции

А при расчете получаю его (в модуле менеджера регистра «Нормы времени»):

&Вместо("ПолучитьНорму")
Функция дор_ПолучитьНорму(Начисление, Период, Показатель)
	//По плановым часам считаем по-другому
	Если Начисление._ПоПлановымЧасам Тогда
		З = Новый Запрос(
		"ВЫБРАТЬ
		|	Т.ЧасовОборот КАК Часов
		|ИЗ
		|	РегистрНакопления._ОтработанноеВремя.Обороты(&Дата1, &Дата2, , ) КАК Т
		|ГДЕ
		|	Т.Сотрудник = &Сотрудник
		|	И Т.ВидРабочегоВремени = &ВидРабочегоВремени");
		ТекСотрудник = ПараметрыСеанса.дор_СотрудникДляНорм;
		З.УстановитьПараметр("Сотрудник", ТекСотрудник);
		З.УстановитьПараметр("ВидРабочегоВремени", Справочники._ВидыРабочегоВремени.План);
		З.УстановитьПараметр("Дата1", НачалоМесяца(Период));
		З.УстановитьПараметр("Дата2", КонецМесяца(Период));
		Выборка = З.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			Результат = Выборка.Часов;
			Сообщить("Сотрудник: " + ТекСотрудник  + " Начисление: " +  Начисление + " за месяц: " + Формат(Период, "ДФ='MMMM yyyy'") + " = " + Результат);
			Возврат Результат;
		Иначе
			Возврат 0;
		КонецЕсли;
	КонецЕсли;
	Результат = ПродолжитьВызов(Начисление, Период, Показатель);
	Возврат Результат;
КонецФункции

При этом еще и вывожу сообщения, чтобы пользователь мог проверить расчет:

Можно сверить данные с табелем:

Среда: УТ 11.4.13.46Объем факт: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *