【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.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[2\]:前几天用到HR模块的一个函数HR_INFOTYPE_OPERATION。这个函数是用来操作HR信息类型的。在调用这个函数之前,需要先加锁,然后调用HR_INFOTYPE_OPERATION函数进行操作,最后再解锁。\[2\]根据参数OPERATION的不同取值,可以实现不同的操作,比如创建、修改、删除等。其中,主要的取值有INS、INSS和MOD。\[2\]INS表示创建一个新的记录,即使系统中已经存在相同类型的记录。INSS表示创建一个新的记录,如果系统中已经存在相同类型的记录,则将其转换为修改操作。MOD表示修改已存在的记录。\[3\]根据你的需求,你可以查找类似的BAPI函数来实现相同的功能。 #### 引用[.reference_title] - *1* [SAP 函数HR_INFOTYPE_OPERATION报错](https://blog.csdn.net/ptpassword/article/details/131400421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [HR_INFOTYPE_OPERATION_SAP刘梦_新浪博客](https://blog.csdn.net/senlinmu110/article/details/109652316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自律的Drew.Dong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值