Почему в 1С сверхурочные часы ошибочно оплачиваются только в двойном размере из-за превышения лимита 120 часов?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При расчете оплаты сверхурочной работы в конфигурациях 1С:Зарплата и управление персоналом и 1С:ERP Управление предприятием пользователи сталкиваются с ситуацией, когда программа ошибочно считает, что сотрудник уже превысил годовой предел в 120 часов сверхурочной работы. В результате система начисляет всю текущую сверхурочную работу исключительно в двойном размере, пропуская положенную полуторную оплату первых двух часов смены. Разберем детально, почему возникает эта ошибка и какими способами её исправить.

Причины некорректного подсчета накопленных сверхурочных часов

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

  1. Некорректная настройка видов расчета (начислений): если на предприятии создано несколько начислений для сверхурочных часов (например, доплаты за переработку, поощрения за сверхурочный труд, надбавки за работу в вечернее время), на вкладке «Учет времени» у них может быть ошибочно указан переключатель «За работу сверх нормы времени». В типовом алгоритме действует строгое правило: признак «За работу сверх нормы времени» должен быть установлен только у одного базового начисления, регистрирующего фактические часы переработки. Все сопутствующие доплаты обязаны иметь переключатель «Дополнительная оплата за уже отработанное время». Если два начисления имеют признак работы сверх нормы, отработанные часы суммируются повторно.
  2. Дефект выборки из виртуальной таблицы ФактическийПериодДействия: если в прошлых месяцах у сотрудника были периоды отсутствия (больничный лист, отпуск за свой счет), которые начинались и заканчивались внутри месяца, они разбивали фактически отработанное время на два или более отдельных интервала (до отсутствия и после него). Виртуальная таблица фактического периода действия регистра расчета возвращает несколько записей по каждому такому отрезку, а типовой запрос при сборе часов дублировал показатель отработанного времени по каждой строке интервала. Например, при фактических 22 часах переработки и двух интервалах система ошибочно фиксировала 44 часа.

Диагностика данных в отладчике

Выясним, как проверить расчет остатка часов до лимита непосредственно в коде конфигурации. Для анализа перейдем в модуль объекта обработки МенеджерДанныхУчетаВремениСотрудников к процедуре или функции РабочееВремяПоИсточникамДанных.

Установим точку останова на строке:

Если Не ПолучатьДетальныеЗаписиПоТерриторияУсловияТруда Тогда

В табло отладчика выполним выгрузку временной таблицы остатка лимита:


Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТОстатокСверхурочныхЧасовДоПредела").ПолучитьДанные().Выгрузить()

В последней колонке полученной таблицы содержится расчетный остаток до предела в 120 часов. Если там отображается ноль, это не дает точного понимания величины ошибки. Чтобы увидеть реальное накопленное значение, в коде запроса (или в патче EF_60034435) временно заменим константу 120 на число 1000. После этого в табло отобразится остаток, например, 877.2. Это означает, что программа зафиксировала с начала года 1000 - 877.2 = 122.8 часов переработки, и мы сразу сможем сопоставить это значение с расчетными листками сотрудника.

Также проверим список источников сверхурочного времени через табло:


Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТИсточникиДанныхСверхурочногоВремени").ПолучитьДанные().Выгрузить()

Способ 1. Проверка и корректировка настроек видов начислений

Разберем порядок настройки начислений, чтобы исключить наложение часов:

  1. Откроем список начислений (раздел Настройка – Начисления).
  2. Найдем основную оплату сверхурочных часов. На вкладке «Учет времени» слева должен быть выбран переключатель За работу сверх нормы времени, а вид времени указан как сверхурочные часы (например, «Сверхурочно»).
  3. Откроем все дополнительные начисления, которые рассчитываются на основании сверхурочных часов (поощрения, доплаты, надбавки за квалификацию или условия труда).
  4. На вкладке «Учет времени» переставим переключатель в положение Дополнительная оплата за уже отработанное время.
  5. Если переключатель недоступен из-за того, что начисление помечено как более не используемое, временно снимем признак неиспользования, изменим настройку и запишем элемент.

Способ 2. Установка официального исправления и корректировка запроса

Для устранения ошибки задвоения часов от разрыва периодов отсутствиями фирма «1С» выпустила патч EF_60034435, а также исправление в релизе конфигурации ЗУП 3.1.38.123 (и соответствующих обновлениях ERP). Если обновление конфигурации еще не выполнено, скорректируем запрос сбора данных по накопленным часам в расширении.

В функции ЗапросРабочееВремяПоИсточникамДанных обработки МенеджерДанныхУчетаВремениСотрудников в тексте запроса к таблице начислений исключим виды расчетов, относящиеся к дополнительным оплатам, добавив условие перед секцией группировки:


И НачисленияФПД.ВидРасчета.ВидВремени <> ЗНАЧЕНИЕ(Перечисление.ВидыРабочегоВремениСотрудников.ДополнительноОплачиваемоеВПределахНормы)

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

Особенность использования временных таблиц в расширениях

Если исправление оформляется через расширение конфигурации, обратим внимание на ошибку выполнения:

{(24, 11)}: Временная таблица уже существует "ВТ_НачисленияФПД_ИсключениеЗадвоений"

Данная ошибка регулярно возникает в документе Увольнение, поскольку при расчете сотрудника механизм формирования рабочего времени по источникам данных вызывается дважды в рамках одного и того же сеанса с одним объектом МенеджерВременныхТаблиц. Чтобы избежать падения, в конце пакета запросов расширения обязательно добавляем команду явного уничтожения созданной временной таблицы:

УНИЧТОЖИТЬ ВТ_НачисленияФПД_ИсключениеЗадвоений;

Как правильно распределяются полуторные и двойные часы: практический пример

Рассмотрим, как программа должна распределять часы при приближении к пределу в 120 часов. Проанализируем конкретный пример:

  1. На начало расчетного месяца сотрудник отработал 102.4 сверхурочных часа с января. До установленного лимита 120 часов остается: 120 - 102.4 = 17.6 часа.
  2. В текущем месяце сотрудник отработал 10 смен со сверхурочными часами: 3.3; 1.7; 2.0; 1.0; 2.0; 2.0; 1.8; 2.3; 1.3; 0.2. Всего за месяц переработка составила 17.6 часа.
  3. По закону в полуторном размере оплачиваются первые 2 часа каждой смены, но не более оставшегося годового лимита (17.6 ч).
  4. В первой смене (3.3 ч) на полуторную оплату относится максимум 2.0 ч, а 1.3 ч уходит в двойную оплату.
  5. В восьмой смене (2.3 ч) на полуторную оплату относится 2.0 ч, а 0.3 ч уходит в двойную оплату.
  6. Суммируя полуторные часы по всем 10 сменам, получаем ровно 16 часов в полуторном размере (колонка «Сверхурочно (до 2 час.)»). Оставшиеся 1.6 часа (1.3 + 0.3) сразу оплачиваются в двойном размере, так как превышают 2 часа в пределах своих смен.
  7. После исчерпания остатка в 17.6 часа все последующие смены текущего года будут оплачиваться исключительно в двойном размере.

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

← На главную