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

posted on 2007-02-13 08:58  毛小娃  阅读(329)  评论(0编辑  收藏  举报

导航