Стаж на последней (текущей) должности и в компании

Отчет (на СКД) выводит стаж сотрудников на последней(текущей) должности и в целом по работе в Компании.
Отличие данного отчета от существующих аналогов: https://infostart.ru/public/95470/ (ЗУП2.5, циклы), https://infostart.ru/public/587042/ (ЗУП3.1, только стаж в компании).
1) полностью одним пакетом запросов на СКД, значит быстро! На 2,3 тыс. сотрудников выводит сразу, без лишних обработок выборок в циклах и т.п.
2) сразу считает общий стаж и по должности и конвертирует результат в формат Лет, Месяцев, Дней.
Сделан по заявке от Отдела кадров по задаче Генерального.

На дату отчета рассчитывается разность дат по каждому актуальному(не уволенному) сотруднику:

  1. Стаж в компании     =  Дата отчета — Дата приема.
  2. Стаж на должности = Дата отчета  — Дата первого перевода на текущую(последнюю) должность сотрудника. Т.е. в кадровой истории могут меняться подразделения сотрудника, а должность прежняя. Например, продавец-кассир сначала в одном, затем в других магазинах.  

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

  • Разность дат в днях переводится в Лет, Месяцев, Дней:
  • Лет = Цел(ВсегоДней / 365), 
  • Месяцев = Цел( (ВсегоДней — Лет*365) /30), 
  • остаток Дней = ВсегоДней — Лет*365 — Месяцев*30

Из-за этого допустимы небольшие погрешности, поскольку количество лет определяется исходя из 365 дней в году, количество месяцев исходя из 30 дней в месяце.

P.S. У нас данные перенесены в ЗУП 3.1 с 01.09.2024 (начало кадровой истории) и этого достаточно. А если брать весь период переводов, то можно в запросе заменить КадровуюИсториюСотрудников на РеестрКадровыхПриказов, где данные о кадровых движениях с древних времён.

Проверено на  платформе 8.3.12.1685, конфигурация ЗУП.Корп с 3.1.2 по 3.1.11.

7 Comments

  1. duhh

    Пересчет в запросе, чтобы без погрешностей. Делал недавно список ветеранов.

    ВЫБОР
    КОГДА ДЕНЬ(&Д1) > ДЕНЬ(&Д2)
    ТОГДА ДЕНЬ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Д2, МЕСЯЦ, -1), МЕСЯЦ)) — ДЕНЬ(&Д1) + ДЕНЬ(&Д2)
    ИНАЧЕ ДЕНЬ(&Д2) — ДЕНЬ(&Д1)
    КОНЕЦ КАК Дней,
    ВЫБОР
    КОГДА ДОБАВИТЬКДАТЕ(&Д2, ГОД, ГОД(&Д2) * -1) < ДОБАВИТЬКДАТЕ(&Д1, ГОД, ГОД(&Д1) * -1)
    ТОГДА 12 — (МЕСЯЦ(&Д1) — МЕСЯЦ(&Д2))
    ИНАЧЕ МЕСЯЦ(&Д2) — МЕСЯЦ(&Д1)
    КОНЕЦ — ВЫБОР
    КОГДА ДЕНЬ(&Д1) > ДЕНЬ(&Д2)
    ТОГДА 1
    ИНАЧЕ 0
    КОНЕЦ КАК Месяцев,
    ВЫБОР
    КОГДА ДОБАВИТЬКДАТЕ(&Д2, ГОД, ГОД(&Д2) * -1) < ДОБАВИТЬКДАТЕ(&Д1, ГОД, ГОД(&Д1) * -1)
    ТОГДА ГОД(&Д2) — ГОД(&Д1) — 1
    ИНАЧЕ ГОД(&Д2) — ГОД(&Д1)
    КОНЕЦ КАК Лет
    

    Показать

    Reply
  2. milov.aleksey

    Проверил на актуальных релизах ЗУП.корп 3.1.8.246 и 3.1.9.108. Работает

    Reply
  3. DimaP

    На ЗУП 3.1.10.78 уже не работает.

    Пришлось переписывать.

    Reply
  4. milov.aleksey

    (3) Проверил на релизах 3.1.10.135, 174 — работает!

    Либо переходите на актуальную 10-ку, либо ошибку и решение в студию?

    Reply
  5. milov.aleksey

    (3) Специально развернул типовую ЗУП 3.1.10.78 корп с демо-данными, проверил: работает! Скриншот прилагаю

    Reply
  6. DimaP

    (5) На демо базе старые документы — конечно всё работает на старых данных.

    Попробуйте создать новую серию документов и увидите, что РС ТекущиеКадровыеДанныеСотрудников больше не заполняется данными, только ДатаПриёма и ДатаУвольнения (см. файл)

    Минусить для этого не обязательно.

    Reply
  7. milov.aleksey

    (6) вот это по делу. Работает, но нет новых данных. Адаптирую запрос под новые реалии и обновлю. КадроваяИсторияСотрудников в некоторых случаях тоже не панацея. А использовать программный интерфейс(типовые ТаблицыЗначений, возвращаемые типовыми функциями гораздо дольше и их тоже меняют)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *