В практической работе бухгалтера и кадровика при расчете отпуска в программе 1С:Зарплата и управление персоналом 3.1 (или 1С:ЗКГУ 3.1) иногда возникает крайне неприятная ситуация. При создании документа Отпуск по конкретному сотруднику программа наотрез отказывается автоматически определять расчетный период для среднего заработка. В результате этого средний заработок равен нулю, и отпускные не начисляются. При этом у остальных сотрудников базы этот же документ рассчитывается абсолютно корректно, а у проблемного сотрудника другие документы (например, Больничный лист) могут создаваться и рассчитываться без каких-либо замечаний.
В рамках этой статьи мы подробно разберем, почему возникает эта ошибка, какие внутренние механизмы платформы «1С:Предприятие 8.3» за это отвечают, проанализируем взаимосвязь проблемы с законодательством (Постановление Правительства РФ № 922) и рассмотрим пошаговые инструкции по устранению этого сбоя без радикальных мер вроде удаления или пересоздания сотрудника.
Рассмотрим эту проблему детально, изучив как методологические особенности учета, так и техническое устройство регистров конфигурации.
---
Согласно Положению об особенностях порядка исчисления средней заработной платы (утвержденному Постановлением Правительства РФ от 24.12.2007 № 922), стандартный расчетный период для отпуска составляет 12 предшествующих календарных месяцев. Однако если сотрудник длительное время находился в декретном отпуске, отпуске по уходу за ребенком или в затяжном отпуске за свой счет, у него за эти 12 месяцев полностью отсутствуют фактически отработанные дни и начисленная заработная плата.
В соответствии с пунктом 6 Постановления № 922, в этом случае расчетный период должен быть сдвинут назад, на предшествующий период времени, равный расчетному, в котором у сотрудника были фактически отработанные дни и заработок.
В чем заключалась техническая проблема старых релизов (включая 3.1.12):
В ранних версиях программы 1С:ЗУП 3.1 алгоритм автоматического сдвига расчетного периода при полном отсутствии данных за 12 месяцев часто давал сбой. Программа видела «абсолютно пустой» период и вместо того, чтобы автоматически сдвинуть его назад, просто возвращала пустые значения дат начала и окончания расчетного периода или устанавливала некорректные даты (например, текущий месяц). Бухгалтеру приходилось нажимать на кнопку с зеленым карандашом («Изменить данные расчета среднего заработка») и вручную сдвигать период на те годы, когда у сотрудника был реальный доход.
Как это работает в современных релизах 1С (начиная с версии 3.1.34.129):
Разработчики фирмы «1С» автоматизировали этот процесс. Теперь программа самостоятельно анализирует регистр сведений Состояния сотрудников. Если за 12 месяцев у сотрудника не зафиксировано рабочих состояний, система автоматически сдвигает период помесячно назад до тех пор, пока не обнаружит данные о времени или начислениях. При этом пользователю выводится наглядное предупреждение: «Отсутствуют отработанные дни в расчетном периоде, расчетный период изменен на...». Если у вас старый релиз программы, данная ошибка будет регулярной, пока вы не обновите конфигурацию.
---
Основным техническим источником данных для расчета среднего заработка в документах Отпуск и Командировка является регистр накопления Данные о времени для расчета среднего (общий). В процессе эксплуатации базы (особенно после переноса данных из старых версий 1С:ЗУП 2.5, некорректного обновления базы или ручного изменения документов «задним числом») в этом регистре могут появиться поврежденные или противоречивые записи.
Например, в регистре могут зафиксироваться пересекающиеся периоды работы или записи с пустыми измерениями. При формировании документа Отпуск программа выполняет сложный запрос к этому регистру. Получив в ответ противоречивые данные (или пустой результат из-за некорректных связей таблиц), алгоритм «сбивается» и не может определить границы расчетного периода для конкретного физического лица.
Именно поэтому в рассматриваемой ситуации помогло увольнение и повторный прием сотрудника с созданием нового элемента в справочнике Сотрудники. Для нового элемента базы данных все записи в регистре начали записываться «с чистого листа», без учета старых накопленных ошибок по прежнему физическому лицу.
---
Регистр сведений Состояния сотрудников отвечает за хранение информации о текущем статусе работника (работает, болеет, находится в отпуске без оплаты и т.д.). Каждое событие имеет дату начала и дату окончания.
Если в истории сотрудника был документ (например, отпуск без сохранения оплаты или больничный), который впоследствии был некорректно распроведен, удален напрямую без контроля ссылочной целостности или изменен программно, в регистре Состояния сотрудников могла остаться незакрытая запись (без даты окончания). Программа технически считает, что сотрудник непрерывно находится в состоянии отсутствия, что блокирует корректную работу алгоритмов автозаполнения дат в кадровых и расчетных документах.
---
Иногда корни проблемы уходят в настройки видов начислений. Проанализируем настройки основного начисления сотрудника (например, Оплата по окладу или Оплата по часовому тарифу):
Если на вкладке «Учет времени» в карточке начисления ошибочно установлен переключатель в положение «Дополнительная оплата за уже оплаченное время» или За работу в праздничные дни вместо основного значения «За работу полную смену в пределах нормы времени», программа перестает регистрировать отработанное время сотрудника в специализированных регистрах для расчета среднего заработка.
В результате получается парадокс: у сотрудника есть начисленные суммы (деньги), но отработанных дней с точки зрения регистров среднего заработка у него ровно ноль. Программа не может сопоставить доходы с отработанным временем и ломает автоматическое заполнение дат периода.
---
Давайте разберем по шагам, как локализовать и устранить эту ошибку, не прибегая к увольнению сотрудника и созданию «дублирующих» карточек в системе.
Проанализируем поведение программы. Попробуем создать документ Отпуск будущим периодом. Если мы рассчитываем отпуск в январе, попробуем указать в документе месяц начисления — февраль или март.
Если при переносе даты начисления на более поздний период автозаполнение начинает отрабатывать нормально, это явный признак того, что в стандартном 12-месячном периоде для исходного месяца расчета у сотрудника полностью отсутствуют данные о доходах и времени, а в базе установлена старая версия конфигурации, не поддерживающая автоматический сдвиг.
Решение: Обновите конфигурацию до актуального релиза. В качестве временной меры используйте ручную корректировку расчетного периода по кнопке «Карандаш» в форме ввода данных о среднем заработке.
Для устранения возможных сбоев в регистрах накопления разработчики предусмотрели специальный инструмент, который пересчитывает данные для среднего заработка на основе первичных документов начислений.
Выполним следующие действия:
Отпуск.Если обновление среднего заработка не помогло, проверим базу на наличие «зависших» состояний по сотруднику. Для этого нам понадобятся права администратора или программиста.
<Объект не найден...>).Для быстрого поиска таких ошибок технический специалист может воспользоваться консолью запросов или написать простой код для выгрузки незакрытых состояний:
// Пример запроса для поиска незакрытых состояний сотрудника
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СостоянияСотрудников.Сотрудник КАК Сотрудник,
| СостоянияСотрудников.Состояние КАК Состояние,
| СостоянияСотрудников.Период КАК ДатаНачала,
| СостоянияСотрудников.Окончание КАК ДатаОкончания
|ИЗ
| РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
|ГДЕ
| СостоянияСотрудников.Сотрудник = &ПроблемныйСотрудник
| И СостоянияСотрудников.Окончание = ДАТАВРЕМЯ(1, 1, 1)";
Запрос.УстановитьПараметр("ПроблемныйСотрудник", ПроблемныйСотрудникСсылка);
РезультатЗапроса = Запрос.Выполнить();
Если такие строки найдены, их необходимо аккуратно удалить из регистра (или восстановить битые документы-основания).
Аналогичным образом через «Функции для технического специалиста» проверим регистр накопления Данные о времени для расчета среднего (общий).
Если выяснилось, что в регистре среднего заработка отсутствуют дни при наличии сумм, проверим настройки видов расчетов:
Оплата по окладу).Рабочее время, а в поле Вид времени указано Явка (или иной подходящий рабочий вид времени). Если там установлено значение, исключающее фиксацию отработанного времени для среднего заработка, измените его на корректное и перепроведите документы начисления зарплаты за расчетный период.---
Автоматическое определение расчетного периода в 1С:ЗУП 3.1 — это результат работы сложных внутренних алгоритмов, связывающих кадровые состояния сотрудника, настройки видов начислений и данные специальных регистров накопления времени. Если программа сбоит только по одному сотруднику, проблема гарантированно кроется в его накопленных данных.
Прежде чем принимать радикальные решения о пересоздании карточки сотрудника (что повлечет за собой разрыв кадровой истории и проблемы со сдачей отчетности ЕФС-1, РСВ и НДФЛ), выполните диагностику по нашей инструкции. В 90% случаев запуск обработки Обновить данные для расчета среднего заработка или исправление «зависшего» кадрового состояния полностью решает проблему.