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 0 WITH HEADER LINE.*-----------------------------------------------------------------------* Variables*-----------------------------------------------------------------------DATA: gv_group(12) TYPE c VALUE 'INTERNAL_ORD', "BDC Name gv_user(12) TYPE c, "BDC User gv_keep(1) TYPE c 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 c DEFAULT 'B' NO-DISPLAY, bdcmode LIKE bdcrun-bdc_amodus DEFAULT 'A' NO-DISPLAY.PARAMETERS: in_file TYPE c 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 = 0 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 <> 0 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.