Почему в 1С:ЗУП неправильно заполняются отработанные дни при наличии ночных смен?

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

При расчете заработной платы в конфигурации «1С:Зарплата и управление персоналом» (включая локализацию для Беларуси) пользователи часто сталкиваются с ситуацией, когда часы в документе Начисление зарплаты проставляются корректно, а количество отработанных дней оказывается значительно меньше ожидаемого. Типичный пример: сотрудник отработал 22 смены (из них часть ночные), программа видит все часы, но в колонке «Отработано дней» указывает только 8. Разберем детально, почему это происходит и как это исправить.

Порядок сбора данных о времени в системе

Прежде чем приступать к исправлению настроек, проанализируем, в какой иерархии система собирает данные для заполнения документа Начисление зарплаты. В ЗУП редакции 3.1 алгоритм следующий:

  1. Документы оперативного учета: Сначала система проверяет наличие документов Работа в выходные и праздничные дни или Данные для расчета зарплаты.
  2. Документ «Табель»: Если оперативных документов нет или они не покрывают весь период, данные берутся из фактически заполненного и проведенного документа Табель учета рабочего времени.
  3. График работы сотрудника: В случае отсутствия Табеля система обращается к основному или индивидуальному графику работы сотрудника.

Важный нюанс: Из всех полученных данных система автоматически «вычитает» периоды неявок (больничные, отпуска, прогулы), зарегистрированные соответствующими документами кадрового учета.

Настройка видов использования рабочего времени

Выясним основную причину, по которой «ночные» или «вечерние» часы могут не учитываться как отработанные дни. Все дело в справочнике Виды использования рабочего времени. Рассмотрим ситуацию: программа считает дни «Явки», но игнорирует дни, где указаны только «Ночные часы».

Проанализируем настройки вида времени «Ночные часы» (Н):

Настройка начисления: вкладка «Учет времени»

Перейдем к проверке самого начисления (например, «Оплата по окладу» или «Оплата по часовому тарифу»). В настройках начисления на вкладке Учет времени определяется, какие именно показатели будут заполняться в документе расчета.

Рассмотрим пошагово:

  1. В поле «Вид времени» обычно указана Явка.
  2. Если сотрудник работает в ночные смены, которые не перекрываются дневной «Явкой», необходимо убедиться, что в табличной части «Дополнительные виды времени» добавлены Ночные часы.
  3. Если этого не сделать, система рассчитает оплату за часы по всем видам времени, но в показатель ОтработаноДней запишет только те дни, в которых фигурирует основной вид времени (Явка).

Регистр накопления «Данные о времени для расчета зарплаты»

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

Проанализируем ситуацию, если в Табеле все верно, а в Начислении — нет:

  1. Откроем «Функции для технического специалиста» (или через «Все функции»).
  2. Найдем регистр накопления Данные о времени для расчета зарплаты.
  3. Сделаем отбор по конкретному сотруднику и периоду.
  4. Посмотрим на колонки Отработано дней и Отработано часов. Если в регистре данные уже «кривые», значит, проблема в документе-источнике (например, Индивидуальный график или Табель был перепроведен несколько раз и данные зациклились).

Программный поиск ошибки (для разработчиков)

Если визуальные настройки не помогают, придется обратиться к программному коду. Основная логика сбора данных о времени сосредоточена в обработке МенеджерРасчетаЗарплаты.

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

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

Пример фрагмента логики (условно), на который стоит обратить внимание в коде:


// В запросе менеджера расчета зарплаты 
// проверяется признак основного времени
Запрос.Текст = "ВЫБРАТЬ
|   ...
|   ВЫБОР КОГДА ВидВремени.ОсновноеВремя = ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.Явка)
|       ТОГДА Данные.Дни
|       ИНАЧЕ 0
|   КОНЕЦ КАК ОтработаноДней,
|   Данные.Часы КАК ОтработаноЧасов
|   ...";

Если вы используете версию КОРП или специфическую белорусскую сборку, обратите внимание на настройки в разделе «Настройка — Расчет зарплаты — Настройка состава начислений и удержаний — Почасовая оплата». Иногда флаг «Ночные часы» может конфликтовать с пользовательскими видами времени, если они были созданы вручную вместо использования предопределенных.

Резюме и рекомендации

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

  1. Проверьте в справочнике Виды использования рабочего времени, чтобы у Ночных часов в поле «Основное время» стояла Явка.
  2. В настройках начисления «Оплата по окладу» добавьте Ночные часы в список дополнительных видов времени.
  3. Перезаполните документ Начисление зарплаты. Важно: иногда кнопка «Обновить» не помогает, лучше удалить строку сотрудника и добавить её заново через кнопку «Подбор».
  4. Если используется переходящая смена (через полночь), убедитесь, что в графике работы корректно настроено распределение часов по суткам, чтобы система не считала одну смену как два разных дня или наоборот.
← На главную