Как исправить ошибку вытеснения и выпадение начислений при переходящем больничном в 1С:ЗУП 3.1?

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

При расчете зарплаты в конфигурации 1С:Зарплата и управление персоналом 3.1 расчетчики и администраторы нередко сталкиваются с ситуацией, когда при вводе переходящего больничного листа за прошлый период (например, за февраль в марте) начисления за прошлый месяц неожиданно «выпадают» или рассчитываются с нулевым результатом. Это поведение зарегистрировано разработчиками как ошибка с кодом 60017161.

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

Почему возникает ошибка 60017161 и как она работает

В платформе «1С:Предприятие 8.3» алгоритм вытеснения периодов действия работает по-разному в зависимости от расчетного периода:

  1. Внутри одного периода регистрации: вытеснение отрабатывает по списку ведущих и вытесняющих видов расчета напрямую.
  2. Между разными периодами регистрации: механизм вытеснения использует формирование записей сторно через специальный метод получения дополнения.

Когда документ Больничный лист регистрируется месяцем позже, чем предшествующий ему документ Отсутствие (болезнь, прогул, неявка), в механизме согласования периодов возникает сбой. В результате нарушается целостность служебной таблицы фактических периодов действия регистра расчета Начисления. Программа перестает корректно воспринимать границы действия начислений, и дни за прошлый месяц перестают учитываться.

Ситуацию нередко усугубляет динамическое обновление конфигурации («демоны») на сервере предприятия: кэш метаданных зависает, что приводит к рассинхронизации таблиц базы данных и серверных структур.

Способ 1. Быстрое «Тестирование и исправление» без долгого цикла выгрузки в dt

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

Однако выгрузка в .dt помогает исключительно потому, что при обратной загрузке платформа принудительно перестраивает внутренние структуры таблиц и пересчитывает фактические периоды действия. Того же самого результата можно добиться значительно быстрее:

  1. Создадим резервную копию информационной базы (через средства СУБД или штатную выгрузку).
  2. Запустим конфигуратор рабочей базы в монопольном режиме.
  3. Перейдем в главное меню: Администрирование → Тестирование и исправление...
  4. Снимем все флажки и оставим активным только пункт «Пересчет итогов». При необходимости можно также включить флажок «Реструктуризация таблиц информационной базы».
  5. Установим режим проверки: «Тестирование и исправление», а в действиях при наличии ошибок выберем «Создавать объекты» / «Очищать ссылки».
  6. Нажмем кнопку «Выполнить».

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

Способ 2. Очистка серверного кэша метаданных

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

  1. Завершим все активные пользовательские и фоновые сеансы в консоли кластера серверов 1С.
  2. Остановим службу «Агент сервера 1С:Предприятия 8.3» через оснастку служб операционной системы.
  3. Перейдем в каталог данных кластера (по умолчанию: C:\Program Files\1cv8\srvinfo\...).
  4. Удалим временные файлы сеансов и кэша (папки с длинными UID-именами и каталоги конфигураций, не затрагивая конфигурационные файлы кластера).
  5. Запустим службу агента сервера заново.

Способ 3. Установка официального патча или обновление конфигурации

Поскольку ошибка 60017161 признана разработчиками 1С, наиболее надежным и долговременным решением является исправление на уровне программного кода конфигурации:

  1. Установка патча (расширения): Перейдем в раздел «Администрирование» → «Обслуживание» → «Обновление программы» → «Установка обновлений и исправлений (патчей)». Если для текущего релиза конфигурации доступно исправление ошибки вытеснения, загрузим и применим его без необходимости обновления всей конфигурации целиком.
  2. Обновление релиза: Если патч недоступен, выполним штатное обновление конфигурации на актуальный релиз (например, 3.1.37.14 или выше), где ошибка в модулях расчета уже исправлена в типовой поставке.

Способ 4. Методические приемы обхода в учете

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

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