【SAP-HCM】--HR人员信息导入函数
人员基本信息导入函数:HR_MAINTAIN_MASTERDATA
人员其他信息类型导入函数:HR_INFOTYPE_OPERATION
不逼逼,直接上代码,这两个函数还是相对简单易懂的
*根据操作类型查找对应的T529A 操作类型对应的值
IF gt_alv IS NOT INITIAL.
SELECT massn,
stat1,
stat2
INTO TABLE @DATA(lt_t529a)
FROM t529a
FOR ALL ENTRIES IN @gt_alv
WHERE massn = @gt_alv-massn.
ENDIF.
**操作
* pernr TYPE p0000-pernr, "人员编码
* begda TYPE p0000-begda, " 开始日期
* endda TYPE p0000-endda, " 结束日期
* massn TYPE pspar-massn, "操作类型
* massg TYPE p0000-massg, "操作原因
* plans TYPE pspar-plans, "职位
* werks TYPE pspar-werks, "人事范围
* persg TYPE pspar-persg, "员工组
* persk TYPE pspar-persk, "员工子组
**组织分配
** btrtl TYPE p0001-btrtl, "人事子范围
* abkrs TYPE p0001-abkrs, "工资范围
* ANSVH type P0001-ANSVH, "事业部
* SACHP type P0001-SACHP, "人事管理员
* SACHZ type P0001-SACHZ, "时间管理员
* SACHA type p0001-SACHA, "工资管理员
*
**个人数据
* nachn TYPE p0002-nachn, "姓名
* vorna TYPE p0002-vorna, "英文名
* name2 type p0002-name2, "曾用名
* gesch TYPE p0002-gesch, "性别码 1代表男 2代表女
* gbdat TYPE p0002-gbdat, "出生日期
* gbort TYPE p0002-gbort, "出生地
** gblnd TYPE p0002-gblnd, "出生国家
** gbdep TYPE p0002-gbdep, "省份
** natio TYPE p0002-natio, "国籍
* famst TYPE p0002-famst, "婚姻状况
* hukot TYPE p3527-hukot, "户口类型 考虑添加
* ZTELENT type P0002-ZTELENT,"人才类型
*定义局部变量,局部表及结构,用于反馈数据是否导入成功
DATA:lt_pprop TYPE TABLE OF pprop,
ls_pprop TYPE pprop,
lt_pskey TYPE TABLE OF pskey,
ls_pskey TYPE pskey.
DATA:lt_return LIKE bapireturn,
lt_return1 LIKE bapireturn1,
lt_hr_return LIKE hrhrmm_msg.
DATA:lt_return_sd LIKE bapireturn1,
lt_return_cj LIKE bapireturn1,
ls_pa0002 LIKE p0002,
ls_pa3527 LIKE p3527,
lt_return2 LIKE bapireturn1,
lt_key LIKE bapipakey.
* 定义人事子范围 使用变量参考
DATA:lv_btrtl TYPE p0001-btrtl.
DATA:lv_tabix TYPE i.
SORT lt_t529a BY massn.
LOOP AT gt_alv INTO gs_alv.
lv_tabix = sy-tabix.
READ TABLE lt_t529a INTO DATA(ls_t529a) WITH KEY massn = gs_alv-massn BINARY SEARCH.
IF sy-subrc = 0.
*定义信息类型是0000的数据类型
ls_pprop-infty = '0000'.
ls_pprop-fname = 'P0000-stat1'.
ls_pprop-fval = ls_t529a-stat1 .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '0000'.
ls_pprop-fname = 'P0000-stat2'.
ls_pprop-fval = ls_t529a-stat2 .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ENDIF.
*定义信息类型是0000的数据类型
ls_pprop-infty = '0000'.
ls_pprop-fname = 'P0000-MASSG'. "操作原因
ls_pprop-fval = gs_alv-massg . "'A1'.
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
**定义信息类型是0001的数据类型
* ls_pprop-infty = '0001'.
* ls_pprop-fname = 'P0001-BTRTL'. "人事子范围
* ls_pprop-fval = gs_alv-btrtl . "'1010'.
* APPEND ls_pprop TO lt_pprop.
* CLEAR ls_pprop.
* 定义信息类型是0001的 人事自范围
IF gs_alv-werks = '9300' OR gs_alv-werks = '9800' OR gs_alv-werks = '9900'.
lv_btrtl = '1010'.
ELSEIF gs_alv-werks = '9500'.
lv_btrtl = '1020'.
ELSEIF gs_alv-werks = '9600'.
lv_btrtl = '1030'.
ELSEIF gs_alv-werks = '9700'.
lv_btrtl = '1040'.
ENDIF.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-BTRTL'. "人事子范围
ls_pprop-fval = lv_btrtl .
APPEND ls_pprop TO lt_pprop.
CLEAR:ls_pprop,lv_btrtl.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-ABKRS'. "工资范围
ls_pprop-fval = gs_alv-abkrs .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-ANSVH'. "事业部
ls_pprop-fval = gs_alv-ansvh .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-SACHP'. "人事管理员
ls_pprop-fval = gs_alv-sachp .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-SACHZ'. "时间管理员
ls_pprop-fval = gs_alv-sachz .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-SACHA'. "工资管理员
ls_pprop-fval = gs_alv-sacha .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
*公司代码=人事范围=组??(后台字段关联关系相等)
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-BUKRS'. "公司代码
ls_pprop-fval = gs_alv-werks ."'9900'.
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '0001'.
ls_pprop-fname = 'P0001-SBMOD'. "组
ls_pprop-fval = gs_alv-werks . " '9900'.
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 0002开始日期
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-BEGDA'. "0002的开始日期
ls_pprop-fval = gs_alv-begda .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 姓名 p0002-nachn
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-NACHN'. "
ls_pprop-fval = gs_alv-nachn .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 英文名 p0002-vorna
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-VORNA'. "
ls_pprop-fval = gs_alv-vorna .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 曾用名 P0002-NAME2
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-NAME2'. "
ls_pprop-fval = gs_alv-name2 .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 性别码 p0002-gesch
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-GESCH'. "
ls_pprop-fval = gs_alv-gesch .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 出生日期 p0002-gbdat
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-GBDAT'. "
ls_pprop-fval = gs_alv-gbdat .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 出生地 p0002-gbort
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-GBORT'. "
ls_pprop-fval = gs_alv-gbort .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 出生国家 p0002-gblnd
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-GBLND'. "
ls_pprop-fval = gs_alv-gblnd .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 省份p0002-gbdep
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-GBDEP'. "
ls_pprop-fval = gs_alv-gbdep .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 国籍 p0002-natio
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-NATIO'. "
ls_pprop-fval = gs_alv-natio .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 婚姻状况 p0002-famst
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-FAMST'. "
ls_pprop-fval = gs_alv-famst .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 人才类型 P0002-ZTELENT
ls_pprop-infty = '0002'.
ls_pprop-fname = 'P0002-ZTELENT'. "
ls_pprop-fval = gs_alv-ztelent .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
ls_pprop-infty = '3527'.
ls_pprop-fname = 'P3527-HUKOT'. "
ls_pprop-fval = gs_alv-hukot .
APPEND ls_pprop TO lt_pprop.
CLEAR ls_pprop.
* 创建人员基本信息,主要用于创建对应的人员编码
CALL FUNCTION 'HR_MAINTAIN_MASTERDATA'
EXPORTING
* PERNR = '00000000'
massn = gs_alv-massn "'Z0' "操作类型
actio = 'INS' "插入操作/修改操作/删除操作
tclas = 'A' "数据保留的事物类
begda = gs_alv-begda "sy-datum "起始时间
endda = gs_alv-endda "'99991231' "结束时间
* OBJPS =
* SEQNR =
* SPRPS =
* SUBTY =
werks = gs_alv-werks "人事范围
persg = gs_alv-persg "员工组
persk = gs_alv-persk "员工子组
plans = gs_alv-plans "职位
* DIALOG_MODE = '0'
* LUW_MODE = '1'
* NO_EXISTENCE_CHECK = ' '
* NO_ENQUEUE = ' '
IMPORTING
return = lt_return
return1 = lt_return1
hr_return = lt_hr_return
TABLES
proposed_values = lt_pprop
modified_keys = lt_pskey.
IF lt_return-type = 'E'.
CONCATENATE '创建人员编号失败' lt_return-message INTO gs_alv-zmessage.
gs_alv-icon = '@5D@'.
ELSE.
gs_alv-zmessage = '创建人员编号成功'.
gs_alv-icon = '@5B@'.
READ TABLE lt_pskey INTO ls_pskey INDEX 1.
IF sy-subrc = 0.
gs_alv-pernr = ls_pskey-pernr.
ENDIF.
COMMIT WORK AND WAIT.
*准备0002信息类型的数据,传入对应的数据
ls_pa0002-pernr = gs_alv-pernr. "人员编号
ls_pa0002-begda = gs_alv-begda. "开始日期
ls_pa0002-endda = gs_alv-endda. "结束日期
ls_pa0002-nachn = gs_alv-nachn. "姓名
ls_pa0002-vorna = gs_alv-vorna. "英文名
ls_pa0002-name2 = gs_alv-name2. "曾用名
ls_pa0002-gesch = gs_alv-gesch. "性别码
ls_pa0002-gbdat = gs_alv-gbdat. "出生日期
ls_pa0002-gbort = gs_alv-gbort. "出生地
ls_pa0002-gblnd = gs_alv-gblnd. "出生国家
ls_pa0002-gbdep = gs_alv-gbdep. "省份
* ls_pa0002-natio = gs_alv-natio. "
ls_pa0002-famst = gs_alv-famst. "婚姻状况
ls_pa0002-ztelent = gs_alv-ztelent. "人才类型
ls_pa3527-pernr = gs_alv-pernr. "人员编号
ls_pa3527-begda = gs_alv-gbdat. "开始日期
ls_pa3527-endda = gs_alv-endda. "结束日期
ls_pa3527-hukot = gs_alv-hukot. "人才类型
*锁定人员编码
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = gs_alv-pernr
IMPORTING
return = lt_return_sd.
*修改0002信息类型的数据
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '0002' "HR模块把人员信息进行了分类,不同的信息需要指定不同的信息类型
number = ls_pa0002-pernr "人员编码
subtype = ls_pa0002-subty "子信息类型
objectid = ls_pa0002-objps "对象标识
lockindicator = ls_pa0002-sprps "人力资源主数据记录的锁定标志
validityend = ls_pa0002-endda "结束日期
validitybegin = ls_pa0002-begda "开始日期
recordnumber = ls_pa0002-seqnr "相同关键值信息类型记录的编号
record = ls_pa0002 "人员信息表
operation = 'MOD' "判断是插入还是修改(值域看ACTIO)
tclas = 'A' "数据保留事务类,一般用默认即可
dialog_mode = '0' "
nocommit = '' "
* VIEW_IDENTIFIER =
secondary_record = ls_pa3527
IMPORTING
return = lt_return2
key = lt_key.
*
IF lt_return2 IS NOT INITIAL.
CONCATENATE gs_alv-zmessage lt_return2-message '但是信息类型0002创建失败,请检查' INTO gs_alv-zmessage.
gs_alv-icon = '@5D@'.
ENDIF.
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = gs_alv-pernr
IMPORTING
return = lt_return_sd.
ENDIF.
MODIFY gt_alv FROM gs_alv INDEX lv_tabix.
CLEAR:gs_alv,lt_pprop,ls_pprop,lt_pskey,ls_pskey,lt_return,lt_return1,lt_hr_return,lt_return_sd,lt_return_cj,ls_pa0002,lt_return2,lt_key,lv_tabix.
ENDLOOP.