如何从Excel上传信息类型0027的多个WBS

2020-09-21 09:18发布

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

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


包含ZHR_PA0027_UPLOAD_TOP。

 包括ZHR_PA0027_UPLOAD_FORM。

 选择开始。
 *初始化课程
   数据:obj类型参考lcl_upload。

   在p_file的VALUE-REQUEST的SELECTION屏幕上。

 创建对象obj。



 *在p_file的值请求选择屏幕上。



 调用METHOD obj-> file_upload。


 


 *&------------------------------------------------  --------------------- *

 *&包括ZHR_PA0027_UPLOAD_TOP

 *&------------------------------------------------  --------------------- *

 *内部表声明

 类型:始于ty_pa0027,

         佩尔纳TYPE p0027-pernr,

         begda TYPE char10,

         endda TYPE char10,

         kbu01型p0027-kbu01,

         kst01类型p0027-kst01,

         psp01类型p0027-psp01,

         kpr01类型p0027-kpr01,

         结束于ty_pa0027。

 数据:ty_pa0027的it_p0027类型标准表。

 数据:alsab_tabline的itab类型标准表,

        wa_itab喜欢itab。



 *工作区声明

 数据:wa_p0027类型ty_pa0027。

 数据:p0027类型p0027。

 *参数声明

 参数:P_FILE TYPE rlgrap文件名。

 *当地日期声明

 数据:l_date1 TYPE sy-datum,

        l_date2 TYPE sy-datum,

        l_psp01类型p0027-psp01。


 *&------------------------------------------------  --------------------- *

 *&包括ZHR_PA0027_UPLOAD_FORM

 *&------------------------------------------------  --------------------- *

 * ==================================================  ==================== *

 * L O C A L C L A S S D E F I N I T I O N *

 * ==================================================  ==================== *

 CLASS lcl_upload定义。

   公共部分。

     方法:file_upload。



 ENDCLASS。



 * ==================================================  ==================== *

 * L O C A L C L A S S的实现*

 * ==================================================  ==================== *



 类别lcl_upload IMPLEMENTATION。



 方法file_upload。

 *在p_file值请求的选择屏幕上。

 " F4文件帮助。

   通话功能'F4_FILENAME'

 *出口

 * PROGRAM_NAME = SYST-CPROG

 * DYNPRO_NUMBER = SYST-DYNNR

 * FIELD_NAME =''

    输入

      file_name = p_file。



 调用函数" ALSM_EXCEL_TO_INTERNAL_TABLE"

        出口

             文件名= p_file

             i_begin_col ='1'

             i_begin_row ='2'"不需要标题

             i_end_col ='14'

             i_end_row ='31'

        桌子

             实习生= Itab

        例外情况

             参数不一致= 1

             upload_ole = 2

             其他= 3。

   如果sy-subrc <> 0。

     带有文本001的消息e010(zz)。  "问题上传Excel电子表格

   万一。



   在itab上圈入wa_itab。

   案例wa_itab-col。

 当为" 1"时。

 wa_p0027-pernr = wa_itab值。



 当" 2"时。

 wa_p0027-begda = wa_itab值。





  当" 3"。

 wa_p0027-endda = wa_itab值。





  当" 4"。

 wa_p0027-kbu01 = wa_itab值。



  当" 5"。

 wa_p0027-kst01 = wa_itab值。



  当" 6"。

 *将外部WBS元素转换为内部WBS元素



 通话功能'CONVERSION_EXIT_ABPSP_INPUT'

   出口

     输入= wa_itab值

  输入

    输出= l_psp01

 *例外情况

 * NOT_FOUND = 1

 *其他= 2

           。

 如果sy-subrc <> 0。

 *在这里实施适当的错误处理

 万一。

 *将转换后的WBS元素传递到工作区

 wa_p0027-psp01 = l_psp01。



  当" 7"。

 wa_p0027-kpr01 = wa_itab值。

  结束。

 在第END行。

  将wa_p0027附加到it_p0027。

  清除wa_p0027。

  ENDAT。

  结局。



   在IT_p0027上环行,然后进入wa_p0027。



 *将开始日期转换为内部格式



     通话功能" CONVERT_DATE_TO_INTERNAL"



 出口



 date_external = wa_p0027-begda



 输入



 DATE_INTERNAL = l_date1



 例外情况



 DATE_EXTERNAL_IS_INVALID = 1



 其他= 2。



 如果sy-subrc <> 0。



 消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO



 与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。



 万一。



 *将结束日期转换为内部格式





     通话功能" CONVERT_DATE_TO_INTERNAL"



 出口



 date_external = wa_p0027-endda



 输入



 DATE_INTERNAL = l_date2



 例外情况



 DATE_EXTERNAL_IS_INVALID = 1



 其他= 2。



 如果sy-subrc <> 0。



 消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO



 与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。



 万一。



 **将外部WBS元素转换为内部WBS元素

 *

 * CALL FUNCTION'CONVERSION_EXIT_ABPSP_INPUT'

 *出口

 *输入= wa_p0027-psp01

 *重要

 *输出= l_psp01

 **例外情况

 ** NOT_FOUND = 1

 **其他= 2

 *。

 *如果sy-subrc <> 0。

 **在此处实施适当的错误处理

 *万一。







     通话功能'BAPI_EMPLOYEE_ENQUEUE'

       出口

         NUMBER = wa_P0027-PERNR

 *重要

 *返回=

               。



 *从WA_p0027到P0027移动。

 p0027-pernr = wa_p0027-pernr。

 p0027-begda = l_date1。

 p0027-endda = l_date2。

 p0027-kbu01 = wa_p0027-kbu01。

 p0027-psp01 = wa_p0027-psp01。

 p0027-kst01 = wa_p0027-kst01。

 p0027-kpr01 = wa_p0027-kpr01。



     通话功能" HR_INFOTYPE_OPERATION"

       出口

         INFTY ='0027'

         NUMBER = wa_p0027-PERNR

        SUBTYPE ='01'

 *对象=

 * LOCKINDICATOR =

        有效期= l_date2

        VALIDITYBEGIN = l_date1

 * RECORDNUMBER =

         记录= P0027

         操作='INS'

        TCLAS ='A'

        DIALOG_MODE ='2'

 * NOCOMMIT =

 * VIEW_IDENTIFIER =

 * SECONDARY_RECORD =

 *重要

 *返回=

 *键=

               。





     通话功能'BAPI_EMPLOYEE_DEQUEUE'

       出口

         NUMBER = wa_p0027-PERNR。

 *重要

 *返回=



            。



   结局。







  终结法。

  ENDCLASS。
 

你好朋友,

我已经编写了用于上传PA0027的代码。 当我仅将一个WBS元素用于一个员工ID时,它工作得很好。 但是,当我需要为单个pernr上传多个WBS元素时,我无法编写代码。 请提供有关如何编写代码的提示。 我不能使用BDC。

此致

拉乌里(Saurav Lahiry)

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

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


包含ZHR_PA0027_UPLOAD_TOP。

 包括ZHR_PA0027_UPLOAD_FORM。

 选择开始。
 *初始化课程
   数据:obj类型参考lcl_upload。

   在p_file的VALUE-REQUEST的SELECTION屏幕上。

 创建对象obj。



 *在p_file的值请求选择屏幕上。



 调用METHOD obj-> file_upload。


 


 *&------------------------------------------------  --------------------- *

 *&包括ZHR_PA0027_UPLOAD_TOP

 *&------------------------------------------------  --------------------- *

 *内部表声明

 类型:始于ty_pa0027,

         佩尔纳TYPE p0027-pernr,

         begda TYPE char10,

         endda TYPE char10,

         kbu01型p0027-kbu01,

         kst01类型p0027-kst01,

         psp01类型p0027-psp01,

         kpr01类型p0027-kpr01,

         结束于ty_pa0027。

 数据:ty_pa0027的it_p0027类型标准表。

 数据:alsab_tabline的itab类型标准表,

        wa_itab喜欢itab。



 *工作区声明

 数据:wa_p0027类型ty_pa0027。

 数据:p0027类型p0027。

 *参数声明

 参数:P_FILE TYPE rlgrap文件名。

 *当地日期声明

 数据:l_date1 TYPE sy-datum,

        l_date2 TYPE sy-datum,

        l_psp01类型p0027-psp01。


 *&------------------------------------------------  --------------------- *

 *&包括ZHR_PA0027_UPLOAD_FORM

 *&------------------------------------------------  --------------------- *

 * ==================================================  ==================== *

 * L O C A L C L A S S D E F I N I T I O N *

 * ==================================================  ==================== *

 CLASS lcl_upload定义。

   公共部分。

     方法:file_upload。



 ENDCLASS。



 * ==================================================  ==================== *

 * L O C A L C L A S S的实现*

 * ==================================================  ==================== *



 类别lcl_upload IMPLEMENTATION。



 方法file_upload。

 *在p_file值请求的选择屏幕上。

 " F4文件帮助。

   通话功能'F4_FILENAME'

 *出口

 * PROGRAM_NAME = SYST-CPROG

 * DYNPRO_NUMBER = SYST-DYNNR

 * FIELD_NAME =''

    输入

      file_name = p_file。



 调用函数" ALSM_EXCEL_TO_INTERNAL_TABLE"

        出口

             文件名= p_file

             i_begin_col ='1'

             i_begin_row ='2'"不需要标题

             i_end_col ='14'

             i_end_row ='31'

        桌子

             实习生= Itab

        例外情况

             参数不一致= 1

             upload_ole = 2

             其他= 3。

   如果sy-subrc <> 0。

     带有文本001的消息e010(zz)。  "问题上传Excel电子表格

   万一。



   在itab上圈入wa_itab。

   案例wa_itab-col。

 当为" 1"时。

 wa_p0027-pernr = wa_itab值。



 当" 2"时。

 wa_p0027-begda = wa_itab值。





  当" 3"。

 wa_p0027-endda = wa_itab值。





  当" 4"。

 wa_p0027-kbu01 = wa_itab值。



  当" 5"。

 wa_p0027-kst01 = wa_itab值。



  当" 6"。

 *将外部WBS元素转换为内部WBS元素



 通话功能'CONVERSION_EXIT_ABPSP_INPUT'

   出口

     输入= wa_itab值

  输入

    输出= l_psp01

 *例外情况

 * NOT_FOUND = 1

 *其他= 2

           。

 如果sy-subrc <> 0。

 *在这里实施适当的错误处理

 万一。

 *将转换后的WBS元素传递到工作区

 wa_p0027-psp01 = l_psp01。



  当" 7"。

 wa_p0027-kpr01 = wa_itab值。

  结束。

 在第END行。

  将wa_p0027附加到it_p0027。

  清除wa_p0027。

  ENDAT。

  结局。



   在IT_p0027上环行,然后进入wa_p0027。



 *将开始日期转换为内部格式



     通话功能" CONVERT_DATE_TO_INTERNAL"



 出口



 date_external = wa_p0027-begda



 输入



 DATE_INTERNAL = l_date1



 例外情况



 DATE_EXTERNAL_IS_INVALID = 1



 其他= 2。



 如果sy-subrc <> 0。



 消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO



 与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。



 万一。



 *将结束日期转换为内部格式





     通话功能" CONVERT_DATE_TO_INTERNAL"



 出口



 date_external = wa_p0027-endda



 输入



 DATE_INTERNAL = l_date2



 例外情况



 DATE_EXTERNAL_IS_INVALID = 1



 其他= 2。



 如果sy-subrc <> 0。



 消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO



 与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。



 万一。



 **将外部WBS元素转换为内部WBS元素

 *

 * CALL FUNCTION'CONVERSION_EXIT_ABPSP_INPUT'

 *出口

 *输入= wa_p0027-psp01

 *重要

 *输出= l_psp01

 **例外情况

 ** NOT_FOUND = 1

 **其他= 2

 *。

 *如果sy-subrc <> 0。

 **在此处实施适当的错误处理

 *万一。







     通话功能'BAPI_EMPLOYEE_ENQUEUE'

       出口

         NUMBER = wa_P0027-PERNR

 *重要

 *返回=

               。



 *从WA_p0027到P0027移动。

 p0027-pernr = wa_p0027-pernr。

 p0027-begda = l_date1。

 p0027-endda = l_date2。

 p0027-kbu01 = wa_p0027-kbu01。

 p0027-psp01 = wa_p0027-psp01。

 p0027-kst01 = wa_p0027-kst01。

 p0027-kpr01 = wa_p0027-kpr01。



     通话功能" HR_INFOTYPE_OPERATION"

       出口

         INFTY ='0027'

         NUMBER = wa_p0027-PERNR

        SUBTYPE ='01'

 *对象=

 * LOCKINDICATOR =

        有效期= l_date2

        VALIDITYBEGIN = l_date1

 * RECORDNUMBER =

         记录= P0027

         操作='INS'

        TCLAS ='A'

        DIALOG_MODE ='2'

 * NOCOMMIT =

 * VIEW_IDENTIFIER =

 * SECONDARY_RECORD =

 *重要

 *返回=

 *键=

               。





     通话功能'BAPI_EMPLOYEE_DEQUEUE'

       出口

         NUMBER = wa_p0027-PERNR。

 *重要

 *返回=



            。



   结局。







  终结法。

  ENDCLASS。
 

你好朋友,

我已经编写了用于上传PA0027的代码。 当我仅将一个WBS元素用于一个员工ID时,它工作得很好。 但是,当我需要为单个pernr上传多个WBS元素时,我无法编写代码。 请提供有关如何编写代码的提示。 我不能使用BDC。

此致

拉乌里(Saurav Lahiry)

付费偷看设置
发送
1条回答
宇峰Kouji
1楼-- · 2020-09-21 09:35

首先读取内部表中的所有数据,并按pernr排序。

然后在itab处循环,并用一些在新/结束处语句和一个简单的计数器。 在AT NEW bloc中重置计数器,将字段移到块外,在AT END OF块中调用HR_INFOTYPE_OPERATION ...

一周热门 更多>