И вроде в задаче нет ничего сложного, изменил формулу начисления и готово. Тётя расчетчик довольна, ты доволен, работники пашут сверхурочно и тоже весьма довольны. Но есть нюансы.
На сайте уже есть публикация "расчета фактического часа", но она предлагает уже в рассчитанном документе Начисление зарплаты рассчитать самим "стоимость часа" по строкам документа. А хотелось обойтись изменением формулы расчета начисления.
В типовом расчете начисления используется показатель "СтоимостьЧаса".
"СтоимостьЧаса" - расчет происходит по понятию "Совокупная тарифная ставка" (как бы основной плановый ФОТ сотрудника)
Также в ЗУП 3.1 был добавлен показатель "СтоимостьДняЧасаСУчетомРазовыхНачислений", вроде именно для использования в начислении сверхурочных.
"СтоимостьДняЧасаСУчетомРазовыхНачислений" - можно добавить в расчет стоимости часа другие начисления на выбор, но основные начисления из "Совокупная тарифная ставка" и любые другие добавленные плановые начисления посчитаются также по понятию "вклад в ФОТ" (только разовые начисления включаться по фактически рассчитанным суммам).
Вроде очевидным решением для нашего "ФактическаяСтоимостьЧаса" является:
РасчетнаяБаза/(ОтработаноЧасов-ОтработаноСверхурочно)
"ОтработаноЧасов" - Отработано часов, в т.ч. сверхурочно, включает в себя все часы по видам времени, имеющих признак "Рабочее время". Упрощенно: Явка + Ночные + Работа в выходные + Сверхурочные
Получается, например, если сотрудник отработал всю норму и дополнительно работал в выходные дни, мы поделим на большее количество часов, и сумма сверхурочных выйдет меньше.
Вторым очевидным решением для нашего "ФактическаяСтоимостьЧаса" является:
РасчетнаяБаза/(ВремяВЧасах-ОтработаноСверхурочно)
"ВремяВЧасах" - количество часов посчитается по виду времени указанному в начислении на вкладке "Учет времени" в поле "Вид времени", также можно указывать там же Дополнительные виды времени.
Основной вид времени "Сверхурочно" мы поменять не можем, поэтому добавляем в Дополнительные виды времени "Явка" и "Ночные".
Нас ждёт неожиданный результат. Показатель "ОтработаноСверхурочно" в формуле начисления тоже посчитается по всем видам времени (несмотря на своё название), и расчёт будет абсолютно неверным.
Предлагаемое расширение изменяет именно это - показатель "ОтработаноСверхурочно" будет считаться строго по предопределённым видам времени "Сверхурочно" и "СверхурочноБезПовышения".
Ура, теперь по сотрудникам, у которых были сверхурочные часы, считается как нам нужно.
Нас ждёт неожиданный результат. Теперь в документе "Начисление зарплаты" начисление "Оплата сверхурочных часов" появится абсолютно по всем сотрудникам (пусть и с результатом 0), то есть начисление теперь срабатывает и по виду времени "Явка".
В самом начислении под полем "Только если указан вид времени" мы видим один вид времени "Сверхурочно" и наивно полагаем, что начисление сработает только если у сотрудника указаны сверхурочные часы в этом месяце.
Причина в процедуре:
Процедура ЗаполнитьПризнакОпределяющийВидВремени(ВидРасчетаОбъект)
Для Каждого Строка Из ВидРасчетаОбъект.ВидыВремени Цикл
Если ВидРасчетаОбъект.СпособВыполненияНачисления = Перечисления.СпособыВыполненияНачислений.ПоЗначениюВидаВремениПриОкончательномРасчете Тогда
Строка.ОпределяющийВидВремени = Истина;
КонецЕсли;
КонецЦикла;
Как мы видим, признак "ОпределяющийВидВремени" ставится всем видам времени из таблицы ВидыВремени без всяких условий.
Не унываем и пишем обработку, которая позволит нам принудительно установить признак "ОпределяющийВидВремени" только для вида времени "Сверхурочно". Теперь лишние строки с начислением "Оплата сверхурочных часов" в документе "Начисление зарплаты" не появляются.
Вывод. Правильным решением будет использовать типовую формулу расчёта с показателем "СтоимостьЧаса". Мы изменили достаточно важные типовые настройки и ходим по о... тонкому льду. Но задачу тёти расчётчика "Мы с 96-го года так считаем и нужно сделать именно так" никто не отменял...
Но, возможно, я не прав, и задачу можно было решить типовыми средствами. Если это кому-то удалось, напишите, пожалуйста, в комментариях, будет интересно узнать.
Другой пример изменения типовых механизмов расчета:
Расчет зависимых начислений, автоматическое начисление на основании другого для ЗУП 3.1
Подключаем расширение: в меню Администрирование, "Печатные формы, отчеты и обработки", "Расширения" нажимаем "Добавить из файла", выбираем файл.
Обработку "Установить признак "ОпределяющийВидВремени" только для вида времени "Сверхурочно"" открывайте через команду Файл, Открыть.
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.37.72
Вступайте в нашу телеграмм-группу Инфостарт