Как работают лимиты отсутствий

Лимит это банка, в которой лежат орешки. Достали орешек, количество лимита уменьшилось. Вернули – увеличилось. В системе есть два вида лимитов: лимиты отсутствий (инфотип 2006) и лимиты присутствий (инфотип 2007). Когда мы вводим отсутствие или присутствие, которое исчерпывает лимит (забирает орешек), система сокращает так называемое базовое право. Базовое право это количество орешков в банке – сколько всего дней или часов можно взять за определенный период.

У лимита есть две важные характеристики: когда мы его заработали и когда можно его потратить. Сначала зарабатываем, потом тратим. Период зарабатывания называется периодом действия. Тратим мы лимит в период использования. Если не успели потратить, то все сгорает – приходит грызун и ночью кушает все орешки.

Лимиты можно зарабатывать двумя способами. Либо кто-то выдает нам целую банку с орешками за отработанный период, либо нам каждый маленький промежуток времени дают по одному орешку в банку. Первый это генерация через инфотип программой RP_QTA00. Второй через оценку времени.

Чтобы отслеживать связь отсутствий с лимитом (аналогично связь присутствия с лимитом присутствия) система использует промежуточную таблицу. Таблица PTQUODED содержит несколько важных параметров: ссылку на лимит, ссылку на отсутствие, табельный номер и сколько орешков было взято. При создании отсутствия или лимита система генерирует уникальный номер, который справа добавляется номером инфотипа: XXXXXX2006 или XXXXX2001. Даже если вы не сохраняете запись, номер все равно выделяется.

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

Если мы вносим погашение лимита через 416 инфотип, то такая запись также имеет свой уникальный номер с суффиксом 0416, а в PTQUODED сохраняется одной строчкой. Когда мы создаем запись ИТ0416, где указывается несколько лимитов для компенсации, то на самом деле создается несколько записей в PTQUODED, по одной на каждый лимит, а экранная логика 0416 собирает по PTQUODED внешний вид инфотипа.

Таким образом система всегда знает кто и каким образом исчерпал лимит (стащил орешки). Именно с помощью PTQUODED система в приказе на отпуск в российской локализации определяет за какой период был этот отпуск.

Еще интересный момент. В 2001, 2006, 0416 инфотипах есть отдельное поле для логической системы. То есть система учитывает в какой системе было внесено отсутствие, лимит или 416. При этом у SAP нет стандартных механизмов для удаленной работы с лимитами или 416 инфотипом. Казалось бы загадка, для чего нужна логическая система? Ответ простой – CATS. Это единственный инструмент, который как и организацинонный мендежмент относится к Cross Application Components – универсальный инструмент для всех модулей системы. CATS может учитывать время из разных систем, а так как в CATS есть отсутствия и присутствия, то они могут сливаться в HR из разных систем через стандартные BAPI интерфейсы. Здесь-то и нужна логическая система, чтобы понять откуда прилетело отсутствие или присутствие.

В системе нет ни одного IDOC для передачи 2001, 2006 или 0416 инфотипов. Это также связано с тем, что уникальные номера генерируются в каждой системе в рамках своих диапазонов, а значит есть риск пересечения, когда данные попадут в одну систему. Видимо поэтому вендор и отказался от реализации интеграции по этим инфотипам. Если вы хотите сделать реализацию передачи этих инфотипов, то нужно помнить о нумерации и PTQUODED. При приеме такого самодельного IDOC с одним из вышеуказанных инфотипов нужно самостоятельно отслеживать и формировать уникальные номера, учитывать их в PTQUODED, пересчитывать лимиты. Вы же помните, что IDOC ложится в базу “как есть”, без логики инфотипа?

Как сделать свой IDOC можно здесь Передача российских инфотипов по ALE

Подписывайтесь, распространяйте материал – скоро я расскажу про специфику передачи отдельных инфотипов по ALE. Об этом никто кроме отладчика вам не расскажет. Разве что заядлые интеграторы, но таких я всего пару-тройку человек в стране знаю.


Вопрос – ответ. Лимит отсутствия

Вопрос. Лимит отсутствия:

Сгенерили лимит на рабочий год. Потом человека перевели на должность, где лимита больше (или меньше). Может система пересчитать старый лимит автоматически (полуавтоматически)? Я пока такое видел только при ограничении ИТ 2006 при увольнении.

Ответ:

У меня есть несколько вариантов решения.

  1. При переводе ограничивать период действия лимита и заводить новый. Иначе система не поймет, что надо изменить базовое право. Это вроде бы голый стандарт.
  2. При переводе в динамическом мероприятии программно запланировать запуск программы генерации лимитов с передачей в ее параметры периода и табельного номера. Это позволит избежать блокировки табельного номера (нельзя запустить программу сразу же, так как табельный номер еще блокирован мероприятием). Это можно обойти технический, но не стоит. Техническим регламентом определить время и запускать. Для пользователя это прозрачно с одним исключением – если приказ нужно печатать сразу же, то цифры будут неактуальные. Либо планировать такой запуск на совершения события (объекты BUS*).
  3. Генерировать лимит в оценке времени. Зачастую оценка времени запускается ежесуточно, поэтому лимит автоматически через user-exit можно заполнять данными с новой позиции. Опять же в случае необходимости приказа “сейчас и сразу”, кадровик может сам запустить оценку времени по одному табельному номеру, а затем распечатать приказ.

Сокращение лимитов отсутствий

Ни разу не пользовался такой функцией как сокращение лимитов отсутствий. Появилась задачка сокращать отпуск на время отсутствия работника. В России, помню, писал user-exits для этого. А в США нашелся стандартный способ. Создаем правило сокращения следующего вида.

В правилах генерации лимитов присваиваем это правило. Теперь система будет сокращать базовое право, но только по календарным дням. Отсутствия, которые необходимо использовать для сокращения, указываются в ракурсе V_554S_M.  Обратите внимание, что отсутствие будет учтено для сокращения только в случае, если при сохранении его в 2001 инфотипе будет заполнено поле “Календарные дни”. 


Отпуск за вредные условия труда

Нашел в старых записках описание, как создавать отпуск за вредные/особые условия труда. Критиковать кривизну реализации бессмысленно, так как это было в “мохнатые” годы. Поэтому приветствуется только улучшайзинг! В САП главное понять принцип, получить вектор, а дальше включить фантазию 😉

Для генерации отпусков за работу во вредных условиях труда (ВУТ) создаем лимит  (например, код 06) с автоматической генерацией в оценке времени. Для генерации лимита необходимы два условия:

  1. Наличие связи штатной должности (S) с объектом вредных условий (CH). Для объекта CH создаем инфотип 9100, в котором указывается количество дней отпуска за ВУТ (IT9100-ZDAYS). При генерации лимита в user-exit EXIT_SAPLHRLV_004 читается этот ИТ на оцениваемую дату и устанавливается количество базового права в лимите согласно HRP9100-ZDAYS. Транзакция CMOD для создания расширения.
  2. Сотрудник должен отработать более 50% рабочего времени за смену для получения права на отпуск. Для этого используется вид времени 9000. В правиле вычисляется процент отработанного времени путем:  вид времени 0002/вид времени 0050. Если больше 0.5, то вид времени 9000 = 1, иначе – 0. В функции QUOTA при генерации лимита производится умножение начисленного права на отпуск за день на вид времени 9000 «Фактич время > 50%». То есть, отработал больше 0.5 смены, то умножаем начисленное право на 1, в противном случае на ноль.

При накоплении права на отпуск кратного целой единице, система переносит целую единицу в 2006 ИТ. То есть, за 3 дня накопили 1,12 дня отпуска, то один день отпуска начислится в ИТ2006.

Читать далее


Лимит присутствия

Случайно обнаружилось, что лимиты присутствия можно вводить с любым периодом и без указания часов. А сами присутствия либо на несколько дней (периодом), либо только часы в один день. Думали, что глюк. Оказалось фича 🙂 То есть, можно ввести лимит присутствия на месяц, условно, и тем самым разрешить в месяце столько-то часов сверхурочной работы (не указывая когда именно). Удобно 🙂