Как автоматизировать расчет стажа по трудовой деятельности в 1С:ЗУП 2.5?

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

При ведении кадрового учета в программе 1С:Зарплата и Управление Персоналом 2.5 пользователи часто сталкиваются с необходимостью вручную подсчитывать страховой и общий стаж сотрудника, переводя даты из трудовой книжки в количество лет, месяцев и дней. Разберем причины такого поведения типовой конфигурации, а также рассмотрим варианты автоматизации этого процесса с доработкой и без снятия конфигурации с поддержки.

Архитектурные особенности учета стажа в ЗУП 2.5

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

  1. Табличная часть «Трудовая деятельность»: располагается в объекте Справочник.ФизическиеЛица. Она носит исключительно информационный характер и служит главным образом для вывода печатной формы личной карточки Т-2.
  2. Регистр сведений «Стажи физических лиц»: именно из этого регистра расчетные механизмы программы (например, при расчете документа «Больничный лист») берут данные. Запись формируется по схеме: Вид стажа + Дата отсчета + Начальное количество лет, месяцев и дней.

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

Особенности алгоритма подсчета страхового стажа

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

  1. Пересекающиеся периоды работы: если сотрудник работал в нескольких организациях одновременно (по совместительству), интервалы дат могут накладываться друг на друга. Простое суммирование строк приведет к завышению стажа. Алгоритм должен предварительно объединять пересекающиеся временные отрезки.
  2. Правило перевода дней и месяцев: в первую очередь суммируются полные календарные годы и месяцы. Оставшиеся неполные периоды в днях суммируются отдельно и переводятся в месяцы из расчета: 30 дней = 1 месяц, а каждые 12 месяцев = 1 год.
  3. Разделение видов стажа: нестраховые периоды (например, военная служба) должны учитываться отдельно в соответствующих видах стажа.

Вариант 1. Разработка внешней обработки (без снятия с поддержки)

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

Рассмотрим по шагам логику работы такой обработки:

  1. Обработка получает ссылку на выбранное физическое лицо или обрабатывает список сотрудников пакетом.
  2. Считываются строки табличной части ТрудоваяДеятельность справочника ФизическиеЛица.
  3. Алгоритм нормализует периоды (объединяет пересечения по датам начала и окончания).
  4. Вычисляется суммарное количество лет, месяцев и дней на дату отсчета (как правило, дата приема на работу или дата увольнения с последнего места работы).
  5. Формируется набор записей в регистре сведений СтажиФизическихЛиц для соответствующего вида стажа (например, «Страховой стаж для оплаты больничных листов»).

Посмотрим на пример логики записи рассчитанного стажа в регистр сведений:


НаборЗаписей = РегистрыСведений.СтажиФизическихЛиц.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ФизическоеЛицо.Установить(ТекущееФизЛицо);
НаборЗаписей.Отбор.ВидСтажа.Установить(Справочники.ВидыСтажа.Страховой);

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

НаборЗаписей.Записать();

Вариант 2. Доработка формы справочника «Физические лица»

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

Разберем порядок доработки:

  1. Открываем форму элемента справочника ФизическиеЛица (или форму редактирования трудовой деятельности).
  2. Добавляем командную кнопку (например, «Рассчитать стажи») на панель управления табличной части ТрудоваяДеятельность.
  3. В модуль формы добавляем процедуру-обработчик нажатия кнопки, которая считывает строки текущей табличной части, рассчитывает стаж и сразу обновляет соответствующие строки в таблице стажей на форме.
  4. При необходимости сохранять стаж по каждому конкретному месту работы в табличную часть ТрудоваяДеятельность добавляются реквизиты длительности (лет, месяцев, дней), однако для типовых расчетных механизмов первичным остается заполнение регистра сведений СтажиФизическихЛиц.

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

← На главную