Purchase Order Info Records

*&---------------------------------------------------------------------*
*& REPORT ZMM0069 *
*&---------------------------------------------------------------------*
*& Module : MM |
*& Application : The program loads the Purchasing Inforecords |
*& |
*&---------------------------------------------------------------------*
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.                    "scale_entry
*&---------------------------------------------------------------------*
*& 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

*Selection texts
*----------------------------------------------------------
* P_FNAME1         Filename
* P_GROUP         Purchasing Group
* P_RLOC1         Reciveing Location

--------------------------------------------------------------------------------

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.