При расчете зарплаты в конфигурации 1С:Зарплата и управление персоналом 3.1 расчетчики и администраторы нередко сталкиваются с ситуацией, когда при вводе переходящего больничного листа за прошлый период (например, за февраль в марте) начисления за прошлый месяц неожиданно «выпадают» или рассчитываются с нулевым результатом. Это поведение зарегистрировано разработчиками как ошибка с кодом 60017161.
Проанализируем суть этой проблемы, выясним, почему она возникает на уровне платформы и регистров расчета, а также разберем по шагам быстрые и надежные способы восстановления корректного учета без долгих простоев информационной базы.
В платформе «1С:Предприятие 8.3» алгоритм вытеснения периодов действия работает по-разному в зависимости от расчетного периода:
Когда документ Больничный лист регистрируется месяцем позже, чем предшествующий ему документ Отсутствие (болезнь, прогул, неявка), в механизме согласования периодов возникает сбой. В результате нарушается целостность служебной таблицы фактических периодов действия регистра расчета Начисления. Программа перестает корректно воспринимать границы действия начислений, и дни за прошлый месяц перестают учитываться.
Ситуацию нередко усугубляет динамическое обновление конфигурации («демоны») на сервере предприятия: кэш метаданных зависает, что приводит к рассинхронизации таблиц базы данных и серверных структур.
Многие системные администраторы применяют так называемый «путь самурая»: выгружают базу на сервере в файл .dt, загружают его в файловый вариант, запускают chkdbfl.exe, а затем выполняют обратную загрузку на SQL-сервер. Такой цикл может занимать несколько часов.
Однако выгрузка в .dt помогает исключительно потому, что при обратной загрузке платформа принудительно перестраивает внутренние структуры таблиц и пересчитывает фактические периоды действия. Того же самого результата можно добиться значительно быстрее:
Пересчет итогов напрямую в рабочей базе выполняется в разы быстрее полного цикла с выгрузкой/загрузкой и восстанавливает служебную таблицу фактических периодов действия регистра Начисления.
Если рассинхронизация вызвана сбоем кэширования после динамического обновления, выполним процедуру очистки кэша на сервере 1С:
C:\Program Files\1cv8\srvinfo\...).Поскольку ошибка 60017161 признана разработчиками 1С, наиболее надежным и долговременным решением является исправление на уровне программного кода конфигурации:
3.1.37.14 или выше), где ошибка в модулях расчета уже исправлена в типовой поставке.Если нет возможности немедленно перезагружать сервер или обновлять релиз, проверим прикладные документы, блокирующие расчет:
Табель, он фиксирует рабочее и нерабочее время жестко. При расчете методом отклонений документ Табель может блокировать автоматическое вытеснение. Попробуем распровести документ Табель за спорный месяц и перезаполнить документ начисления.Отсутствие (болезнь, прогул, неявка) не помогает, откроем этот исходный документ и воспользуемся ссылкой «Исправить» в левом нижнем углу формы. Созданный документ-исправление зарегистрирует корректировку текущим периодом, корректно закрыв временные границы в регистрах расчета.Сторнирование начислений (раздел «Зарплата»), вручную отсторнируем исходную запись отсутствия за прошлый месяц, после чего рассчитаем начисления или больничный лист заново.