При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 (особенно в версии КОРП) пользователи часто сталкиваются с ситуацией, когда у давно уволенного сотрудника в справочнике «Сотрудники» через ссылку «Трудовая деятельность» продолжает отображаться увеличивающийся стаж работы на предприятии. На первый взгляд это кажется ошибкой программы, однако за таким поведением стоит определенная логика системы. Рассмотрим подробно, почему это происходит и как мы можем исправить ситуацию.
Проанализируем механику работы программы. В 1С:ЗУП стаж не является статичным числом, которое записывается в базу при приеме и обновляется при увольнении. Это вычисляемое значение. Программа рассчитывает его в момент обращения к форме или формирования отчета.
Для расчета используются данные из регистра сведений Параметры стажей сотрудников. В этом регистре фиксируется дата, с которой начинается отсчет определенного вида стажа (например, Стаж работы на предприятии). Если в регистре указана только дата начала и не стоит специальный признак прерывания, программный код системы просто вычитает из текущей даты (даты просмотра) дату начала стажа.
Важно понимать разницу между объектами системы: Сотрудник уволен, его трудовой договор прекращен, но стаж привязан к Физическому лицу. Поскольку физическое лицо остается в базе, а запись в регистре стажей никак не ограничена датой окончания, счетчик продолжает работать «вечно». Документ Увольнение по умолчанию не создает записей в регистре параметров стажа, так как эти данные зачастую требуют ручного контроля со стороны кадровой службы.
Если нам необходимо, чтобы стаж конкретного сотрудника перестал расти после его увольнения, мы должны зафиксировать этот факт в его личной карточке. Разберем по шагам, как это сделать:
После установки этого флага программа поймет, что автоматический инкремент даты должен остановиться на текущем значении (или значении, рассчитанном на дату прерывания). Однако стоит помнить: если этот сотрудник когда-нибудь вернется в организацию, кадровику придется вручную вносить новую запись, чтобы стаж возобновился с учетом накопленного ранее периода.
Вместо того чтобы указывать дату начала работы, мы можем ввести стаж в формате «количество лет, месяцев и дней на определенную дату». Рассмотрим этот вариант подробнее. Если мы введем, что на дату увольнения стаж составляет 10 лет и 5 месяцев, и зафиксируем это, программа перестанет прибавлять время, так как у нее больше нет «отправной точки» (даты начала) для динамического расчета.
Часто задача стоит не в том, чтобы исправить данные в карточке каждого уволенного, а в том, чтобы построить корректный отчет по стажам (например, для выдачи подарков юбилярам, как упоминалось в обсуждении). Типовой отчет Стажи сотрудников считает данные на текущую дату. Чтобы получить стаж именно на дату увольнения, нам потребуется доработка отчета или создание собственной обработки.
Для программного получения стажа в ЗУП 3.1 рекомендуется использовать возможности общего модуля КадровыйУчетРасширенный. Проанализируем пример кода, который позволяет подготовить данные для расчета стажа через временные таблицы:
// Создаем менеджер временных таблиц для работы с запросом
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
// Устанавливаем параметры: массив сотрудников и виды стажа
Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);
Запрос.УстановитьПараметр("СтажНаПредприятии", Справочники.ВидыСтажа.НайтиПоНаименованию("Стаж работы на предприятии"));
// Формируем временную таблицу ВТИсходныеДанные.
// Важно: вместо текущей даты в поле "Дата" мы подставляем дату увольнения сотрудника!
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| Сотрудники.Ссылка КАК Сотрудник,
| ЕСТЬNULL(КадроваяИстория.Период, &ТекущаяДата) КАК Дата,
| &СтажНаПредприятии КАК ВидСтажа
|ПОМЕСТИТЬ ВТИсходныеДанные
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезыПоследних(&ТекущаяДата, Сотрудник В (&МассивСотрудников) И ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)) КАК КадроваяИстория
| ПО Сотрудники.Ссылка = КадроваяИстория.Сотрудник
|ГДЕ
| Сотрудники.Ссылка В(&МассивСотрудников)";
Запрос.Выполнить();
// Вызываем типовой метод для расчета стажа на указанные во временной таблице даты
КадровыйУчетРасширенный.СоздатьВТСтажиСотрудников(Запрос.МенеджерВременныхТаблиц);
// Теперь мы можем выбрать готовый результат расчета (в месяцах или днях)
Запрос.Текст = "
|ВЫБРАТЬ
| ВТСтажиСотрудников.Сотрудник КАК Сотрудник,
| ВТСтажиСотрудников.РазмерЛет КАК Лет,
| ВТСтажиСотрудников.РазмерМесяцев КАК Месяцев
|ИЗ ВТСтажиСотрудников КАК ВТСтажиСотрудников";
Результат = Запрос.Выполнить().Выгрузить();
В данном примере мы выяснили, что ключевым моментом является наполнение таблицы ВТИсходныеДанные. Если мы передадим туда дату увольнения, функция СоздатьВТСтажиСотрудников вернет корректный стаж, накопленный сотрудником именно к моменту ухода из организации, игнорируя время, прошедшее после увольнения.
Если уволенных сотрудников много и по всем ним нужно «заморозить» стаж, мы можем воспользоваться стандартной обработкой Групповое изменение реквизитов. Нам необходимо внести изменения в регистр сведений Параметры стажей сотрудников, установив флаг Стаж прерван для всех записей, где физическое лицо находится в состоянии «Уволен».
Проанализируем риски этого метода: при массовом изменении нужно быть предельно аккуратными с отборами. Обязательно проверяйте, чтобы условие затрагивало только те виды стажа, которые действительно должны быть прерваны (например, стаж работы в конкретной компании), и не затронуло общий страховой стаж, если это не требуется по логике учета.
Подведем итог нашему исследованию. То, что стаж продолжает расти — это не баг, а особенность архитектуры 1С:ЗУП 3.1, где стаж вычисляется динамически относительно даты начала.
Для кадровиков: лучшей практикой будет установка признака прерывания стажа в момент оформления увольнения в карточке трудовой деятельности сотрудника.
Для разработчиков: при создании отчетов по уволенным сотрудникам никогда не полагайтесь на текущую дату. Всегда вычисляйте стаж на дату документа Увольнение, используя программные интерфейсы общего модуля КадровыйУчетРасширенный. Это гарантирует точность данных даже в тех случаях, когда флаг прерывания в базе не установлен.