• BDC program for Purchase Info Records (ME11)


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

  • 相关阅读:
    storm中的Scheduler
    开启flume的远程调试功能
    修改flume源码,使其HTTPSource具备访问路径功能
    非功能测试——效率测试
    python100例
    awk命令
    shell正则表达式
    python的垃圾回收机制
    冯-诺伊曼体系结构
    jmeter读取文件内容做变量
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157400.html
Copyright © 2020-2023  润新知