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