BDC program for Purchase Info Records (ME11)

来源:互联网 发布:java中什么是类 编辑:程序博客网 时间:2024/06/05 04:14

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

原创粉丝点击