Почему у сотрудника в 1С:ЗУП 3.1 пропадает статус «Работает» после отпуска и как это исправить?

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

В практике работы с программой «1С:Зарплата и управление персоналом 8» (редакция 3.1) бухгалтеры и программисты часто сталкиваются с ситуацией: сотрудник уходит в отпуск (особенно в отпуск без сохранения оплаты), а после его окончания статус в карточке сотрудника остается пустым или некорректным. Вместо привычного статуса «Работает» система показывает пустоту, что в дальнейшем приводит к критическим ошибкам при расчете среднего заработка, определении остатков отпусков и синхронизации с сервисом «1С:Кабинет сотрудника».

В этой статье мы подробно разберем, почему возникает такая ситуация, как она связана с историческими данными (переносом из 7.7 или 2.5) и какими способами можно восстановить корректное состояние сотрудника в программе.

Разберем причину проблемы: механизм регистра «Состояния сотрудников»

Для начала проанализируем, как 1С определяет, работает человек в данный момент или нет. В системе ЗУП 3.1 существует важный периодический регистр сведений — СостоянияСотрудников. Именно в нем хранятся записи типа «Работает», «В отпуске», «Болеет», «Командировка».

Логика программы при оформлении отсутствия (например, документа ОтпускБезСохраненияОплаты) следующая:

  1. Система фиксирует новое состояние «В отпуске...» с определенной даты.
  2. Система указывает дату окончания этого состояния.
  3. Важный момент: по завершении периода отсутствия программа должна «вернуть» сотрудника в его исходное состояние.

Проблема «пустого статуса» возникает тогда, когда в базе данных отсутствует «опорная» запись о том, что сотрудник был принят на работу и находился в состоянии Работа до момента ухода в отпуск. Если этой первичной записи нет, то после окончания отпуска системе просто не к чему возвращаться, и статус становится пустым.

Выясним причину сбоя: «наследие» старых переносов

Как правило, подобная проблема проявляется у «старых» сотрудников, принятых в организацию еще в 90-х или начале 2000-х годов. Рассмотрим ситуацию подробнее: при многократных переносах данных (например, из 1С 7.7 в ЗУП 2.5, а затем в ЗУП 3.1) информация о приеме на работу фиксируется не типовым документом ПриемНаРаботу, а техническим документом ПереносДанных.

В старых релизах ЗУП 3.1 регистр СостоянияСотрудников не всегда заполнялся при переносе данных, так как расчетные механизмы тогда меньше зависели от этого регистра. Однако с выходом обновлений (начиная с релизов 8.3.14.ххх и выше), где появились Электронные трудовые книжки (СЗВ-ТД) и Кабинет сотрудника, контроль целостности состояний стал значительно строже.

Если сотрудник работает в организации 20 лет и за это время ни разу не уходил в отпуск или на больничный (в рамках текущей базы), программа может «не замечать» отсутствие записи в регистре. Но как только вводится первый документ отсутствия, механизм состояний ломается.

Способ 1: Использование внешней обработки (для программистов)

Если таких сотрудников много, самым быстрым способом будет написание небольшой обработки, которая принудительно создаст записи в регистре. Рассмотрим пример логики кода, который позволяет установить сотруднику статус Работа:


// Пример создания записи в регистре СостоянияСотрудников
МенеджерЗаписи = РегистрыСведений.СостоянияСотрудников.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Сотрудник = ВыбранныйСотрудник;
МенеджерЗаписи.Организация = ВыбранныйСотрудник.Организация;
МенеджерЗаписи.Период = ДатаПриемаСотрудника; // Важно указать дату реального приема
МенеджерЗаписи.Состояние = Перечисления.СостоянияСотрудника.Работа;
МенеджерЗаписи.ВидСобытия = Перечисления.ВидыКадровыхСобытий.Прием;

Попытка
    МенеджерЗаписи.Записать();
    Сообщить("Статус сотрудника успешно обновлен!");
Исключение
    Сообщить("Ошибка записи: " + ОписаниеОшибки());
КонецПопытки;

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

Способ 2: Корректировка документа «Перенос данных»

Если мы хотим решить проблему «штатными» средствами без программирования, проанализируем документы, которыми сотрудник был введен в базу. Посмотрим на алгоритм действий:

  1. Перейдем в раздел Администрирование — Перенос данных.
  2. Найдем документы с кодами ПЕРЕНОС_ПР (Приемы) или аналогичные, относящиеся к периоду ввода начальных данных.
  3. Внутри документа нажмем кнопку «Настройка состава регистров».
  4. В открывшемся списке найдем регистр сведений Состояния сотрудников и установим галочку.
  5. На появившейся вкладке регистра добавим строку для проблемного сотрудника, указав его состояние «Работа» с даты приема (или с даты начала эксплуатации базы).

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

Способ 3: Создание «пустого» кадрового перевода

Иногда систему можно «подтолкнуть» к пересчету состояний, создав документ КадровыйПеревод. Разберем, как это сделать:

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

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

Влияние на расчет среднего заработка и остатки отпусков

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

Важный совет: Если вы видите аномально большие цифры в остатках отпусков, первым делом проверьте именно историю состояний в карточке сотрудника (ссылка «Печать» — «Карточка сотрудника (Т-2)» или через отчет «Штатные сотрудники» с выводом поля состояния).

Связь с сервисом «1С:Кабинет сотрудника»

Посмотрим на ситуацию со стороны современных облачных сервисов. Сервис «1С:Кабинет сотрудника» активно использует данные об остатках отпусков и текущем статусе для публикации в личном кабинете работника. В релизах 8.3.14.183 и выше механизмы сбора этой информации были переработаны. Теперь любое «белое пятно» в истории состояний за последние годы работы приводит к тому, что данные в кабинет либо не выгружаются, либо выгружаются с ошибками, что вызывает шквал вопросов от сотрудников к кадровой службе.

Итоги

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

Помните, что чистота данных в регистрах состояний — это залог правильной работы всей подсистемы кадрового учета и расчета зарплаты в 1С:ЗУП 3.1.

← На главную