如何"填写FM的所有必填字段":HR_MAINTAIN_MASTERDATA?

2020-08-22 05:38发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的SAP HR专家 我正在...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的SAP HR专家

我正在尝试在SAP HR中自动创建人员数据。 因此,我编写了一个ABAP报告,该报告从Excel文件中获取人员数据,并尝试使用HR_MAINTAIN_MASTERDATA在SAP中创建它。 但是我目前收到错误消息:在所有必填字段中填写


有人可以帮助我吗?

我的报告如下:

 *&---------------------------------------------  ------------------------ *
 *&报告ZPD_PA40
 *&
 *&------------------------------------------------  --------------------- *
 *&
 *&
 *&
 *&------------------------------------------------  --------------------- *
 报告YPD_PA40。


 类型:开始于TY_EXCEL,
          PERNR(100),
          MASSG(100),
          贝格达(100),
          ENDDA(100),
          佩尔萨(100),
          BTRTL(100),
          PERSG(100),
          珀斯(100),
          计划(100)
          ABKRS(100),
          ANSVH(100),
          ANRED(100),
          盖世(100),
          CNAME(100),
          NACHN(100),
          VORNA(100),
          STELL(100),
          欧格(100),
          VDSK1(100),
          PERID(100),
          GBDAT(100),
          SPRSL(100),
          NATIO(100),
        END OF TY_EXCEL。


 类型:开始于TY_HR_NEW_HIRE,
          PERNR类型P0001-PERNR,
          大众型号P0000-大众
          BEGDA类型P0001-BEGDA,
          ENDDA类型P0001-ENDDA,
          佩莎P0001型
          BTRTL类型P0001-BTRTL,
          珀格类型P0001-PERSG,
          权限类型P0001-PERSK
          计划类型P0001-计划
          ABKRS类型P0001-ABKRS,
          ANSVH类型P0001-ANSVH,
          ANRED TYPE P0002-ANRED,
          GESCH型P0002-GESCH,
          CNAME类型P0002-CNAME,
          针型P0002-NACHN,
          VORNA类型P0002-VORNA,
          机种P0001-STELL,
          ORGEH类型P0001-ORGEH,
          VDSK1类型P0001-VDSK1,
          PERID类型P0002-PERID,
          GBDAT类型P0002-GBDAT,
          SPRSL类型P0002-SPRSL,
          NATIO类型P0002-NATIO,
          像BAPIRETURN这样,
        END OF TY_HR_NEW_HIRE。


 数据:
   LV_RC TYPE I,
   LT_FILE_TABLE TYPE FILETABLE,
   LS_FILE_TABLE之类的LT_FILE_TABLE,
   LT_RAW TYPE TRUXS_T_TEXT_DATA,
   引用到CX_ROOT的错误类型,
   LV_DS TYPE STRING,
   LV_TXTERROR TYPE STRING,
   LV_TXTERROR_LONG TYPE STRING,
   TY_EXCEL的LT_YOUR_TABEL类型标准表,
   LS_YOUR_TABEL,如LT_YOUR_TABEL,
   PERSONALNUMMER类型PERNR_D,
   MESSAGE_HANDLER TYPE REF IF_HRPA_MESSAGE_HANDLER,
   IS_INTERNAL TYPE BOOLE_D。


 数据:LV_STRING_FILE TYPE STRING,
       LV_RAW TYPE TRUXS_T_TEXT_DATA,
       带有标题行的TY_EXCEL的LI_EXCEL类型表,
       LI_HR_NEW_HIRE TYPE_TY_HR_NEW_HIRE TABLE HEADER LINE,
       带有标题行的TY_HR_NEW_HIRE的GT_OUTPUT类型表,
       LV_COUNT TYPE I,
       LV_CHAR(5),
       LV_STRING(100),
       GV_MESSAGE TYPE CHAR100,
       LV_VAL喜欢PPROP-FVAL。


 数据:带有标题行的LI_PROPOSED像PPROP出现0,
         LW_RC LIKE BAPIRETURN,
         LW_RC1 LIKE BAPIRETURN1,
         LW_HR TYPE HRHRMM_MSG。


 数据:BDCMSGCOLL的LT_MESSTAB类型表,
       LS_MESSTAB类型BDCMSGCOLL。


 带标题标题文本001的块参数1的选择屏幕开始。
 参数:P_FNAME类型RLGRAP-FILENAME默认'C:\ HCMEmployees_97.xls',
             GV_TEST类型的CHAR1默认值ABAP_FALSE。
 块参数的选择屏幕结束1。


 在P_FNAME的VALUE-REQUEST的SELECTION屏幕上。
   呼叫方法CL_GUI_FRONTEND_SERVICES => FILE_OPEN_DIALOG
     出口
       WINDOW_TITLE ='Excel-Dateiauswählen'
       FILE_FILTER ='* .XLS | * .XLSX'
 * file_filter ='* .XLS)| * .XLSX'
     改变
       FILE_TABLE = LT_FILE_TABLE
       RC = LV_RC
     例外情况
       FILE_OPEN_DIALOG_FAILED = 1
       CNTL_ERROR = 2
       ERROR_NO_GUI = 3
       NOT_SUPPORTED_BY_GUI = 4
       其他= 5。
   如果SY-SUBRC EQ 0。
     如果LT_FILE_TABLE不是INITIAL。
       LS_FILE_TABLE = LT_FILE_TABLE [1]。
       将LS_FILE_TABLE-FILENAME写入P_FNAME。
     万一。
   其他。
     消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
       与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 选择开始。


   通话功能" TEXT_CONVERT_XLS_TO_SAP"
     出口
       I_LINE_HEADER = ABAP_TRUE
       I_TAB_RAW_DATA = LT_RAW
       I_FILENAME = P_FNAME
     桌子
 * i_tab_converted_data = lt_your_tabel
       I_TAB_CONVERTED_DATA = LI_EXCEL
     例外情况
       CONVERSION_FAILED = 1
       其他= 2。
   如果SY-SUBRC <> 0。
     消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
     与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   其他。
     尝试。
         环聊LI_EXCEL。
           向LV_COUNT添加1。
           将LI_EXCEL移动到LI_HR_NEW_HIRE。
           将LI_EXCEL-ENDDA + 6(4)LI_EXCEL-ENDDA + 3(2)LI_EXCEL-ENDDA(2)并入LI_HR_NEW_HIRE-ENDDA。
           将LI_EXCEL-BEGDA + 6(4)LI_EXCEL-BEGDA + 3(2)LI_EXCEL-BEGDA(2)并入LI_HR_NEW_HIRE-BEGDA。
           将LI_EXCEL-GBDAT + 6(4)LI_EXCEL-GBDAT + 3(2)LI_EXCEL-GBDAT(2)并入LI_HR_NEW_HIRE-GBDAT。
           APPEND LI_HR_NEW_HIRE。
         结局。


         清除LV_COUNT个。
         如果GV_TEST ='X'。
           将LV_COUNT写到LV_CHAR。
           压缩LV_CHAR。
           将"成功处理" LV_CHAR"行"合并为按空格分隔的GV_MESSAGE。
         其他。
           环聊LI_HR_NEW_HIRE。
             刷新:LI_PROPOSED。


             " P0000
             LV_VAL = LI_HR_NEW_HIRE-MASSG。
             填写表格LI_PROPOSED使用'0000'
                                                 'P0000-MASSG'
                                                 LV_VAL。


             " P0002
             LV_VAL = LI_HR_NEW_HIRE-ANRED。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-ANRED'
                                                 LV_VAL。


 * lv_val = li_hr_new_hire-gesch。
 *执行填充表li_建议使用'0002'
 *'P0002-GESCH'
 * lv_val。


             LV_VAL = LI_HR_NEW_HIRE-CNAME。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-CNAME'
                                                 LV_VAL。


             LV_VAL = LI_HR_NEW_HIRE-NACHN。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-NACHN'
                                                 LV_VAL。




             LV_VAL = LI_HR_NEW_HIRE-VORNA。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-VORNA'
                                                 LV_VAL。


             LV_VAL = LI_HR_NEW_HIRE-PERID。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-PERID'
                                                 LV_VAL。


             LV_VAL = LI_HR_NEW_HIRE-GBDAT。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-GBDAT'
                                                 LV_VAL。


             LV_VAL = LI_HR_NEW_HIRE-SPRSL。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-SPRSL'
                                                 LV_VAL。


 * lv_val = li_hr_new_hire-natio。
 *执行填充表li_建议使用'0002'
 *'P0002-NATIO'
 * lv_val。


             LV_VAL = LI_HR_NEW_HIRE-GBDAT。
             建议填写表格LI_PROPOSED使用'0002'
                                                 'P0002-GBPAS'
                                                 LV_VAL。




 * lv_val ='1'。
 *执行填充表li_建议使用'0002'
 *'P0002-FAMST'
 * lv_val。


             " P0001
             LV_VAL ='1000'。
             填写表格LI_PROPOSED使用'0001'
                                            'P0001-BUKRS'
                                            LV_VAL。


             LV_VAL = LI_HR_NEW_HIRE-PERSK。
             填写表格LI_PROPOSED使用'0001'
                                            'P0001-PERSK'
                                            LV_VAL。






             LV_VAL = LI_HR_NEW_HIRE-BTRTL。
             填写表格LI_PROPOSED使用'0001'
                                            'P0001-BTRTL'
                                            LV_VAL。
 *
 * lv_val = li_hr_new_hire-abkrs。
 *执行填充表li_建议使用'0001'
 *'P0001-ABKRS'
 * lv_val。
 **
 * lv_val = li_hr_new_hire-ansvh。
 *执行填充表li_建议使用'0001'
 *'P0001-ANSVH'
 * lv_val。


             LV_VAL = LI_HR_NEW_HIRE-STELL。
             填写表格LI_PROPOSED使用'0001'
                                            'P0001-STELL'
                                            LV_VAL。


             LV_VAL = LI_HR_NEW_HIRE-ORGEH。
             填写表格LI_PROPOSED使用'0001'
                                            'P0001-ORGEH'
                                            LV_VAL。


 * lv_val = li_hr_new_hire-vdsk1。
 *执行填充表li_建议使用'0001'
 *'P0001-VDSK1'
 * lv_val。


             LV_VAL = LI_HR_NEW_HIRE-PERSA。
             填写表格LI_PROPOSED使用'0001'
                                            'P0001-WERKS'
                                            LV_VAL。



             通话功能'HR_MAINTAIN_MASTERDATA'
               出口
                 MASSN ='01'
                 ACTIO ='INS'
                 TCLAS ='A'
                 BEGDA = LI_HR_NEW_HIRE-BEGDA
                 ENDDA = LI_HR_NEW_HIRE-ENDDA
                 WERKS = LI_HR_NEW_HIRE-PERSA
                 PERSG = LI_HR_NEW_HIRE-PERSG
                 PERSK = LI_HR_NEW_HIRE-PERSK
                 计划= LI_HR_NEW_HIRE-PLANS
                 NO_EXISTENCE_CHECK ='X'
                 DIALOG_MODE ='0'
                 LUW_MODE ='2'
                 NO_ENQUEUE =''
               输入
                 返回= LW_RC
                 RETURN1 = LW_RC1
                 HR_RETURN = LW_HR
               桌子
                 PROPOSED_VALUES = LI_PROPOSED。
             如果LW_RC-TYPE NE'E'。
               GT_OUTPUT = LI_HR_NEW_HIRE。


               获取参数ID" PER"字段GT_OUTPUT-PERNR。
               GT_OUTPUT-MESS = LW_RC-MESSAGE。
               APPEND GT_OUTPUT。


             其他。


               GT_OUTPUT = LI_HR_NEW_HIRE。
               GT_OUTPUT-MESS = LW_RC-MESSAGE。
               APPEND GT_OUTPUT。


             万一。




           结局。
           MESSAGE GT_OUTPUT类型" I"。


         万一。
       将CX_ROOT捕获为错误。
         LV_TXTERROR =错误-> GET_TEXT()。
         LV_TXTERROR_LONG =错误-> GET_LONGTEXT()。
         带有LV_TXTERROR的消息I531(0U)。
         信息LV_TXTERROR_LONG类型" I"。
     ENDTRY。
   万一。




 表格填写表LOC_PROPOSED_VALUES STRUCTURE PPROP
         像PPROP-INFTY一样使用INFTY
                FNAME像PPROP-FNAME
                像PPROP-FVAL那样的FVAL。
 * seqnr类似于pprop-seqnr。


   数据:WA_VALUES像PPROP。


   WA_VALUES-INFTY = INFTY。
   WA_VALUES-FNAME = FNAME。
   WA_VALUES-FVAL = FVAL。
 * wa_values-seqnr = seqnr。
   将WA_VALUES附加到LOC_PROPOSED_VALUES。


 ENDFORM。
 
2条回答
何必丶何苦呢
2020-08-22 06:13

Hi

根据代码,您试图更新信息类型0000,0001和0002。

1。 请针对这些信息类型手动运行PA30,并记下系统要求查询的字段。

2。 将它们包含在您的BAPI代码中

问候

Venkat

一周热门 更多>