В практике бухгалтера и расчетчика заработной платы часто встречается ситуация: сотрудник болел в конце одного месяца, а закрытый листок нетрудоспособности принес только в следующем. При расчете отпуска в будущем периоде обнаруживается, что программа 1С:Зарплата и управление персоналом 3.1 (ЗУП) считает месяц болезни как полностью отработанный, проставляя 29.3 дня в данных среднего заработка. Давайте подробно разберем, почему так происходит, как работает механизм учета времени и какие шаги необходимо предпринять, чтобы данные для расчета среднего заработка всегда были корректными.
Основная причина кроется в архитектуре хранения данных в ЗУП 3.1. В отличие от старых версий программы (например, ЗУП 2.5), где данные для среднего собирались «на лету» по записям регистров расчета, в версии 3.1 существует специализированный регистр накопления Данные о времени для расчета среднего заработка (общий).
Рассмотрим стандартную цепочку событий:
Проблема заключается в том, что документ Больничный лист, введенный следующим периодом, делает сторнирующие записи по суммам, но он не всегда автоматически и корректно исправляет уже сделанные записи о времени в регистре среднего за прошлый месяц, если нарушена последовательность ввода документов или не используются вытесняющие кадровые приказы.
Это наиболее правильный и методически верный способ работы в ЗУП 3.1. Разберем его по шагам:
Шаг 1. Регистрация факта отсутствия. Как только стало известно, что сотрудник не вышел на работу, но подтверждающего документа (больничного) еще нет, необходимо создать документ Отсутствие (болезнь, прогул, неявка). В поле «Причина» указываем «Болезнь (больничный еще не закрыт)».
Шаг 2. Расчет зарплаты. При проведении документа Начисление зарплаты и взносов за текущий месяц программа увидит зарегистрированное отсутствие. В регистр Данные о времени для расчета среднего заработка попадет только фактически отработанное время до начала болезни. Количество календарных дней для среднего заработка будет рассчитано пропорционально.
Шаг 3. Ввод больничного. Когда сотрудник принесет больничный лист (например, уже в следующем месяце), мы введем его на основании ранее созданного документа Отсутствие. Вид времени сменится с «НН» на «Б», суммы доначислятся, но данные о времени в регистре среднего уже будут «забронированы» правильно.
Что делать, если июль уже рассчитан и выплачен, а больничный введен августом и данные среднего за июль теперь неверны? Выясним, почему обработка Обновить данные для расчета среднего заработка часто не дает результата.
Программа не может просто «выкинуть» время из июля, потому что в июле зарегистрирован документ начисления на полную сумму и полное время. Чтобы исправить ситуацию, нужно заставить систему пересмотреть результаты расчета июля. Рассмотрим два пути:
Вариант А: Перерасчет прошлого периода (через Доначисления).
Если период (июль) уже закрыт для редактирования, в документе Больничный лист на вкладке «Пересчет прошлого периода» программа должна автоматически сторнировать зарплату за дни болезни. Однако для коррекции времени в среднем заработке иногда требуется зайти в раздел «Зарплата» — «Сервис» — Пересчеты и проверить, нет ли там записей по этому сотруднику, требующих обработки.
Вариант Б: Ручная корректировка данных (не рекомендуется). В документе, рассчитывающем средний заработок (например, в «Отпуске»), можно нажать на карандаш рядом с полем среднего заработка и вручную подправить данные за июль. Но это разовое решение, которое придется повторять при каждом расчете среднего в течение года.
Давайте посмотрим на ситуацию с точки зрения программиста. Чтобы убедиться, что данные записаны неверно, проанализируем движения документа Начисление зарплаты и взносов.
В типовой конфигурации запись в регистр накопления Данные о времени для расчета среднего заработка (общий) выглядит примерно так (в упрощенном виде):
// Пример логики формирования записи
Движение = РегистрыНакопления.ДанныеОВремениДляРасчетаСреднегоЗаработкаОбщий.Добавить();
Движение.Период = НачалоМесяца(ДатаНачисления);
Движение.Сотрудник = Объект.Сотрудник;
Движение.КалендарныеДни = 29.3; // Если месяц отработан полностью
Движение.ОтработаноДней = ФактРабочихДней;
Если больничный лист вводится позже, он должен создать сторнирующую запись в этот же регистр. Если этого не произошло, необходимо проверить Приоритеты начислений. Выясним, настроено ли вытеснение:
Чтобы минимизировать ручной труд и избежать ошибок, рекомендуем следующий алгоритм совместной работы расчетчика и кадровика:
Зарплата — Сервис — Пересчеты. Если там висят записи, значит, система обнаружила изменения «задним числом» и требует актуализации данных, в том числе и для среднего заработка.Таким образом, мы видим, что «проблема 29.3 дней» в ЗУП 3.1 — это не ошибка программы, а следствие работы механизма регистрации времени. Используя документ Отсутствие, вы обеспечиваете прозрачность учета и гарантируете точность последующих расчетов отпускных и командировочных расходов.