*&---------------------------------------------------------------------**& REPORT ZMM0069 **&---------------------------------------------------------------------**& Module : MM |*& Application : The program loads the Purchasing Inforecords |*& |*----------------------------------------------------------------------**| Modification Log |*| ---------------- |*| Programmer Date CC# Chg.Ref Description of*| Change |*| ------------- ----------- ---- ----------- ----------------------|*| Rajesh Singh 23-AUG-2005 Initial*| development. |*----------------------------------------------------------------------* REPORT zmm0069 NO STANDARD PAGE HEADING MESSAGE-ID z0 LINE-SIZE 132 LINE-COUNT 65(2).*----------------------------------------------------------------------** Internal Tables **----------------------------------------------------------------------**Internal table for the purchasing info records fields. DATA: BEGIN OF i_inforecord OCCURS 0, matnr(18), lifnr(10), uom(3), ekgrp(3), planned_time(3), under_tol(3), over_tol(3), qty(10), price_cat(5), inco(3), designation(28), netpr(13), scale_qty1(10), scale_pr1(13), scale_qty2(10), scale_pr2(13), scale_qty3(13), scale_pr3(10), scale_qty4(13), scale_pr4(10), scale_qty5(13), scale_pr5(10), scale_qty6(13), scale_pr6(10), scale_qty7(13), scale_pr7(10), scale_qty8(13), scale_pr8(10), scale_qty9(13), scale_pr9(10), scale_qty10(13), scale_pr10(10), END OF i_inforecord.** Internal table for Old and New Vendor number DATA : BEGIN OF i_lfb1 OCCURS 1, lifnr(10), altkn(10), END OF i_lfb1.** Declare internal table for Call Transaction and BDC Session DATA: i_bdc_table LIKE bdcdata OCCURS 0 WITH HEADER LINE.*----------------------------------------------------------------------** Global Variables **----------------------------------------------------------------------* DATA: g_counter(2) TYPE n, g_field_name(18) TYPE c, zc_yes TYPE syftype VALUE 'X'.*----------------------------------------------------------------------** Selection Screen **----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001. PARAMETERS: p_fname1 TYPE localfile . SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002. PARAMETERS: p_rloc1 AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-003. PARAMETERS p_group(12) OBLIGATORY DEFAULT 'ZPURCHINFO'. SELECTION-SCREEN END OF BLOCK c. SELECTION-SCREEN END OF BLOCK b. SELECTION-SCREEN END OF BLOCK a.**WRITE the report header TOP-OF-PAGE. INCLUDE zheading.*----------------------------------------------------------------------** Start of selection **----------------------------------------------------------------------* START-OF-SELECTION.* Load Input file PERFORM f_load_input_file.* Create BDC records. PERFORM create_bdc_records .*&---------------------------------------------------------------------**& Form Create_BDC_records*&---------------------------------------------------------------------** Perform the BDC for the records in the internal table*----------------------------------------------------------------------* FORM create_bdc_records . IF NOT i_inforecord[] IS INITIAL.** Open BDC session PERFORM open_bdc_session. SELECT lifnr altkn FROM lfb1 INTO TABLE i_lfb1 FOR ALL ENTRIES IN i_inforecord WHERE altkn = i_inforecord-lifnr.* Sorting the Internal table for better performance SORT i_lfb1 BY altkn. LOOP AT i_inforecord.***Mapping Old Vendor number to the new Vendor number READ TABLE i_lfb1 WITH KEY altkn = i_inforecord-lifnr BINARY SEARCH. IF sy-subrc EQ 0. i_inforecord-lifnr = i_lfb1-lifnr. ENDIF. CLEAR i_bdc_table[]. PERFORM insert_screen_header.* call transaction 'ME11' using i_bdc_table* mode 'A'.* CLEAR i_bdc_table. ENDLOOP. CLEAR i_inforecord[]. PERFORM close_bdc_session.** Release the BDC sessions created PERFORM release_bdc. ENDIF. ENDFORM. " open_group*&---------------------------------------------------------------------**& Form bdc_dynpro_start*&---------------------------------------------------------------------** Start the screen for the transfer of fields*----------------------------------------------------------------------* FORM bdc_dynpro_start USING p_g_program_1 p_g_screen. CLEAR i_bdc_table. i_bdc_table-program = p_g_program_1. i_bdc_table-dynpro = p_g_screen. i_bdc_table-dynbegin = 'X'. APPEND i_bdc_table. ENDFORM. " bdc_dynpro_start_start*&---------------------------------------------------------------------**& Form bdc_insert_field*&---------------------------------------------------------------------** Insert field **----------------------------------------------------------------------* FORM bdc_insert_field USING f_name f_value. IF f_value <> space. CLEAR i_bdc_table. i_bdc_table-fnam = f_name. i_bdc_table-fval = f_value. APPEND i_bdc_table. ENDIF. ENDFORM. "bdc_insert_field*&--------------------------------------------------------------------**& Form open_bdc_session*&--------------------------------------------------------------------** Open a BDC session*---------------------------------------------------------------------* FORM open_bdc_session .** Open BDC session and create and update records CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING client = sy-mandt* DEST = FILLER8 group = p_group* HOLDDATE = FILLER8 keep = 'X' user = sy-uname* RECORD = FILLER1* PROG = SY-CPROG* IMPORTING* QID = EXCEPTIONS client_invalid = 1 destination_invalid = 2 group_invalid = 3 group_is_locked = 4 holddate_invalid = 5 internal_error = 6 queue_error = 7 running = 8 system_lock_error = 9 user_invalid = 10 OTHERS = 11 . 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. " create_bdc_session*&---------------------------------------------------------------------**& Form insert_screen_header*&---------------------------------------------------------------------** Screen flow for the transfer of fields*----------------------------------------------------------------------* FORM insert_screen_header .* First Screen 100 PERFORM bdc_dynpro_start USING 'SAPMM06I' '0100'. PERFORM bdc_insert_field USING:'BDC_CURSOR' 'EINA-LIFNR', 'BDC_OKCODE' '/00', 'EINA-LIFNR' i_inforecord-lifnr, 'EINA-MATNR' i_inforecord-matnr, 'EINE-EKORG' '1000', 'RM06I-NORMB' zc_yes.*****----------------------------------------********* Next Screen 101 PERFORM bdc_dynpro_start USING 'SAPMM06I' '0101'. PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'EINA-MAHN1', 'BDC_OKCODE' '/00', 'EINA-MEINS' i_inforecord-uom.*****----------------------------------------*********Next Screen 102 PERFORM bdc_dynpro_start USING 'SAPMM06I' '0102'. PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'EINE-INCO2', 'EINE-APLFZ' i_inforecord-planned_time, 'EINE-EKGRP' i_inforecord-ekgrp, 'EINE-NORBM' i_inforecord-qty. PERFORM bdc_insert USING 'EINE-UEBTK' ' '. PERFORM bdc_insert_field USING:'EINE-PEINH' i_inforecord-scale_qty1, 'EINE-BPRME' i_inforecord-uom, 'EINE-UNTTO' '5', 'EINE-UEBTO' '25', 'EINE-MEPRF' i_inforecord-price_cat, 'EINE-NETPR' i_inforecord-netpr, 'EINE-INCO1' i_inforecord-inco, 'EINE-INCO2' i_inforecord-designation.* Checking for Scale quantities IF i_inforecord-scale_qty2 = space. PERFORM bdc_insert_field USING 'BDC_OKCODE' '=BU'. PERFORM insert_bdc_new. ELSE. PERFORM bdc_insert_field USING 'BDC_OKCODE' '=KO'.*****----------------------------------------********* Next Screen 201 PERFORM bdc_dynpro_start USING 'SAPMV13A' '0201'. PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'RV13A-DATAB', 'BDC_OKCODE' '=PSTF'.*****----------------------------------------********* Next Screen 201 PERFORM bdc_dynpro_start USING 'SAPMV13A' '0201'. PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'KONP-KSCHL(01)', 'BDC_OKCODE' '=PSTF', 'RV130-SELKZ(01)' zc_yes.*****----------------------------------------********* LAST SCREEN 303 PERFORM bdc_dynpro_start USING 'SAPMV13A' '0303'. PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'KONM-KBETR(03)', 'BDC_OKCODE' '=SICH'.* Counter to Loop the Item level entry g_counter = 0. PERFORM scale_entry USING i_inforecord-scale_qty2 i_inforecord-scale_pr2. PERFORM scale_entry USING i_inforecord-scale_qty3 i_inforecord-scale_pr3. PERFORM scale_entry USING i_inforecord-scale_qty4 i_inforecord-scale_pr4. PERFORM scale_entry USING i_inforecord-scale_qty5 i_inforecord-scale_pr5. PERFORM scale_entry USING i_inforecord-scale_qty6 i_inforecord-scale_pr6. PERFORM scale_entry USING i_inforecord-scale_qty7 i_inforecord-scale_pr7. PERFORM scale_entry USING i_inforecord-scale_qty8 i_inforecord-scale_pr8. PERFORM scale_entry USING i_inforecord-scale_qty9 i_inforecord-scale_pr9. PERFORM scale_entry USING i_inforecord-scale_qty10 i_inforecord-scale_pr10. PERFORM insert_bdc_new. ENDIF. ENDFORM. " insert_screen_header*&---------------------------------------------------------------------**& Form insert_bdc*&---------------------------------------------------------------------** Insert BDC*----------------------------------------------------------------------* FORM insert_bdc_new . CALL FUNCTION 'BDC_INSERT' EXPORTING tcode = 'ME11'* POST_LOCAL = NOVBLOCAL* PRINTING = NOPRINT* SIMUBATCH = ' '* CTUPARAMS = ' ' TABLES dynprotab = i_bdc_table EXCEPTIONS internal_error = 1 not_open = 2 queue_error = 3 tcode_invalid = 4 printing_invalid = 5 posting_invalid = 6 OTHERS = 7 . IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CLEAR i_bdc_table[]. ENDFORM. " insert_bdc*&---------------------------------------------------------------------**& Form close_bdc_session*&---------------------------------------------------------------------** Close the BDC session*----------------------------------------------------------------------* FORM close_bdc_session . CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS not_open = 1 queue_error = 2 OTHERS = 3. 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. " close_bdc_session*&---------------------------------------------------------------------**& Form f_load_input_file*&---------------------------------------------------------------------** Upload the file*----------------------------------------------------------------------* FORM f_load_input_file.* Check always Local file for upload IF p_rloc1 = zc_yes. CALL FUNCTION 'WS_UPLOAD' EXPORTING filename = p_fname1 filetype = 'DAT' TABLES data_tab = i_inforecord EXCEPTIONS conversion_error = 1 file_open_error = 2 file_read_error = 3 invalid_type = 4 no_batch = 5 unknown_error = 6 invalid_table_width = 7 gui_refuse_filetransfer = 8 customer_error = 9 OTHERS = 10. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. STOP. ENDIF. ENDIF.* ENDFORM. " f_load_input_file*&---------------------------------------------------------------------**& Form release_bdc*&---------------------------------------------------------------------** Release the session*----------------------------------------------------------------------* FORM release_bdc. SUBMIT rsbdcsub WITH mappe EQ p_group WITH von EQ sy-datum WITH bis EQ sy-datum WITH fehler EQ '.' EXPORTING LIST TO MEMORY AND RETURN. ENDFORM. " release_bdc*&---------------------------------------------------------------------**& Form scale_entry*&---------------------------------------------------------------------** Populate the Scale quantities*----------------------------------------------------------------------** -->P_SCALE_QTY* -->P_SCALE_PRICE*----------------------------------------------------------------------* FORM scale_entry USING p_scale_qty p_scale_price.* Increment the Counter g_counter = g_counter + 1. IF p_scale_qty <> space. CONCATENATE 'KONM-KSTBM(' g_counter ')' INTO g_field_name. PERFORM bdc_insert_field USING g_field_name p_scale_qty. CONCATENATE 'KONM-KBETR(' g_counter ')' INTO g_field_name. PERFORM bdc_insert_field USING g_field_name p_scale_price. ENDIF. ENDFORM.*&---------------------------------------------------------------------**& Form bdc_insert*&---------------------------------------------------------------------** To uncheck the Unlimited (UEBTK)*----------------------------------------------------------------------* FORM bdc_insert USING f_name f_value. CLEAR i_bdc_table. i_bdc_table-fnam = f_name. i_bdc_table-fval = f_value. APPEND i_bdc_table. ENDFORM. "bdc_insert来源: http://www.sap-img.com/abap/bdc-program-for-purchase-info-records.htm