| *&---------------------------------------------------------------------* |
| *& 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 |