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
 
 
Serkan AKKAVAK
Computer Engineer
ABAP Developer & SAP MM SD Consultant
Contact : serkurumsal@yandex.com