导读
INTRODUCTION
缺勤实数:这几天好几个朋友问题有什么办法可以计算出缺勤的时长,因为计算时长需要和排班去匹配,所以逻辑复杂度还是比较高的,希望有标准的函数能完成。其实SAP有个标准的函数可以完成,复杂的时候填充的参数特别多,所以今天介绍一个函数PA30保存2001的时候会调用,这样可以知道标准参数需要填充什么值。
作者:vivi,来源:osinnovation。
一、具体函数名称:
函数名:HR_ABS_ATT_TIMES_AT_ENTRY,这个函数关键是填充0000、0001、0002、0007、2001、2002、2003这几个内表,注意,这里内表我们最好是填充全量值,特别是2003内表,Why?因为底层函数判断经常会找前天与后天的班次(真要针对的跨夜班),所以如果数据不全,查询的数据不全。如果是用逻辑数据库,那么get pernr即可。
二、函数OR报表的具体解决方案:
方案一:报表中调用此函数,那么就方便,我们启用逻辑数据库,在报表中tables:0000,0001,0002,0007,2001,2002,2003就可以,系统会自动抓取内表数据。方案二:在函数中调用report的数据,例如下图参考就是函数中调用标准的报表,然后从标准报表中抓内表数据到函数中。
DATA: selectable LIKE TABLE OF rsparams. "选择参数内表DATA: selectline LIKE LINE OF selectable.
CLEAR selectline.
selectline-selname = 'PNPPERNR'.
selectline-kind = 'S'.
selectline-sign = 'I'.
selectline-option = 'EQ'.
selectline-low = wa_data-pernr.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'PNPTIMR6'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'PNPBEGDA'.
selectline-kind = 'P'.
selectline-low = lv_begda.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'PNPENDDA'.
selectline-kind = 'P'.
selectline-low = lv_endda.
APPEND selectline TO selectable.
*按工资核算的历经期
CLEAR selectline.
selectline-selname = 'FOR_VIEW'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
*收入类别
CLEAR selectline.
selectline-selname = 'SALA'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'BONU'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'STOC'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'SEVE'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'CPER'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'ICI'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'IDB'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
*员工类型
CLEAR selectline.
selectline-selname = 'CHRD'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'CHOB'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'CHCW'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'RDPR'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
*输出格式
CLEAR selectline.
selectline-selname = 'RB_ALV'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
CLEAR selectline.
selectline-selname = 'TOTAL'.
selectline-kind = 'P'.
selectline-low = 'X'.
APPEND selectline TO selectable.
EXPORT lv_flag = 'X' TO MEMORY ID 'HCNCTXM0'.
SUBMIT hcnctxm0 WITH SELECTION-TABLE selectable AND RETURN.
IMPORT it_data_tax FROM MEMORY ID 'MH253'.
IF sy-subrc = 0.
FREE MEMORY ID 'MH253'.
ENDIF.
三 总结
如果不知道此函数如何传参数,还有一个最简单的办法,就是在函数HR_ABS_ATT_TIMES_AT_ENTRY中打一个断点,然后PA30中选择2001信息类型,输入相应时间,点保存就会进入此函数,可以看看系统标准是如何传参数的。