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