|
*&---------------------------------------------------------------------* *& 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_insertABAP Tips by : Raj |
Related ABAP Topics:
Get help for your ABAP problems
ABAP Books
More ABAP Tips
SAP Basis, ABAP Programming and Other IMG Stuff http://www.erpgreat.com All the site contents are Copyright © www.erpgreat.com
and the content authors. All rights reserved.
|