Thursday 27 June 2013

Interactive ALV Report Example

Hi, In this Post you can find an example for Interactive ALV report.
The scenario is, to display the Sales Header data based on user input of sales order number and order type. When user double clicks on any sales order number, display the item wise details.

This Interactive ALV report uses tables VBAK, VBAP, LIPS, LIKP, VBRK. And based on the Order type viz  Inquiry (A), Quotation (B), Order (C), Delivery (J), Returns(M), Invoice (H) retrieves the Header and Item Details.



*&---------------------------------------------------------------------*
*& Report  ZTEST_ALV2_RE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_ALV2_RE NO STANDARD PAGE HEADING MESSAGE-ID ZPARTH_MESSAGE.

*INCLUDE ZTEST_ALV2_DECL.
*&---------------------------------------------------------------------*
*&  Include           ZTEST_ALV2_DECL
*&---------------------------------------------------------------------*
TYPE-POOLS : SLIS.
TABLES: VBAK, VBAP, LIPS, LIKP, VBRK.
TYPES BEGIN OF TY_VBAK ,
         VBELN TYPE VBELN,
         VBTYP TYPE VBTYP,
         VKORG TYPE VKORG,
         VTWEG TYPE VTWEG,
         SPART TYPE SPART,
         ERDAT TYPE ERDAT,
      END OF TY_VBAK.

 TYPES: BEGIN OF TY_VBAP,
          VBELN TYPE VBELN,
          POSNR TYPE POSNR,
          MATNR TYPE MATNR,
          PSTYV TYPE PSTYV,
          MATKL TYPE MATKL,
          WERKS TYPE WERKS_EXT,
          POSAR TYPE POSAR,
          WAERK TYPE WAERK,
          MEINS TYPE MEINS,
          NETPR TYPE NETPR,
          AUFNR TYPE AUFNR,
       END OF TY_VBAP,

      BEGIN OF TY_VBRK,
         VBELN TYPE VBELN,
         VBTYP TYPE VBTYP,
         VKORG TYPE VKORG,
         VTWEG TYPE VTWEG,
         FKART TYPE FKART,
         FKTYP TYPE FKTYP,
      END OF TY_VBRK,

     BEGIN OF TY_VBRP,
       VBELN TYPE VBELN_VF,
       POSNR TYPE POSNR_VF,
       VRKME TYPE VRKME,
       FKIMG TYPE FKIMG,
       AUBEL TYPE VBELN_VA,
       AUPOS TYPE POSNR_VA,
       MATNR TYPE MATNR,
       PMATN TYPE PMATN,
       CHARG TYPE CHARG_D,
       MATKL TYPE MATKL,
     END OF TY_VBRP,

     BEGIN OF TY_LIKP,
        VBELN TYPE VBELN_VL,
        VKORG TYPE VKORG,
        ERDAT TYPE ERDAT,
        LFART TYPE LFART,
        LDDAT TYPE LDDAT,
        LFDAT TYPE LFDAT_V,
     END OF TY_LIKP,

      BEGIN OF TY_LIPS,
         VBELN TYPE VBELN_VL,
         POSNR TYPE POSNR_VL,
         MATNR TYPE MATNR,
         PSTYV TYPE PSTYV_VL,
         WERKS TYPE WERKS_D,
         WAVWR TYPE WAVWR,
         CHARG TYPE CHARG_D,
         VRKME TYPE VRKME,
         NETPR TYPE NETPR,
         HSDAT TYPE HSDAT,
     END OF TY_LIPS.

DATA:  IT_VBAK TYPE TABLE OF TY_VBAK,
      WA_VBAK TYPE TY_VBAK,
      IT_VBAP TYPE TABLE OF TY_VBAP,
      WA_VBAP TYPE TY_VBAP,
      IT_VBRK TYPE TABLE OF TY_VBRK,
      WA_VBRK TYPE TY_VBRK,
      IT_VBRP TYPE TABLE OF TY_VBRP,
      WA_VBRP TYPE TY_VBRP,
      IT_LIKP TYPE TABLE OF TY_LIKP,
      WA_LIKP TYPE TY_LIKP,
      IT_LIPS TYPE TABLE OF TY_LIPS,
      WA_LIPS TYPE TY_LIPS.


DATA: IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV,
      WA_FLDCAT TYPE SLIS_FIELDCAT_ALV,
      TABLNAME(20),
      FLDNAME(20),
      SLTXT_L(20).

DATA: IT_ALVEVNT TYPE SLIS_T_EVENT,
      WA_ALVEVNT TYPE SLIS_ALV_EVENT.

DATA: IT_LISTHEAD TYPE SLIS_T_LISTHEADER,
      WA_LISTHEAD TYPE SLIS_LISTHEADER.

DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.

DATA : REPID LIKE SY-REPID.
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.


  SELECT-OPTIONS:  S_VBELN FOR VBAK-VBELN.
  PARAMETERS:      P_VBTYP TYPE VBTYP OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK B1.

AT SELECTION-SCREEN.
  IF NOT ( P_VBTYP EQ 'C'
      OR   P_VBTYP EQ 'J'
      OR   P_VBTYP EQ 'M'
      OR   P_VBTYP EQ 'A'
      OR   P_VBTYP EQ 'B'
      OR   P_VBTYP EQ 'H' ) .
    MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-002.
  ENDIF.

START-OF-SELECTION.
   IF P_VBTYP EQ 'C' OR P_VBTYP EQ 'A' OR P_VBTYP EQ 'B' OR P_VBTYP EQ 'H'.
    REFRESH IT_FLDCAT.
    CLEAR   WA_FLDCAT.



    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VBELN' 'DOC NUMBER'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'ERDAT' 'DOC CREATION DATE'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VBTYP' 'DOC TYPE'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VKORG' 'SALES ORG'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VTWEG' 'DISTRIBUTION CHNL'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'SPART' 'DIVISION'.

    PERFORM POPULATE_EVENT.
    PERFORM DATA_RETRIEVE.
    PERFORM DISPLAY_GRID.
  ELSEIF P_VBTYP EQ 'M'.
    REFRESH IT_FLDCAT.
    CLEAR   WA_FLDCAT.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VBELN' 'DOC NUMBER'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'FKART' 'BILLING TYPE'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VBTYP' 'DOC TYPE'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VKORG' 'SALES ORG'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'VTWEG' 'DISTRIBUTION CHNL'.
    PERFORM PREP_FLDCAT USING 'IT_VBAK' 'FKTYP' 'BILLING CATG'.


    PERFORM POPULATE_EVENT.
    PERFORM DATA_RETRIEVE_M.
    PERFORM DISPLAY_GRID_M.
  ELSEIF P_VBTYP EQ 'J'.
    REFRESH IT_FLDCAT.
    CLEAR   WA_FLDCAT.
    PERFORM PREP_FLDCAT USING 'IT_LIKP' 'VBELN' 'DOC NUMBER'.
    PERFORM PREP_FLDCAT USING 'IT_LIKP' 'ERDAT' 'DOC CREATION DATE'.
    PERFORM PREP_FLDCAT USING 'IT_LIKP' 'VKORG' 'SALES ORG'.
    PERFORM PREP_FLDCAT USING 'IT_LIKP' 'LFART' 'DELIVERY TYPE'.
    PERFORM PREP_FLDCAT USING 'IT_LIKP' 'LDDAT' 'LOADING DATE'.
    PERFORM PREP_FLDCAT USING 'IT_LIKP' 'LFDAT' 'DELIVERY DATE'.


    PERFORM POPULATE_EVENT.
    PERFORM DATA_RETRIEVE_J.
    PERFORM DISPLAY_GRID_J TABLES IT_LIKP .
  ENDIF.






*&---------------------------------------------------------------------*
*&      Form  PREP_FLDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREP_FLDCAT USING TABLNAME  FLDNAME   SLTXT_L.

    WA_FLDCAT-TABNAME = TABLNAME.
    WA_FLDCAT-FIELDNAME = FLDNAME.
    WA_FLDCAT-SELTEXT_L = SLTXT_L.
    APPEND WA_FLDCAT TO IT_FLDCAT.
    CLEAR WA_FLDCAT.

ENDFORM.                    " PREP_FLDCAT


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

    SELECT  VBELN
            VBTYP
            VKORG
            VTWEG
            SPART
            ERDAT
      FROM VBAK
      INTO CORRESPONDING FIELDS OF TABLE IT_VBAK
      WHERE VBELN IN S_VBELN
      AND   VBTYP EQ P_VBTYP.
   IF SY-SUBRC NE 0.
     MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-003.
   ENDIF.

ENDFORM.                    " DATA_RETRIEVE

*&---------------------------------------------------------------------*
*&      Form  POPULATE_EVENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM POPULATE_EVENT .
READ TABLE IT_ALVEVNT INTO WA_ALVEVNT WITH KEY NAME = 'TOP_OF_PAGE'.
  IF SY-SUBRC EQ 0.
    WA_ALVEVNT-FORM = 'TOP_OF_PAGE'.
    MODIFY IT_ALVEVNT FROM WA_ALVEVNT TRANSPORTING FORM WHERE NAME = WA_ALVEVNT-FORM.
  ENDIF.

  READ TABLE IT_ALVEVNT INTO WA_ALVEVNT WITH KEY NAME = 'USER_COMMAND'.
  IF SY-SUBRC EQ 0.
    WA_ALVEVNT-FORM = 'USER_INPUT'.
    MODIFY IT_ALVEVNT FROM WA_ALVEVNT TRANSPORTING FORM WHERE NAME = WA_ALVEVNT-NAME.
  ENDIF.
ENDFORM.                    " POPULATE_EVENT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_GRID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_PROGRAM                = SY-REPID
     I_CALLBACK_USER_COMMAND           = 'USER_INPUT'
     I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE'
     IS_LAYOUT                         = LAYOUT
     IT_FIELDCAT                       = IT_FLDCAT
     IT_EVENTS                         = IT_ALVEVNT
     I_SAVE                            =  'A'
    TABLES
      T_OUTTAB                          = IT_VBAK
   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_GRID

FORM TOP_OF_PAGE.   "#EC CALLED
  REFRESH IT_LISTHEAD.
  WA_LISTHEAD-TYP = 'H'.
  WA_LISTHEAD-INFO = TEXT-004.

  APPEND WA_LISTHEAD TO IT_LISTHEAD.


  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY       = IT_LISTHEAD
         .
ENDFORM.

FORM USER_INPUT USING CMD LIKE SY-UCOMM  SEL_FLD TYPE SLIS_SELFIELD.
IF P_VBTYP EQ 'C' OR P_VBTYP EQ 'A' OR P_VBTYP EQ 'B' OR P_VBTYP EQ 'H'.
  READ TABLE IT_VBAK INTO WA_VBAK INDEX SEL_FLD-TABINDEX.
  CASE CMD.
      WHEN '&IC1'.
        REFRESH IT_FLDCAT.
        CLEAR   WA_FLDCAT.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'VBELN' 'DOC NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'POSNR' 'DELIVERY ITEM'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'MATNR' 'MATERIAL NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'PSTYV' 'ITEM CATG'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'MATKL' 'MATERIAL GRP'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'WERKS' 'PLANT'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'POSAR' 'ITEM TYPE'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'WAERK' 'CURRENCY'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'MEINS' 'MATRL WT '.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'NETPR' 'NET PRICE'.
        PERFORM PREP_FLDCAT USING 'IT_VBAP' 'AUFNR' 'ORDER NUMBER'.

        PERFORM DATA_RETRIEVE_1.
        PERFORM DISPLAY_GRID_1.
  ENDCASE.
ELSEIF P_VBTYP EQ 'M'.
  READ TABLE IT_VBRK INTO WA_VBRK INDEX SEL_FLD-TABINDEX.
  CASE CMD.
    WHEN '&IC1'.
      REFRESH IT_FLDCAT.
        CLEAR   WA_FLDCAT.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'VBELN' 'DOC NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'POSNR' 'DELIVERY ITEM'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'MATNR' 'MATERIAL NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'VRKME' 'SALES UNIT'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'MATKL' 'MATERIAL GRP'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'FKIMG' 'INVOICED QTY'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'AUBEL' 'SALES DOC'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'AUPOS' 'DOC ITEM'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'PMATN' 'PRICE REF '.
*        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'NETPR' 'NET PRICE'.
        PERFORM PREP_FLDCAT USING 'IT_VBRP' 'CHARG' 'BATCH NUMBER'.

      PERFORM DATA_RETRIEVE_M1.
      PERFORM DISPLAY_GRID_M1.
   ENDCASE.
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ELSEIF P_VBTYP EQ 'J'.
  READ TABLE IT_LIKP INTO WA_LIKP INDEX SEL_FLD-TABINDEX.
  CASE CMD.
    WHEN '&IC1'.
      REFRESH IT_FLDCAT.
        CLEAR   WA_FLDCAT.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'VBELN' 'DOC NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'POSNR' 'DELIVERY ITEM'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'MATNR' 'MATERIAL NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'VRKME' 'SALES UNIT'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'WERKS' 'PLANT'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'PSTYV' 'ITEM CATG'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'WAVWR' 'COST'.
*        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'AUPOS' 'DOC ITEM'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'NETPR' 'NET PRICE'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'CHARG' 'BATCH NUMBER'.
        PERFORM PREP_FLDCAT USING 'IT_LIPS' 'HSDAT' 'MFG DATE '.
      PERFORM DATA_RETRIEVE_J1.
      PERFORM DISPLAY_GRID_J1.
   ENDCASE.
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVE_1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_RETRIEVE_1 .
  SELECT VBELN
        POSNR
        MATNR
        PSTYV
        MATKL
        WERKS
        POSAR
        WAERK
        MEINS
        AUFNR
        NETPR
   FROM VBAP
   INTO CORRESPONDING FIELDS OF TABLE IT_VBAP
   WHERE VBELN EQ WA_VBAK-VBELN.

    IF SY-SUBRC NE 0.
     MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-005.
   ENDIF.
ENDFORM.                    " DATA_RETRIEVE_1
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_GRID_1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID_1 .
 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM                = SY-REPID
    I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE_1'
    IS_LAYOUT                         = LAYOUT
    IT_FIELDCAT                       = IT_FLDCAT
   TABLES
     T_OUTTAB                          = IT_VBAP
  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_GRID_1

FORM TOP_OF_PAGE_1.

  REFRESH IT_LISTHEAD.
  WA_LISTHEAD-TYP = 'H'.
  WA_LISTHEAD-INFO = TEXT-006.

  APPEND WA_LISTHEAD TO IT_LISTHEAD.


  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY       = IT_LISTHEAD
          .
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVE_M
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_RETRIEVE_M .
  SELECT VBELN
         VBTYP
         VKORG
         VTWEG
         FKART
        FKTYP
    FROM VBRK
    INTO CORRESPONDING FIELDS OF TABLE IT_VBRK
    WHERE VBELN IN S_VBELN
    AND   VBTYP EQ P_VBTYP.

  IF SY-SUBRC NE 0.
     MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-003.
  ENDIF.
ENDFORM.                    " DATA_RETRIEVE_M

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_GRID_M
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID_M .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_PROGRAM                = SY-REPID
     I_CALLBACK_USER_COMMAND           = 'USER_INPUT'
     I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE'
     IS_LAYOUT                         = LAYOUT
     IT_FIELDCAT                       = IT_FLDCAT
     IT_EVENTS                         = IT_ALVEVNT
    TABLES
      T_OUTTAB                          = IT_VBRK
   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_GRID_M

*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVE_M1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_RETRIEVE_M1 .
  SELECT  VBELN
          POSNR
          VRKME
          FKIMG
          AUBEL
          AUPOS
          MATNR
          PMATN
          CHARG
          MATKL
    INTO CORRESPONDING FIELDS OF TABLE IT_VBRP
     FROM VBRP
      WHERE VBELN EQ WA_VBRK-VBELN .

    IF SY-SUBRC NE 0.
      MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-003.
    ENDIF.
ENDFORM.                    " DATA_RETRIEVE_M1
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_GRID_M1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID_M1 .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING

     I_CALLBACK_PROGRAM                = SY-REPID
     I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE_1'
     IS_LAYOUT                         = LAYOUT
     IT_FIELDCAT                       = IT_FLDCAT
   TABLES
      T_OUTTAB                          = IT_VBRP
   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_GRID_M1


*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVE_J
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_RETRIEVE_J .
 SELECT VBELN
        VKORG
        ERDAT
        LFART
        LDDAT
        LFDAT
   FROM LIKP
   INTO CORRESPONDING FIELDS OF TABLE IT_LIKP
   WHERE VBELN IN S_VBELN
   AND   VBTYP EQ P_VBTYP.

  IF SY-SUBRC NE 0.
     MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-003.
   ENDIF.
ENDFORM.                    " DATA_RETRIEVE_J

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_GRID_J
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID_J TABLES IT_LIKP_1 LIKE IT_LIKP .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_PROGRAM                = SY-REPID
     I_CALLBACK_USER_COMMAND           = 'USER_INPUT'
     I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE'
     IS_LAYOUT                         = LAYOUT
     IT_FIELDCAT                       = IT_FLDCAT
     IT_EVENTS                         = IT_ALVEVNT
    TABLES
      T_OUTTAB                          = IT_LIKP_1
   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_GRID_J

*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVE_J1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_RETRIEVE_J1 .
  SELECT VBELN
         POSNR
         MATNR
         PSTYV
         WERKS
         WAVWR
         CHARG
         VRKME
         NETPR
         HSDAT
    FROM LIPS
    INTO CORRESPONDING FIELDS OF TABLE IT_LIPS
    WHERE VBELN EQ WA_LIKP-VBELN.

    IF SY-SUBRC NE 0.
      MESSAGE ID SY-MSGID TYPE 'E' NUMBER '002' WITH TEXT-003.
    ENDIF.
ENDFORM.                    " DATA_RETRIEVE_J1
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_GRID_J1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_GRID_J1 .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
     I_CALLBACK_PROGRAM                = SY-REPID
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
     I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE_1'
     IS_LAYOUT                         = LAYOUT
     IT_FIELDCAT                       = IT_FLDCAT
   TABLES
      T_OUTTAB                          = IT_LIPS
   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_GRID_J1





On Execution:-

 




Friday 14 June 2013

Steps for Creating SAPScript


1.       Go to  transaction SE71.
 
2.       Enter the use of your program in meaning text box. It is mainly useful for understanding what the program does.  Now SAVE your program clicking on Save button.

 
3.       Before proceeding further first ensure by going to Settings> Form Painter  under the SAPScript Tab both Form Painter and PC editor checkbox are unchecked. If not, uncheck them.
 

4.       Now goto Paragraph Formats Tab and create a paragraph. Give all the Font and alignment settings you want for your output here. If you wish to have more than one paragraph formats for your script create another one. Save the script.



Don’t forget to press Enter Key after you create your paragraph as the Enter Key works as  submit in SAP. Many people face issues due to this.
5.       Now goto Pages Tab.  Create a Page with any page name and give it some description. If your output is long and wont come in a single page and you wish to show the remaining part in another page (probably with different page settings) then you need to give the description of same in NEXT PAGE text box. By default, the same page would be used to display the output. Save the script.



6.       After creating Pages we need to create Windows. Please note that on a single Page there could be multiple windows. Goto Windows tab for creating Windows. By default you could see that a MAIN window is already been given by SAP.  For every page there could possibly be only one MAIN window.  Therefore, for further divisions of a page SAP provides us with 2 other window types other than MAIN window :-  Constant and Variable.
                -The width of the main window remains the same on each form page in which it appears. "Continuous" text is output in the main window (text which covers several pages).
             -Constant windows are the same size and have the same contents on all form pages in which they appear. They therefore only need to be edited once when output. The text editing process is quicker if a window is defined as constant.
           -Variable windows, on the other hand, can be various sizes and have different contents on different pages.
Now create one header window by entering details as shown below. Also assign default paragraph to Header window as well as Page Window.

MAIN Window Attributes:-


7.       As of now we have created Paragraphs, Page and windows.  Now we will assign the window to the page we have created. For that goto Page Windows tab. At the Tab goto Edit > Create Elements




Now, double click on HEADER window. At the Standard Attributes block give some values for windows width and height. We will change it later as per our suitability. Repeat the Same Procedure for MAIN window and Save the script.
Also, if you want you can use your MAIN window multiple times in a single page, while other windows VAR or CONST could only be used once.

8.       Now, goto Settings > Form Painter and then go on SAPScript tab. The Form Painter and PC Editor Checkbox which we unchecked at starting of program, check them now and click on OK.


9.       A  Form Painter window will appear where you could see the page we have created. On the page you could also see the windows we created. Now adjust the page windows as per your requirement.  After adjusting the windows just save the Script. And again Uncheck the Form Painter and PC editor checkboxes by going to System > Form Painter.



10.   Now, Suppose we have to display the Sales Details in our Script. For that first we would create Text Elements in our MAIN window. Now go to Page Windows point cursor on MAIN window. Then goto Edit > Text Elements. Write the code as shown


click on back button. Then click on Save.

11.    Similarly, do it for header window


click on back button. Then click on Save.


12.    Now click on Header button.  After that click on
In the window that appears,  fill in details about Default Para and First Page.


13.   Save your script. And goto Form to Activate it.

14.   Now we need to create a report to call our Script. For that goto SE38 transaction and create a report.

*&---------------------------------------------------------------------*
*& Report  ZTEST_PARTH
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_PARTH.

TABLES: VBAP, VBAK, KNA1.

 SELECT-OPTIONS: S_VBELN 
FOR VBAK-VBELN no-extension no intervals.

 DATA: P_KUNNR 
TYPE VBAK-KUNNR,
       P_VBELN 
TYPE VBAP-VBELN.

 TYPES: 
BEGIN OF IT_KNA1,
          NAME1 
TYPE KNA1-NAME1,
          NAME2 
TYPE KNA1-NAME2,
          ADRNR 
TYPE KNA1-ADRNR,
          TELF1 
TYPE KNA1-TELF1,
       
END OF IT_KNA1,

       
BEGIN OF IT_VBAP,
          VBELN 
TYPE VBAP-VBELN,
          POSNR 
TYPE VBAP-POSNR,
         MATNR 
TYPE VBAP-MATNR,
         PMATN 
TYPE VBAP-PMATN,
         VRKME 
TYPE VBAP-VRKME,
      
END OF IT_VBAP.

 DATA: GT_KNA1 
TYPE IT_KNA1, "OCCURS 0 with header line,
       GT_VBAP 
TYPE IT_VBAP. "OCCURS 0 with header line.

 
AT SELECTION-SCREEN.

   
SELECT KUNNR VBELN FROM VBAK INTO (P_KUNNR, P_VBELN) WHERE VBELN IN S_VBELN.
     ENDSELECT.

     
IF SY-SUBRC <> 0.
       
MESSAGE ID 'zparthmessage' TYPE 'E' NUMBER '002' WITH 'erooorrr'.
     ENDIF.

 START-OF-SELECTION.

  
SELECT NAME1 NAME2 ADRNR TELF1 FROM KNA1 INTO CORRESPONDING FIELDS OF  GT_KNA1
      
WHERE KUNNR = P_KUNNR.
    endselect.
     
IF SY-SUBRC <> 0.
       
MESSAGE ID 'zparthmessage' TYPE 'E' NUMBER '002' WITH 'erooorrr kna1'.
     ENDIF.
  
SELECT VBELN POSNR MATNR PMATN VRKME
    
INTO CORRESPONDING FIELDS OF GT_VBAP
     
FROM VBAP
      
WHERE VBELN = P_VBELN.
    endselect.
     
IF SY-SUBRC <> 0.
       
MESSAGE ID 'zparthmessage' TYPE 'E' NUMBER '002' WITH 'erooorrr vbap'.
     ENDIF.

     
CALL FUNCTION 'OPEN_FORM'
      
EXPORTING
        
FORM                              'ZTEST_DEMO12'
      
EXCEPTIONS
        
OTHERS                            1.

     
CALL FUNCTION 'START_FORM'
      
EXPORTING
*        ARCHIVE_INDEX          =
        
FORM                   'ZTEST_DEMO12'
*        LANGUAGE               = ' '
*        STARTPAGE              = ' '
        
PROGRAM                'ZTEST_PARTH'
*        MAIL_APPL_OBJECT       =
*      IMPORTING
*        LANGUAGE               =
      
EXCEPTIONS
*        FORM                   = 1
*        FORMAT                 = 2
*        UNENDED                = 3
*        UNOPENED               = 4
*        UNUSED                 = 5
*        SPOOL_ERROR            = 6
*        CODEPAGE               = 7
        
OTHERS                 8
               .
     
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
     ENDIF.

     
CALL FUNCTION 'WRITE_FORM'
      
EXPORTING
        
WINDOW 'HEADER'
        ELEMENT = 
'CUST_DETAILS'
      
EXCEPTIONS
        
OTHERS                            1.



     
CALL FUNCTION 'WRITE_FORM'
      
EXPORTING
        
WINDOW 'MAIN'
        ELEMENT = 
'E1'
      
EXCEPTIONS
        
OTHERS                            1.

     
CALL FUNCTION 'CLOSE_FORM'.



RUN the Report.


Output 
You have successfully created your first SAPScript. And you can run it through your Report.