BDC program for Purchase Info Records (ME11)

    技术2022-05-11  45

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


    最新回复(0)