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