Как настроить расчет оклада по часам по норме производственного календаря в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При переходе с редакции 2.5 на 1С:ЗУП 3.1 пользователи часто сталкиваются с изменением логики расчета оклада по часам для сотрудников со сменными графиками. В редакции 2.5 подстановка среднемесячной нормы времени (часы по регламентированному календарю за год / 12) в формулу расчета была стандартной возможностью. В редакции 3.1 подход к расчету изменился, так как прямого показателя нормы производственного календаря для произвольных формул начислений в системе нет.

Разберем основные варианты решения этой задачи: от использования штатного функционала пересчета тарифных ставок до создания индивидуальных показателей и программной подстановки нормы времени.

Способ 1. Использование встроенного показателя «СтоимостьЧаса» (Штатный вариант)

Разберем типовой способ настройки расчета без изменения программного кода. В 1С:ЗУП 3.1 вычисление среднемесячной нормы времени уже заложено в алгоритм расчета показателя СтоимостьЧаса.

Для настройки этого механизма выполним следующие шаги:

  1. Перейдем в настройки расчета зарплаты (раздел Настройка — Расчет зарплаты).
  2. В блоке порядка пересчета месячной тарифной ставки в часовую выберем вариант «Среднемесячное количество часов в месяце» или «По норме времени по производственному календарю».
  3. Создадим или отредактируем вид начисления для оплаты по окладу (по часам). В формуле начисления укажем выражение:

    СтоимостьЧаса * ВремяВЧасах + Оклад - Оклад

  4. В настройках начисления на вкладке «Основное» снимем флаг автоматического расчета ФОТ, сохранив при этом флаг участия в ФОТ, чтобы размер планового ФОТ и совокупная тарифная ставка формировались корректно при кадровых изменениях.

Конструкция + Оклад - Оклад необходима для того, чтобы показатель Оклад оставался доступным для назначения в кадровых документах (Прием на работу, Кадровый перевод), но сам размер оклада не суммировался повторно при расчете начисления.

Способ 2. Использование пользовательского показателя нормы времени

Если требуется сохранить классический вид формулы Оклад * ВремяВЧасах / Норма, разберем вариант с созданием собственного показателя нормы времени.

  1. Перейдем в раздел Настройка — Показатели расчета зарплаты и создадим новый показатель (например, СреднемесячнаяНормаВремени).
  2. Назначим показатель для организации в целом, с периодичностью ввода раз в год.
  3. Введем значение показателя (например, 164.4 или 164.1666667) через документ Ввод данных для расчета зарплаты.
  4. В формуле вида начисления укажем:

    Оклад * ВремяВЧасах / СреднемесячнаяНормаВремени

Рассмотрим еще одну модификацию этой формулы, позволяющую технически заполнить типовую графу нормы в документе Начисление зарплаты и кадров, но использовать при расчете нужное число:

Оклад * ВремяВЧасах / (0 * НормаЧасов + СреднемесячнаяНормаВремени)

Способ 3. Программная подстановка нормы часов в документе начисления

Разберем вариант, когда требуется динамически изменять значение в колонке НормаЧасов документа Начисление зарплаты и кадров для конкретных видов расчета. Это можно реализовать с помощью внешней обработки или расширения конфигурации.

Посмотрим на пример клиентского кода, выполняющего пересчет строки начисления при нажатии специальной кнопки на форме документа:


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

Данный код обходит строки таблицы начислений, подставляет необходимую норму времени (например, 164.4) и вызывается процедуру пересчета строки СтрокаРасчетаПриОкончанииРедактирования модуля РасчетЗарплатыКлиент.

Ограничения и технические риски обходных решений

Проанализируем важные нюансы и возможные проблемы при выборе каждого из способов:

Наиболее устойчивым и методически корректным решением в 1С:ЗУП 3.1 является переход на типовой показатель СтоимостьЧаса с выбором порядка пересчета по среднемесячному количеству часов в настройках программы.

← На главную