Friday, March 22, 2013

BDC Example

**********************************************************************
*                         TRITH AGRO                                 *
**********************************************************************
* Object Name:     ZFI_BDCX_IA05                                     *
* Description:     Task List Creation using BDC                      *
* Tech. Consultant:  Binay Biswakarma                                *
* Func. Consultant:  Anish Ahya                                      *
* Date : 08.09.2011                                                  *
* Initial TR number: DEVK900584                                      *
**********************************************************************
* Change TR number          Change by                 Change date    *
*                                                                    *
*                                                                    *
**********************************************************************

REPORT  zfi_bdcx_ia05 MESSAGE-ID 8i.

*---Header File Structure
DATA: BEGIN OF ihead OCCURS 0,
      comno TYPE i,             "Reference / Common Key for Header File & Item File (Internal Use)
      plnnr LIKE plpo-plnnr,    "Group No
      ktext LIKE plkod-ktext,   "Task list description
      sttag LIKE rc271-sttag,   "Key Date
      arbpl LIKE rcr01-arbpl,   "Work Center
      werks LIKE t001w-werks,   "Plant
      verwe LIKE plkod-verwe,   "Usage
      statu LIKE plkod-statu,   "Status
      strat LIKE plkod-strat,   "Management Strategy
      vfrdt LIKE rc271-sttag,   "Valid from Date
      anlzu  LIKE plkod-anlzu,    "  Syst.Condition
      END OF ihead.

*---Item File Structure
DATA: BEGIN OF iitem OCCURS 0,
      comno TYPE i,             "Reference / Common Key for Header File & Item File (Internal Use)
      ltxa1(100) TYPE  c,       "Opration Description (Maximum 100 Character)
      arbei LIKE plpod-arbei,   "Amount of work involved in performing the activity.
      arbeh LIKE plpod-arbeh,   "Unit for work.
      anzzl LIKE plpod-anzzl,   "Number of capacities required
      dauno LIKE plpod-dauno,   "Normal duration of the activity
      daune LIKE plpod-daune,   "Normal duration/unit
      kzyk1 LIKE riewp-kzyk1,   "Short text for the maintenance cycle (time/performance)
      larnt LIKE plpod-larnt,   "Activity Type
      END OF iitem.

DATA ifile LIKE iitem OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF imess OCCURS 0,
      messa(100) TYPE c,
      END OF imess.

*---BDC Structure
DATA : bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE,
       msg_tab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
       gv_flag. " External group indicator

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETER: p_mode TYPE ctu_mode AS LISTBOX VISIBLE LENGTH 30 OBLIGATORY DEFAULT 'N'.  "BDC Upload Mode
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETER: p_head LIKE rlgrap-filename OBLIGATORY.     "Group Header File Name
SELECTION-SCREEN SKIP 1.
PARAMETER: p_item LIKE rlgrap-filename OBLIGATORY.     "Group Item   File Name
SELECTION-SCREEN END OF BLOCK b2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_head.
  PERFORM file_f4 USING p_head.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_item.
  PERFORM file_f4 USING p_item.

START-OF-SELECTION.
  PERFORM upload_header_data.
  PERFORM upload_item_data.
  PERFORM check_validation.
  LOOP AT ihead.
    PERFORM call_bdc.
  ENDLOOP.

  IF imess[] IS NOT INITIAL.
    PERFORM display_message.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  FILE_F4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM file_f4 USING p_input LIKE rlgrap-filename.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
      field_name    = ' '
    IMPORTING
      file_name     = p_input.

ENDFORM.                                                    " FILE_F4

*&---------------------------------------------------------------------*
*&      Form  UPLOAD_HEADER_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM upload_header_data.

  DATA p_file TYPE string.

  MOVE p_head TO p_file.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = p_file
      filetype                = 'DAT'
    TABLES
      data_tab                = ihead
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      OTHERS                  = 17.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " UPLOAD_HEADER_DATA
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_ITEM_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM upload_item_data.

  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      filename                = p_item
      filetype                = 'DAT'
    TABLES
      data_tab                = iitem
    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 'I' NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " UPLOAD_ITEM_DATA
*&---------------------------------------------------------------------*
*&      Form  CHECK_VALIDATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_validation .

  TABLES plko.

  LOOP AT ihead.

    IF ihead-plnnr IS NOT INITIAL.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = ihead-plnnr
        IMPORTING
          output = ihead-plnnr.

      SELECT SINGLE * FROM plko
      WHERE plnty EQ 'A'
        AND plnnr EQ ihead-plnnr.

      IF sy-subrc NE 0.
*        MESSAGE i000 WITH 'Task List Group ' ihead-plnnr ' Does not Exist'.
*        STOP.
        gv_flag = 'X'.
      ELSE.
        SELECT SINGLE datuv FROM plko
        INTO ihead-vfrdt
        WHERE plnty EQ 'A'
          AND plnnr EQ ihead-plnnr
          AND datuv LE ihead-sttag.

        IF sy-subrc EQ 0.
          MODIFY ihead TRANSPORTING vfrdt.
        ENDIF.

      ENDIF.

    ELSEIF ihead-ktext IS INITIAL.
      MESSAGE e000 WITH 'Please enter Task list description'.
    ELSEIF ihead-sttag IS INITIAL.
      MESSAGE e000 WITH 'Please enter Key Date'.
    ELSEIF ihead-arbpl IS INITIAL.
      MESSAGE e000 WITH 'Please enter Work Center'.
    ELSEIF ihead-werks IS INITIAL.
      MESSAGE e000 WITH 'Please enter Plant'.
    ELSEIF ihead-verwe IS INITIAL.
      MESSAGE e000 WITH 'Please enter Usage'.
    ELSEIF ihead-statu IS INITIAL.
      MESSAGE e000 WITH 'Please enter Status'.
    ELSEIF ihead-strat IS INITIAL.
      MESSAGE e000 WITH 'Please enter Management Strategy'.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " CHECK_VALIDATION
*&---------------------------------------------------------------------*
*&      Form  CALL_BDC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_bdc .

  DATA: p_date(10) TYPE c,
        p_anzzl(3) TYPE c,
        p_arbei(9) TYPE c,
        p_dauno(7) TYPE c,
        ltxa2(40)  TYPE c,
        ltxa3(20)  TYPE c.

  CLEAR  : bdcdata,msg_tab,ifile.
  REFRESH: bdcdata,msg_tab,ifile.

  LOOP AT iitem WHERE comno EQ ihead-comno.
    MOVE-CORRESPONDING iitem TO ifile.
    APPEND ifile.
  ENDLOOP.

  WRITE ihead-sttag TO p_date.

  PERFORM bdc_dynpro USING 'SAPLCPDI'      '3001'.
  PERFORM bdc_field  USING 'BDC_CURSOR'    'RC271-PLNNR'.
  PERFORM bdc_field  USING 'BDC_OKCODE'    '/00'.
  PERFORM bdc_field  USING 'RC271-PLNNR'   ihead-plnnr.
  PERFORM bdc_field  USING 'RC271-STTAG'   p_date.

  IF ihead-plnnr IS NOT INITIAL AND ihead-vfrdt IS NOT INITIAL AND gv_flag IS INITIAL.
    PERFORM bdc_dynpro USING 'SAPLCPDI'    '3200'.
    PERFORM bdc_field  USING 'BDC_CURSOR'  'RC270-HEAD2'.
    PERFORM bdc_field  USING 'BDC_OKCODE'  '=ANLG'.
  ENDIF.

  PERFORM bdc_dynpro USING 'SAPLCPDA'      '3010'.
  PERFORM bdc_field  USING 'BDC_CURSOR'    'PLKOD-STRAT'.
  PERFORM bdc_field  USING 'BDC_OKCODE'    '=VOUE'.
  PERFORM bdc_field  USING 'PLKOD-KTEXT'   ihead-ktext.
  PERFORM bdc_field  USING 'PLKOD-WERKS'   ihead-werks.
  PERFORM bdc_field  USING 'RCR01-ARBPL'   ihead-arbpl.
  PERFORM bdc_field  USING 'PLKOD-VERWE'   ihead-verwe.
  PERFORM bdc_field  USING 'PLKOD-STATU'   ihead-statu.
  PERFORM bdc_field  USING 'PLKOD-STRAT'   ihead-strat.
*  Field Addition
  PERFORM bdc_field  USING 'PLKOD-ANLZU'   ihead-anlzu.
* End Addition

  READ TABLE ifile INDEX 1.

  CLEAR: p_dauno,ltxa2,ltxa3,p_anzzl,p_arbei.

  WRITE ifile-anzzl TO p_anzzl LEFT-JUSTIFIED.
  WRITE ifile-arbei TO p_arbei LEFT-JUSTIFIED.
  WRITE ifile-dauno TO p_dauno LEFT-JUSTIFIED.

  PERFORM bdc_dynpro USING 'SAPLCPDI'    '3400'.
  PERFORM bdc_field  USING 'BDC_CURSOR'  'PLPOD-LTXA1(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE'  '=PICK'.

  MOVE ifile-ltxa1+40(40) TO ltxa2.
  MOVE ifile-ltxa1+80(20) TO ltxa3.

  PERFORM bdc_field  USING 'PLPOD-LTXA1(01)' ifile-ltxa1(40).
  PERFORM bdc_field  USING 'PLPOD-ARBEI(01)' p_arbei.
  PERFORM bdc_field  USING 'PLPOD-ARBEH(01)' ifile-arbeh.
  PERFORM bdc_field  USING 'PLPOD-ANZZL(01)' p_anzzl.
  PERFORM bdc_field  USING 'PLPOD-DAUNO(01)' p_dauno.
  PERFORM bdc_field  USING 'PLPOD-DAUNE(01)' ifile-daune.
* Field Addition
  PERFORM bdc_field  USING 'PLPOD-LARNT(01)' ifile-larnt.

  PERFORM bdc_dynpro USING 'SAPLCPDO'        '3370'.
  PERFORM bdc_field  USING 'BDC_OKCODE'      '=LTXT'.

  PERFORM bdc_dynpro USING 'SAPLSTXX'         '1100'.
  PERFORM bdc_field  USING 'BDC_OKCODE'       '=TXBA'.
  PERFORM bdc_field  USING 'RSTXT-TXLINE(03)' ltxa2.
  PERFORM bdc_field  USING 'RSTXT-TXLINE(04)' ltxa3.

  PERFORM bdc_dynpro USING 'SAPLCPDO'        '3370'.
  PERFORM bdc_field  USING 'BDC_OKCODE'      '=BACK'.

  PERFORM bdc_dynpro USING 'SAPLCPDI'        '3400'.
  PERFORM bdc_field  USING 'BDC_CURSOR'      'PLPOD-LTXA1(02)'.
  PERFORM bdc_field  USING 'BDC_OKCODE'      '=P+'.

  LOOP AT ifile.

    IF sy-tabix EQ 1.
      CONTINUE.
    ENDIF.

    CLEAR: p_dauno,ltxa2,ltxa3,p_anzzl,p_arbei.
    WRITE ifile-anzzl TO p_anzzl LEFT-JUSTIFIED.
    WRITE ifile-arbei TO p_arbei LEFT-JUSTIFIED.
    WRITE ifile-dauno TO p_dauno LEFT-JUSTIFIED.

    PERFORM bdc_dynpro USING 'SAPLCPDI'        '3400'.
    PERFORM bdc_field  USING 'BDC_CURSOR'      'PLPOD-LTXA1(02)'.
    PERFORM bdc_field  USING 'BDC_OKCODE'      '=PICK'.

    MOVE ifile-ltxa1+40(40) TO ltxa2.
    MOVE ifile-ltxa1+80(20) TO ltxa3.

    PERFORM bdc_field  USING 'PLPOD-LTXA1(02)' ifile-ltxa1(40).
    PERFORM bdc_field  USING 'PLPOD-ARBEI(02)' p_arbei.
    PERFORM bdc_field  USING 'PLPOD-ARBEH(02)' ifile-arbeh.
    PERFORM bdc_field  USING 'PLPOD-ANZZL(02)' p_anzzl.
    PERFORM bdc_field  USING 'PLPOD-DAUNO(02)' p_dauno.
    PERFORM bdc_field  USING 'PLPOD-DAUNE(02)' ifile-daune.
*   field Addition
    PERFORM bdc_field  USING 'PLPOD-LARNT(01)' ifile-larnt.

    PERFORM bdc_dynpro USING 'SAPLCPDO'        '3370'.
    PERFORM bdc_field  USING 'BDC_OKCODE'      '=LTXT'.

    PERFORM bdc_dynpro USING 'SAPLSTXX'        '1100'.
    PERFORM bdc_field  USING 'BDC_OKCODE'      '=TXBA'.
    PERFORM bdc_field  USING 'RSTXT-TXLINE(03)' ltxa2.
    PERFORM bdc_field  USING 'RSTXT-TXLINE(04)' ltxa3.

    PERFORM bdc_dynpro USING 'SAPLCPDO'      '3370'.
    PERFORM bdc_field  USING 'BDC_OKCODE'    '=BACK'.

    PERFORM bdc_dynpro USING 'SAPLCPDI'        '3400'.
    PERFORM bdc_field  USING 'BDC_CURSOR'      'PLPOD-LTXA1(02)'.
    PERFORM bdc_field  USING 'BDC_OKCODE'      '=P+'.

  ENDLOOP.

  PERFORM bdc_dynpro USING 'SAPLCPDI'      '3400'.
  PERFORM bdc_field  USING 'BDC_CURSOR'    'PLPOD-LTXA1(03)'.
  PERFORM bdc_field  USING 'BDC_OKCODE'    '=MAAL'.

  PERFORM bdc_dynpro USING 'SAPLCPDI'      '3400'.
  PERFORM bdc_field  USING 'BDC_CURSOR'    'PLPOD-LTXA1(03)'.
  PERFORM bdc_field  USING 'BDC_OKCODE'    '=WPLT'.

  PERFORM bdc_dynpro USING 'SAPLCPDI'      '3600'.
  PERFORM bdc_field  USING 'BDC_CURSOR'    'RC270-HEAD2'.
  PERFORM bdc_field  USING 'BDC_OKCODE'    '=IWPZ'.

  LOOP AT ifile.
    PERFORM bdc_dynpro USING 'SAPLCIDI'      '3000'.
    PERFORM bdc_field  USING 'BDC_CURSOR'    'RIEWP-KZYK1(01)'.
    PERFORM bdc_field  USING 'BDC_OKCODE'    '=NEXT'.
    PERFORM bdc_field  USING 'RIEWP-KZYK1(01)' ifile-kzyk1.
  ENDLOOP.

  PERFORM bdc_dynpro USING 'SAPLCIDI'      '3000'.
  PERFORM bdc_field  USING 'BDC_CURSOR'    'RIEWP-KZYK1(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE'    '=BU'.

  CALL TRANSACTION 'IA05'
       USING bdcdata
       UPDATE 'A'
       MODE   p_mode
       MESSAGES INTO msg_tab.

  IF p_mode NE 'A'.
    WAIT UP TO 3 SECONDS.
  ENDIF.

  READ TABLE msg_tab WITH KEY msgtyp = 'E'.
  IF sy-subrc EQ 0.
    PERFORM display_messages.
  ELSE.
    IF ihead-plnnr IS NOT INITIAL.
      CLEAR imess.
      CONCATENATE 'New Conunter is Created for Group ' ihead-plnnr INTO imess-messa SEPARATED BY space.
      APPEND imess.
    ELSE.
      READ TABLE msg_tab WITH KEY msgtyp = 'S'
                                  msgid  = 'CI'
                                  msgnr  = '317'.
      CLEAR imess.
      CONCATENATE 'New Group ' msg_tab-msgv1 ' Created' INTO imess-messa SEPARATED BY space.
      APPEND imess.
    ENDIF.
  ENDIF.

ENDFORM.                    " CALL_BDC

*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.

  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.

ENDFORM.                    " BDC_DYNPRO

*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam fval.

  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.

ENDFORM.                    " BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  display_messages
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_messages .

  DATA msg_str(80).

  LOOP AT msg_tab.

    AT FIRST.
      LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
      NEW-PAGE LINE-SIZE 100.
    ENDAT.

    PERFORM get_message_text CHANGING msg_str.

    CASE msg_tab-msgtyp.
      WHEN 'E' OR 'A'. "Error or Abandend
        FORMAT COLOR 6. "Red
      WHEN 'W'.  "Warning
        FORMAT  COLOR 3. "Yellow
      WHEN 'I'.  "Information
        FORMAT COLOR 1. "Blue
      WHEN 'S'.  "Information
        FORMAT COLOR 5. "Green
    ENDCASE.
    WRITE: /(5) msg_tab-msgid ,msg_tab-msgnr, msg_str.

  ENDLOOP.

  CLEAR: imess,msg_tab. REFRESH: imess,msg_tab.

ENDFORM.                    " display_messages
*&---------------------------------------------------------------------*
*&      Form  GET_MESSAGE_TEXT
*&---------------------------------------------------------------------*
FORM get_message_text CHANGING p_msg_str.

  CALL FUNCTION 'MESSAGE_TEXT_BUILD'
    EXPORTING
      msgid               = msg_tab-msgid
      msgnr               = msg_tab-msgnr
      msgv1               = msg_tab-msgv1
      msgv2               = msg_tab-msgv2
      msgv3               = msg_tab-msgv3
      msgv4               = msg_tab-msgv4
    IMPORTING
      message_text_output = p_msg_str.

ENDFORM.                    " GET_MESSAGE_TEXT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_message .

  LOOP AT imess.

    AT FIRST.
      LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
      NEW-PAGE LINE-SIZE 100.
      FORMAT COLOR 5.
    ENDAT.

    WRITE:/ imess-messa.

  ENDLOOP.

ENDFORM.                    " DISPLAY_MESSAGE

*Text elements
*----------------------------------------------------------
* 001 BDC Processing Mode
* 002 File Name


*Selection texts
*----------------------------------------------------------
* P_HEAD         Group Header File Name
* P_ITEM         Group Item File Name
* P_MODE         BDC Processing Mode


*Messages
*----------------------------------------------------------
*
* Message class: ZW
*000   & & & & & &

DIrect Upload Data in Select Option in Standard Report

 
 Dear All,
    Using This Program You can Directly Upload Data in Select-Option of Standard Report. This Program is Special For TCDOE - MRBR. 




*&---------------------------------------------------------------------*
*& Report  ZMRBR_REPORT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZMRBR_REPORT.


TABLES:    bkpf.
type-pools: slis.                                 "ALV Declarations
*Data Declaration
*----------------
TYPES : BEGIN OF ty_final,
          belnr TYPE bkpf-belnr,
          budat TYPE bkpf-budat,
          gjahr TYPE bkpf-gjahr,
          cpudt TYPE bkpf-cpudt,
          awkey TYPE bkpf-awkey,
         END OF ty_final.
TYPES : BEGIN OF ty_final1,
          belnr1 TYPE bkpf-belnr,
        END OF ty_final1.

data : it_final TYPE STANDARD TABLE OF ty_final,
       wa_final TYPE ty_final,
       it_final1 TYPE STANDARD TABLE OF ty_final1,
       wa_final1  TYPE ty_final1.
*
*ALV data declarations
data: fieldcatalog type slis_t_fieldcat_alv with header line,
      gd_tab_group type slis_t_sp_group_alv,
      gd_layout    type slis_layout_alv,
      gd_repid     like sy-repid,
      gt_events     type slis_t_event,
      gd_prntparams type slis_print_alv.


************************************************************************
*Start-of-selection.
START-OF-SELECTION.

  BREAK 10115.
  perform data_retrieval.
  if it_final[] IS INITIAL.
    MESSAGE 'Data is not found' TYPE 'I'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  perform build_fieldcatalog.
  perform build_layout.
  perform build_events.
  perform build_print_params.
  perform display_alv_report.

*
*  SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001 .
*    SELECT-OPTIONS s_purch for ekko-ebeln.  ""Purchase Document
*    SELECT-OPTIONS s_code for ekpo-werks.     ""Plant
*    SELECT-OPTIONS s_date for ekko-bedat.     "Document Date
*    SELECT-OPTIONS s_vndr for ekko-lifnr.     "Vendor
*    SELECT-OPTIONS s_mtnr for ekpo-matkl.     "Material Group
*    SELECT-OPTIONS s_mat for ekpo-matnr.      "Material
*    SELECT-OPTIONS S_DAT FOR eket-eindt.      "Posting Date
*  SELECTION-SCREEN END OF BLOCK a1.

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001 .
  SELECT-OPTIONS s_doc for bkpf-belnr.
*  SELECT-OPTIONS s_year for bkpf-gjahr.
  SELECT-OPTIONS s_date for bkpf-budat.
  SELECT-OPTIONS s_vndr for bkpf-cpudt.
  PARAMETERS  s_year LIKE bkpf-gjahr DEFAULT '2012'.
SELECTION-SCREEN END OF BLOCK a1.


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.

* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manualy
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but can
* also allow you  more control of the final product.

* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such as
* total. You may need to provide more information than if you were
* simply displaying the result
*               I.e. Field type may be required in-order for
*                    the 'TOTAL' function to work.

  DATA : RS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

  fieldcatalog-fieldname   = 'BELNR'.
  fieldcatalog-seltext_m   = 'Document NO.'.
  fieldcatalog-col_pos     = 1.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-key         = 'X'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'GJAHR'.
  fieldcatalog-seltext_m   = 'Fiscal Year'.
  fieldcatalog-col_pos     = 2.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-key         = 'X'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'BUDAT'.
  fieldcatalog-seltext_m   = 'Posting Date'.
  fieldcatalog-col_pos     = 3.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-key         = 'X'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'CPUDT'.
  fieldcatalog-seltext_m   = 'Entry Date'.
  fieldcatalog-col_pos     = 4.
  fieldcatalog-outputlen   = 10.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-key         = 'X'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'AWKEY'.
  fieldcatalog-seltext_m   = 'Ref Key'.
  fieldcatalog-col_pos     = 5.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.


endform.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
  gd_layout-no_input          = 'X'.
  gd_layout-colwidth_optimize = 'X'.
  gd_layout-totals_text       = 'Totals'(201).
*  gd_layout-totals_only        = 'X'.
*  gd_layout-f2code            = 'DISP'.  "Sets fcode for when double
*                                         "click(press f2)
*  gd_layout-zebra             = 'X'.
*  gd_layout-group_change_edit = 'X'.
*  gd_layout-header_text       = 'helllllo'.
endform.                    " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
  gd_repid = sy-repid.
  call function 'REUSE_ALV_GRID_DISPLAY'
       exporting
            i_callback_program      = gd_repid
            i_callback_top_of_page   = 'TOP-OF-PAGE'  "see FORM
            i_callback_user_command = 'USER_COMMAND'
*            i_grid_title           = outtext
            is_layout               = gd_layout
            it_fieldcat             = fieldcatalog[]
*            it_special_groups       = gd_tabgroup
            it_events               = gt_events
            is_print                = gd_prntparams
            i_save                  = 'X'
*            is_variant              = z_template
       tables
            t_outtab                = it_final
       exceptions
            program_error           = 1
            others                  = 2.
  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.                    " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
form data_retrieval.

  SELECT  belnr
          budat
          gjahr
          cpudt
          awkey
          FROM bkpf
          INTO TABLE it_final
    WHERE belnr in s_doc
     AND budat  in s_date
     AND cpudt  in s_vndr
     AND gjahr = s_year.


  delete adjacent duplicates FROM it_final .
BREAK 10115.
  LOOP AT it_final INTO wa_final.
  wa_final1-belnr1 = wa_final-belnr.
APPEND wa_final1 to it_final1.
ENDLOOP.
*  delete adjacent duplicates FROM it_final COMPARING ALL FIELDS.
endform.                    " DATA_RETRIEVAL


*-------------------------------------------------------------------*
* Form  TOP-OF-PAGE                                                 *
*-------------------------------------------------------------------*
* ALV Report Header                                                 *
*-------------------------------------------------------------------*
Form top-of-page.
*ALV Header declarations
  data: t_header type slis_t_listheader,
        wa_header type slis_listheader,
        t_line like wa_header-info,
        ld_lines type i,
        ld_linesc(10) type c.

* Title
  wa_header-typ  = 'H'.

  wa_header-info = 'MRBR R BLocke Remover Report'.
  append wa_header to t_header.
  clear wa_header.

* Date
  wa_header-typ  = 'S'.
  wa_header-key = 'Date: '.
  CONCATENATE  sy-datum+6(2) '.'
               sy-datum+4(2) '.'
               sy-datum(4) INTO wa_header-info.   "todays date
  append wa_header to t_header.
  clear: wa_header.

* Total No. of Records Selected
  describe table it_final lines ld_lines.
  ld_linesc = ld_lines.
  concatenate 'Total No. of Records Selected: ' ld_linesc
                    into t_line separated by space.
  wa_header-typ  = 'A'.
  wa_header-info = t_line.
  append wa_header to t_header.
  clear: wa_header, t_line.

  call function 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = t_header.
*            i_logo             = 'Z_LOGO'.
endform.                    "top-of-page


*------------------------------------------------------------------*
*       FORM USER_COMMAND                                          *
*------------------------------------------------------------------*
*       --> R_UCOMM                                                *
*       --> RS_SELFIELD                                            *
*------------------------------------------------------------------*
*************************Double click Event**************************
*********************************************************************
FORM user_command USING r_ucomm LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
    WHEN '&IC1'.
*   Check field clicked on within ALVgrid report
      IF  rs_selfield-fieldname = 'AWKEY'.
  BREAK 10115.
  data: r_belnr type range of awkey,
      r_belnr_l like line of r_belnr.
*now in the code  replace1 your loop by this:
loop at it_final into wa_final.
 r_belnr_l-sign = 'I'.
 r_belnr_l-OPTION = 'EQ'.
 r_belnr_l-LOW = wa_final-awkey.
 r_belnr_l-high = ' '.
 append r_belnr_l to r_belnr.
endloop.
SUBMIT RM08RELEASE VIA SELECTION-SCREEN WITH SO_BELNR IN r_belnr AND RETURN.
* LOOP AT it_final INTO wa_final.
   ENDIF.
 ENDCASE.
ENDFORM.
**   Check field clicked on within ALVgrid report
*      IF rs_selfield-fieldname = 'AWKEY'.
**     Read data table, using index of row user clicked on
*        READ TABLE it_final INTO wa_final INDEX rs_selfield-tabindex.
*        BREAK 10115.
**     Set parameter ID for transaction screen field
*        SET PARAMETER ID 'AWK' FIELD wa_final-AWKEY.
*        SET PARAMETER ID 'AWK' FIELD wa_final-AWKEY.
**     Sxecute transaction MRBR, and skip initial data entry screen
*        CALL TRANSACTION 'MRBR' AND SKIP FIRST SCREEN.
*      ENDIF.
                     "user_command


*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENTS
*&---------------------------------------------------------------------*
*       Build events table
*----------------------------------------------------------------------*
form build_events.
  data: ls_event type slis_alv_event.

  call function 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = gt_events[].
  read table gt_events with key name =  slis_ev_end_of_page
                           into ls_event.
  if sy-subrc = 0.
    move 'END_OF_PAGE' to ls_event-form.
    append ls_event to gt_events.
  endif.

  read table gt_events with key name =  slis_ev_end_of_list
                         into ls_event.
  if sy-subrc = 0.
    move 'END_OF_LIST' to ls_event-form.
    append ls_event to gt_events.
  endif.
endform.                    " BUILD_EVENTS


*&---------------------------------------------------------------------*
*&      Form  BUILD_PRINT_PARAMS
*&---------------------------------------------------------------------*
*       Setup print parameters
*----------------------------------------------------------------------*
form build_print_params.
  gd_prntparams-reserve_lines = '3'.   "Lines reserved for footer
  gd_prntparams-no_coverpage = 'X'.
endform.                    " BUILD_PRINT_PARAMS


*&---------------------------------------------------------------------*
*&      Form  END_OF_PAGE
*&---------------------------------------------------------------------*
form END_OF_PAGE.
  data: listwidth type i,
        ld_pagepos(10) type c,
        ld_page(10)    type c.

  write: sy-uline(50).
  skip.
  write:/40 'Page:', sy-pagno .
endform.                    "END_OF_PAGE

*&---------------------------------------------------------------------*
*&      Form  END_OF_LIST
*&---------------------------------------------------------------------*
form END_OF_LIST.
  data: listwidth type i,
        ld_pagepos(10) type c,
        ld_page(10)    type c.

  skip.
  write:/40 'Page:', sy-pagno .
endform.                    "END_OF_LIST