创建session做BDC

    技术2022-05-20  39

     TABLES: coas, cepc.*-----------------------------------------------------------------------*                    Internal Tables and Work Areas*-----------------------------------------------------------------------DATA: BEGIN OF gt_table OCCURS 0,    "internal order table        auart LIKE aufk-auart,       "order type        aufnr LIKE aufk-aufnr,       "order number        ktext LIKE aufk-ktext,       "description        bukrs LIKE aufk-bukrs,       "company code        gsber LIKE aufk-gsber,       "business area        prctr LIKE aufk-prctr,       "profit center        funca LIKE aufk-func_area,   "function area END OF gt_table.DATA: BEGIN OF gt_exists OCCURS 0.   "existed IO        INCLUDE STRUCTURE gt_table.DATA: END OF gt_exists.DATA: BEGIN OF gt_prft_cntr OCCURS 0."the profit center not existing IO        INCLUDE STRUCTURE gt_table.DATA: END OF gt_prft_cntr.DATA: BEGIN OF gt_submit OCCURS 0.   "the submitted IO        INCLUDE STRUCTURE gt_table.DATA: END OF gt_submit.DATA: BEGIN OF gt_bdcdata OCCURS 0.  "BDC DATA        INCLUDE STRUCTURE bdcdata.DATA: END OF gt_bdcdata.DATA: BEGIN OF gt_messtab OCCURS 10. "message table        INCLUDE STRUCTURE bdcmsgcoll.DATA: END OF gt_messtab.DATA: gt_imesg LIKE mesg OCCURS WITH HEADER LINE.*-----------------------------------------------------------------------*                  Variables*-----------------------------------------------------------------------DATA: gv_group(12) TYPE VALUE 'INTERNAL_ORD',      "BDC Name      gv_user(12)  TYPE c,                           "BDC User      gv_keep(1)   TYPE VALUE 'X',                 " ' '=Delete,'X'=keep after processing      gv_holddate  LIKE sy-datum.                    "DateDATA:  gv_flag(1) TYPE c,       gv_lin TYPE i.                                "number of ordersDATA: gv_c170(170),      gv_c_uline(50) VALUE '__________________________________________________'.DATA: tab TYPE filetable.DATA: rc TYPE i.DATA: rs TYPE c.DATA: l_file TYPE string.*-----------------------------------------------------------------------*                   Selection Screen*-----------------------------------------------------------------------PARAMETERS: bdctype(1) TYPE DEFAULT 'B' NO-DISPLAY,            bdcmode    LIKE bdcrun-bdc_amodus DEFAULT 'A' NO-DISPLAY.PARAMETERS: in_file TYPE LENGTH 128 DEFAULT 'C:/TEMP/*.txt'.SELECTION-SCREEN SKIP 1.*--------- AT SELECTION-SCREEN ON VALUE-REQUEST ----------AT SELECTION-SCREEN ON VALUE-REQUEST FOR in_file.CALL METHOD cl_gui_frontend_services=>file_open_dialog    EXPORTING       window_title            = 'Select a valid file'       file_filter             = 'All files(*.*)|*.*|Text file(*.txt)|*.txt|Word file(*.doc)|*.doc'    CHANGING       file_table              = tab       rc                      = rc    EXCEPTIONS       file_open_dialog_failed = 1       cntl_error              = 2       error_no_gui            = 3       not_supported_by_gui    = 4       OTHERS                  5.    IF sy-subrc = AND rc = 1.       READ TABLE tab INTO in_file INDEX 1.    ENDIF.AT SELECTION-SCREEN.  l_file = in_file.  CALL METHOD cl_gui_frontend_services=>file_exist    EXPORTING      file                 = l_file    RECEIVING      result               = rs          .  IF sy-subrc <> OR rs NE 'X'.    MESSAGE i001(00) WITH 'The file do not exist'.    STOP.  ENDIF.*--------- START-OF-SELECTION ----------START-OF-SELECTION.  REFRESH gt_table.  CALL FUNCTION 'WS_UPLOAD'    EXPORTING      filename            = in_file      filetype            = 'DAT'    TABLES      data_tab            = gt_table    EXCEPTIONS      conversion_error    = 1      file_open_error     = 2      file_read_error     = 3      invalid_table_width = 4      invalid_type        = 5      no_batch            = 6      unknown_error       = 7      OTHERS              8.  IF sy-subrc <> 0.    PERFORM collect_messages USING 'Z3' 'I' '000'                                 'Unable to upload input file '                                 in_file '' ''.  ENDIF.  SORT gt_table BY  aufnr gsber DESCENDING.  DELETE ADJACENT DUPLICATES FROM gt_table COMPARING aufnr.  PERFORM open_group.  PERFORM fill_bdc_data.  PERFORM bdc_close_group.  PERFORM write_report.FORM open_group.  gv_user = sy-uname.  CALL FUNCTION 'BDC_OPEN_GROUP'    EXPORTING      client   = sy-mandt      group    = gv_group      holddate = gv_holddate      keep     = gv_keep      user     = gv_user.  IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  ENDIF.ENDFORM.                               " OPEN_GROUPFORM fill_bdc_data.  CLEAR gt_table.  LOOP AT gt_table.    CLEAR gt_messtab.    CLEAR gt_bdcdata.    REFRESH gt_bdcdata.    REFRESH gt_messtab.    CLEAR gv_flag.*   Check if Profit Center exists.    SELECT SINGLE FROM cepc           WHERE prctr = gt_table-prctr.    IF sy-subrc <> 0.      CLEAR gt_prft_cntr.      MOVE-CORRESPONDING gt_table TO gt_prft_cntr.      APPEND gt_prft_cntr.      gv_flag = 'X'.    ENDIF.*   check if Internal Order has already been created.    SELECT SINGLE FROM coas       WHERE aufnr = gt_table-aufnr.    IF sy-subrc = 0.      CLEAR gt_exists.      MOVE-CORRESPONDING gt_table TO gt_exists.      APPEND gt_exists.      gv_flag = 'X'.    ENDIF.    IF gv_flag <> 'X'.      PERFORM bdcdata USING:   'X' 'SAPMKAUF' '0100',                 "order type                               ' ' 'COAS-AUART' gt_table-auart,                               ' ' 'BDC_OKCODE' '=KOKR'.      PERFORM bdcdata USING:   'X' 'SAPLSPO4' '0300',                 "control area                               ' ' 'SVALD-VALUE(01)' '1000',                               ' ' 'BDC_OKCODE' '=FURT'.      PERFORM bdcdata USING:   'X' 'SAPMKAUF' '0100',                 "ok code                               ' ' 'BDC_OKCODE' '/00'.      PERFORM bdcdata USING:   'X' 'SAPMKAUF' '0600',                 "order master data                               ' ' 'COAS-AUFNR' gt_table-aufnr,                               ' ' 'COAS-KTEXT' gt_table-ktext,                               ' ' 'COAS-BUKRS' gt_table-bukrs,                               ' ' 'COAS-GSBER' gt_table-gsber,                               ' ' 'COAS-PRCTR' gt_table-prctr,                               ' ' 'COAS-FUNC_AREA' gt_table-funca,                               ' ' 'BDC_OKCODE' '=SICH'.      PERFORM bdc_insert.      MOVE-CORRESPONDING gt_table TO gt_submit.      APPEND gt_submit.    ENDIF.  ENDLOOP.ENDFORM.                               " FILL_BDC_DATAFORM bdc_insert.  CALL FUNCTION 'BDC_INSERT'    EXPORTING      tcode     = 'KO01'    TABLES      dynprotab = gt_bdcdata.  IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  ENDIF.ENDFORM.                               " BDC_INSERTFORM bdc_close_group.  CALL FUNCTION 'BDC_CLOSE_GROUP'.  IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  ENDIF.ENDFORM.                               " BDC_CLOSE_GROUPFORM call_transaction.  CALL TRANSACTION 'KO01' USING gt_bdcdata                           MODE bdcmode                       MESSAGES INTO gt_messtab.ENDFORM.                               " CALL_TRANSACTIONFORM bdcdata USING p_begin p_field1 p_field2.  CLEAR gt_bdcdata.  CASE p_begin.    WHEN 'X'.      gt_bdcdata-program  = p_field1.      gt_bdcdata-dynpro   = p_field2.      gt_bdcdata-dynbegin = 'X'.    WHEN space.      gt_bdcdata-fnam  = p_field1.      gt_bdcdata-fval  = p_field2.  ENDCASE.  APPEND gt_bdcdata.ENDFORM.                               " BDCDATAFORM write_report.   DESCRIBE TABLE gt_exists LINES gv_lin.  IF gv_lin >= 1.    PERFORM collect_messages USING 'Z3' 'I' '000'                'The following Internal Orders already exist.' '' '' ''.    PERFORM collect_messages USING 'Z3' 'I' '000'                                    gv_c_uline '' '' ''.    LOOP AT gt_exists.      PERFORM collect_messages USING 'Z3' 'I' '000'                                gt_exists-aufnr '' '' ''.    ENDLOOP.    PERFORM collect_messages USING 'Z3' 'I' '000'                                 gv_c_uline '' '' ''.  ENDIF.  DESCRIBE TABLE gt_prft_cntr LINES gv_lin.  IF gv_lin >= 1.    PERFORM collect_messages USING 'Z3' 'I' '000'                  'The following Profit centers do not exist.' '' '' ''.    PERFORM collect_messages USING 'Z3' 'I' '000'                                   gv_c_uline '' '' ''.    PERFORM collect_messages USING 'Z3' 'I' '000'                    'Internal Order Profit Center.' '' '' ''.    LOOP AT gt_prft_cntr.      PERFORM collect_messages USING 'Z3' 'I' '000'                                gt_prft_cntr-aufnr                                gt_prft_cntr-prctr '' ''.    ENDLOOP.    PERFORM collect_messages USING 'Z3' 'I' '000'                                 gv_c_uline '' '' ''.  ENDIF.  DESCRIBE TABLE gt_submit LINES gv_lin.  IF gv_lin >= 1.    PERFORM collect_messages USING 'Z3' 'I' '000'                   'BDC was created for the following Internal Orders.'                    '' '' ''.    PERFORM collect_messages USING 'Z3' 'I' '000'                                   gv_c_uline '' '' ''.    LOOP AT gt_submit.      PERFORM collect_messages USING 'Z3' 'I' '000'                                gt_submit-aufnr '' '' ''.    ENDLOOP.    PERFORM collect_messages USING 'Z3' 'I' '000'                                   gv_c_uline '' '' ''.  ENDIF.  PERFORM collect_messages USING 'Z3' 'I' '000'                  'The following Internal Orders have no Business Area.'                  '' '' ''.  PERFORM collect_messages USING 'Z3' 'I' '000'                                 gv_c_uline '' '' ''.  DELETE gt_table WHERE NOT gsber = ' '.  LOOP AT gt_table.    PERFORM collect_messages USING 'Z3' 'I' '000'                              gt_table-aufnr '' '' ''.  ENDLOOP.  PERFORM collect_messages USING 'Z3' 'I' '000'                                 gv_c_uline '' '' ''.ENDFORM.                               " WRITE_REPORTFORM collect_messages USING    p_msgid                               p_msgty                               p_msgnr                               p_msgv1                               p_msgv2                               p_msgv3                               p_msgv4.  CLEAR gt_imesg.  gt_imesg-arbgb = p_msgid.  gt_imesg-msgty = p_msgty.  gt_imesg-txtnr = p_msgnr.  gt_imesg-msgv1+0(2) = '@ '.  gt_imesg-msgv1+2(48) = p_msgv1.  gt_imesg-msgv2 = p_msgv2.  gt_imesg-msgv3 = p_msgv3.  gt_imesg-msgv4 = p_msgv4.  APPEND gt_imesg.  CONCATENATE p_msgv1 p_msgv2 p_msgv3 p_msgv4              INTO gv_c170 SEPARATED BY space.  WRITE:/ gv_c170.ENDFORM.


    最新回复(0)