Pushbutton Inside ALV Grid

How can I add a pushbutton inside ALV toolbar?

Hi,
This can be included into ALV by defining a GUI and setting that GUI using Set PF Status.
Check the below code for the same,
REPORT  ZSPRENH069 NO STANDARD PAGE HEADING.
TYPE-POOLS : SLIS.                            "Global Type for ALV      
   T Y P E S                                                         *
TYPES:
       BEGIN OF TY_VB_AKAP,
         VBELN      TYPE VBELN_VA,                       "Sales Document
         KUNNR      TYPE KUNAG,                          "Sold-to party
         POSNR      TYPE POSNR_VA,                       "Item Number
         MATNR      TYPE MATNR,                          "Material Number
         PMATN      TYPE PMATN,                          "Pricing Reference Material/Newly Created Material
         KWMENG     TYPE KWMENG,                         "Cumulative Order Qty. in Sales Units
         VRKME      TYPE VRKME,                          "Sales Unit
        NETPR      TYPE NETPR,                          "Net Price
         KZWI1      TYPE KZWI1,                          "Sub Total 1 from pricing procedure for condition
         VKAUS      TYPE ABRVW,                          "Usage Indicator
       END   OF TY_VB_AKAP,
       BEGIN OF TY_MARA,
         MATNR      TYPE MATNR,                          "Material Number
         ZZTECHSPEC TYPE ZTECHSPEC,                      "Technical Specification
       END   OF TY_MARA,
       BEGIN OF TY_MVKE,
         MATNR      TYPE MATNR,                          "Material Number
         VKORG      TYPE VKORG,                          "Sales Organization
         VTWEG      TYPE VTWEG,                          "Distribution Channel
         KONDM      TYPE KONDM,                          "Material Pricing Group
       END   OF TY_MVKE,
       BEGIN OF TY_VBKD,
         VBELN      TYPE VBELN_VA,                       "Sales Document
         POSNR      TYPE POSNR_VA,                       "Item Number
         BSTKD_E    TYPE BSTKD_E,                        "Used to capture New Material Number
       END   OF TY_VBKD,
       BEGIN OF TY_IHEADER,
         SELECT(1)  TYPE C,                              "Check Box
         VBELN      TYPE VBELN,                          "Sales Document
         KUNNR      TYPE KUNAG,                          "Sold-to Party
       END   OF TY_IHEADER,
       BEGIN OF TY_MESSAGE1,
        VKORG     TYPE VKORG,                            "Sales Organization
        VTWEG     TYPE VTWEG,                            "Distribution Channel
        KUNNR     TYPE KUNAG,                            "Customer number
        KONDM     TYPE KONDM,                            "Material pricing group
        ZCOUNT(2) TYPE N,                                "Zcount
        MSGTYP(1) TYPE C,                                "Message type
        TEXT(150) TYPE C,                                "Message text
       END OF TY_MESSAGE1,
       BEGIN OF TY_MESSAGE2,
        VKORG     TYPE VKORG,                            "Sales Organization
        VTWEG     TYPE VTWEG,                            "Distribution Channel
        KUNNR     TYPE KUNAG,                            "Customer number
        MATNR     TYPE MATNR,                            "Material Number
        MSGTYP(1) TYPE C,                                "Message type
        TEXT(150) TYPE C,                                "Message text
       END OF TY_MESSAGE2,
       BEGIN OF TY_IFINAL,
         VBELN      TYPE VBELN_VA,                       "Sales Document
         KWMENG     TYPE KWMENG,                         "Cumulative Order Qty. in Sales Units
         POSNR      TYPE POSNR_VA,                       "Item Number
         KUNNR      TYPE KUNAG,                          "Sold-to party
         MATNR      TYPE MATNR,                          "Material Number
         VRKME      TYPE VRKME,                          "Sales Unit
         KZWI1      TYPE KZWI1,                          "Sub Total 1 from pricing procedure for condition
         VKAUS      TYPE ABRVW,                          "Usage Indicator
         ZZTECHSPEC TYPE ZTECHSPEC,                      "Technical Specification
         PMATN      TYPE PMATN,                          "Pricing Reference Material/Newly Created Material
         KONDM      TYPE KONDM,                          "Material Pricing Group
       END   OF TY_IFINAL,
       BEGIN OF TY_ACC1,
         VBELN      TYPE VBELN_VA,                       "Sales Document
         KUNNR      TYPE KUNAG,                          "Sold-to party
         KONDM      TYPE KONDM,                          "Material Pricing Group
         ZCOUNT(2)  TYPE N,                              "ZCount indicator
         KSTBM      TYPE KSTBM,                          "Quantity
         VRKME      TYPE VRKME,                          "Sales Unit
         ZZTECHSPEC TYPE ZTECHSPEC,                      "Technical Specification
         KZWI1      TYPE KZWI1,                          "Sub Total 1 from pricing procedure for condition
         ERROR(1)   TYPE N,                              "Error Field
       END   OF TY_ACC1,
       BEGIN OF TY_ACC2,
         VBELN      TYPE VBELN_VA,                       "Sales Document
         KUNNR      TYPE KUNAG,                          "Sold-to party
         MATNR      TYPE MATNR,                          "Material Number
         KSTBM      TYPE KSTBM,                          "Cumulative Order Qty. in Sales Units
         ZZTECHSPEC TYPE ZTECHSPEC,                      "Technical Specification
         VRKME      TYPE VRKME,                          "Sales Unit
         KZWI1      TYPE KZWI1,                          "Sub Total 1 from pricing procedure for condition
         ERROR(1)   TYPE N,                              "Error field
       END   OF TY_ACC2.
   D A T A                                                           *
Internal Table Declarations
DATA: T_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV,           "Fieldcatalog IT
      T_EVENTS       TYPE SLIS_T_EVENT,                  "Event IT
      T_HEADER       TYPE SLIS_T_LISTHEADER,             "Header IT
      T_VB_AKAP      TYPE STANDARD TABLE OF TY_VB_AKAP,  "To hold records from VBAK & VBAP Table
      T_MARA         TYPE STANDARD TABLE OF TY_MARA,     "To hold records from MARA Table
      T_MVKE         TYPE STANDARD TABLE OF TY_MVKE,     "To hold records from MVKE Table
      T_VBKD         TYPE STANDARD TABLE OF TY_VBKD,     "To hold records from VBKD Table
      T_IHEADER      TYPE STANDARD TABLE OF TY_IHEADER,  "To hold records from VBAK Table
      T_IFINAL       TYPE STANDARD TABLE OF TY_IFINAL,   "To hold cumulative data for ALV
      T_BDCDATA      TYPE STANDARD TABLE OF BDCDATA,     "IT for bdcdata
      T_BDCMSGCOLL   TYPE STANDARD TABLE OF BDCMSGCOLL,  "IT for error messages
      T_MESSAGE1     TYPE STANDARD TABLE OF TY_MESSAGE1, "IT for conditions1 messages
      T_MESSAGE2     TYPE STANDARD TABLE OF TY_MESSAGE2, "IT for conditions2 messages
      T_ACC2         TYPE STANDARD TABLE OF TY_ACC2,     "IT for holding data for Second Access Sequence Processing
      T_ACC1         TYPE STANDARD TABLE OF TY_ACC1,     "IT for holding data for First Access Sequence Processing
      T_SELECT       TYPE STANDARD TABLE OF RSPARAMS,    "IT for holding data related to the selection screen
Work area Declarations
      W_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV,             "Fieldcatalog WA
      W_EVENT        TYPE SLIS_ALV_EVENT,                "Event WA
      W_HEADER       TYPE SLIS_LISTHEADER,               "Header WA
      W_LAYOUT       TYPE SLIS_LAYOUT_ALV,               "Layout WA
      W_KEYINFO      TYPE SLIS_KEYINFO_ALV,              "Key Information WA
      W_VB_AKAP      TYPE TY_VB_AKAP,                    "To hold records from T_VB_AKAP
      W_MARA         TYPE TY_MARA,                       "To hold records from T_MARA
      W_MVKE         TYPE TY_MVKE,                       "To hold records from T_MVKE
      W_VBKD         TYPE TY_VBKD,                       "To hold records from T_VBKD
      W_IHEADER      TYPE TY_IHEADER,                    "To hold records from T_IHEADER
      W_IFINAL       TYPE TY_IFINAL,                     "To hold records from T_IFINAL
      W_PARAMS       TYPE CTU_PARAMS,                    "CTU Params
      W_BDCDATA      TYPE BDCDATA,                       "Work Area for BDCDATA
      W_BDCMSGCOLL   TYPE BDCMSGCOLL,                    "Work Area to collect BDC Messages
      W_MESSAGE1     TYPE TY_MESSAGE1,                   "WA for price conditions1 messages
      W_MESSAGE2     TYPE TY_MESSAGE2,                   "WA for price conditions2 messages
      W_ACC2         TYPE TY_ACC2,                       "WA for holding records from T_ACC2
      W_ACC1         TYPE TY_ACC1,                       "WA for holding records from T_ACC1
Variable declarations
      G_AUDAT       TYPE AUDAT,                          "Document Date (Date Received/Sent)
      G_VBELN       TYPE VBELN_VA,                       "Sales Document
      G_KUNNR       TYPE KUNAG,                          "Sold-to party
      G_MATNR       TYPE MATNR,                          "Material Number
      G_REPID       TYPE SY-REPID,                       "Program Name
      G_MESSAGE(73) TYPE C,                              "To Capture Message
      G_FLAG1(1)    TYPE C,                              "Flag
      G_ANSWER(1)   TYPE C.                              "Optional Button
Constant declarations
CONSTANTS:
      C_A(1)         TYPE C VALUE 'A',                    "Constant Value A
      C_S(1)         TYPE C VALUE 'S',                    "Constant Value S
      C_U(1)         TYPE C VALUE 'U',                    "Constant Value U
      C_X(1)         TYPE C VALUE 'X',                    "Constant Value X
      C_E(1)         TYPE C VALUE 'E',                    "Constant Value E
      C_I(1)         TYPE C VALUE 'I',                    "Constant Value I
      C_R(1)         TYPE C VALUE 'R',                    "Constant Value R
      C_B(1)         TYPE C VALUE 'B',                    "Document Category is Quotation
      C_HTNAME(10)   TYPE C VALUE 'T_IHEADER',            "Internal table for Header Data
      C_ITNAME(10)   TYPE C VALUE 'T_IFINAL',             "Internal Table with processed data
      C_Q2(2)        TYPE C VALUE 'Q2',                   "Constant Order Reason Q2
      C_100(3)       TYPE C VALUE '100',                  "Popup screen
     C_046(3)       TYPE C VALUE '046',                    "Value 046
     C_047(3)       TYPE C VALUE '047',                    "Value 047
      C_25(2)        TYPE C VALUE '25',                   "Popup screen
      C_5(1)         TYPE C VALUE '5',                    "Popup screen
      C_1            TYPE I VALUE  1,                     "Value 1 for Error Denotion
      C_2            TYPE I VALUE  2,                     "Value 2 for Error Denotion
      C_3            TYPE I VALUE  3,                     "Value 3 for BDC Error Denotion
      C_1000(4)      TYPE N VALUE 1000,                     "Value 1000
      C_01(2)        TYPE N VALUE '01',                   "Value 01 for Zcount
      C_VK11(4)      TYPE C VALUE 'VK11',                 "Transaction VK11
      C_DYNBEGIN(1)  TYPE C VALUE 'X',                    "Indicator
      C_UPDATE(1)    TYPE C VALUE 'S',                    "Update
      C_DISMODE(1)   TYPE C VALUE 'N',                    "Display
      C_ZBPR(4)      TYPE C VALUE 'ZBPR',                 "Condition Type ZBPR
      C_ERROR(5)     TYPE C VALUE 'ERROR'.                "Error screen title
   S E L E C T   O P T I O N S  &  P A R A M E T E R S               *
Selection-screen Block 1
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS:     P_VKORG TYPE VKORG OBLIGATORY,           "Sales Organization
                P_VTWEG TYPE VTWEG OBLIGATORY,           "Distribution Channel
                P_SPART TYPE SPART DEFAULT '00'.         "Division
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS: S_AUDAT FOR G_AUDAT,                     "Document Date (Date Received/Sent)
                S_VBELN FOR G_VBELN,                     "Sales Document
                S_KUNNR FOR G_KUNNR,                     "Sold-to party
                S_MATNR FOR G_MATNR.                     "Material Number
PARAMETERS:     P_VKAUS(2) TYPE N.                       "Usage Indicator
SELECTION-SCREEN END OF BLOCK BLK2.
  I N I T I A L I Z A T I O N                                        *
INITIALIZATION.
  CLEAR : G_REPID.                                       "Program Name
  G_REPID = SY-REPID.                                    "Program Name
  A T   S E L E C T I O N   S C R E E N                              *
AT SELECTION-SCREEN.
  S T A R T   O F   S E L E C T I O N                                *
START-OF-SELECTION.
Data Selection
  PERFORM DATA_RETRIEVAL.
Build Field Catalog
  PERFORM BUILD_FIELDCATALOG.
Bulid layout
  PERFORM BUILD_LAYOUT.
Build Events
  PERFORM BUILD_EVENTS.
Captures the Values of Selection Screen
  PERFORM CAPTURE_SCREEN.
  E N D   O F   S E L E C T I O N                                    *
END-OF-SELECTION.
Display List
  PERFORM DISPLAY_ALV_REPORT.
  F O R M S                                                          *
*&      Form  DATA_RETRIEVAL
      Retrieves Data for ALV Display
FORM DATA_RETRIEVAL .
  DATA : L_VKAUS   TYPE VKAUS.            "Variable to hold Usage Indicator
  CLEAR L_VKAUS.
  SELECT VBELN
         KUNNR
    INTO CORRESPONDING FIELDS OF TABLE T_IHEADER
    FROM VBAK
    WHERE VBELN IN S_VBELN
      AND KUNNR IN S_KUNNR
      AND VKORG EQ P_VKORG
      AND AUDAT IN S_AUDAT
      AND VTWEG EQ P_VTWEG
      AND SPART EQ P_SPART
      AND AUGRU EQ C_Q2
      AND VBTYP EQ C_B.
  IF NOT T_IHEADER IS INITIAL.
    IF NOT P_VKAUS IS INITIAL OR P_VKAUS NE C_1.
      CONCATENATE 'C' P_VKAUS INTO L_VKAUS.
      SELECT A~VBELN
             A~KUNNR
             B~POSNR
             B~MATNR
             B~PMATN
             B~KWMENG
             B~VRKME
            B~NETPR
             B~KZWI1
             B~VKAUS
       INTO  TABLE T_VB_AKAP
       FROM  VBAK AS A
       JOIN  VBAP AS B
         ON  A~VBELN EQ B~VBELN
       FOR ALL ENTRIES IN T_IHEADER
        WHERE A~VBELN EQ T_IHEADER-VBELN
          AND B~MATNR IN S_MATNR
          AND B~VKAUS EQ L_VKAUS.
    ELSE.
      SELECT A~VBELN
             A~KUNNR
             B~POSNR
             B~MATNR
             B~PMATN
             B~KWMENG
             B~VRKME
            B~NETPR
             B~KZWI1
             B~VKAUS
       INTO  TABLE T_VB_AKAP
       FROM  VBAK AS A
       JOIN  VBAP AS B
         ON  A~VBELN EQ B~VBELN
       FOR ALL ENTRIES IN T_IHEADER
       WHERE A~VBELN EQ T_IHEADER-VBELN
         AND B~MATNR IN S_MATNR.
    ENDIF.
    IF NOT T_VB_AKAP IS INITIAL.
      SELECT  VBELN
              POSNR
              BSTKD_E
         INTO TABLE T_VBKD
         FROM VBKD
         FOR ALL ENTRIES IN T_VB_AKAP
         WHERE VBELN EQ T_VB_AKAP-VBELN
           AND POSNR EQ T_VB_AKAP-POSNR.
    ENDIF.
    SORT T_VBKD BY VBELN POSNR.
    CLEAR W_VB_AKAP.
  After much of coding was completed, Usage of PMATN was dropped and
  the first eighteen characters of the field BSTKD was proposed for usage
  Hence PMATN is overwritten by BSTKD value in the below loop
    LOOP AT T_VB_AKAP INTO W_VB_AKAP.
      CLEAR: W_VBKD,
             W_VB_AKAP-PMATN.
      READ TABLE T_VBKD INTO W_VBKD
                        WITH KEY VBELN = W_VB_AKAP-VBELN
                                 POSNR = W_VB_AKAP-POSNR
                        BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        W_VB_AKAP-PMATN = W_VBKD-BSTKD_E+0(18).
      ENDIF.
      MODIFY T_VB_AKAP FROM W_VB_AKAP TRANSPORTING PMATN.
      CLEAR W_VB_AKAP.
    ENDLOOP.
    IF NOT T_VB_AKAP IS INITIAL.
      SELECT    MATNR
                ZZTECHSPEC
        INTO    TABLE T_MARA
        FROM    MARA
        FOR ALL ENTRIES IN T_VB_AKAP
        WHERE   MATNR EQ T_VB_AKAP-MATNR.
      IF SY-SUBRC EQ 0.
        SORT T_MARA BY MATNR.
      ENDIF.                     "Checking SY-SUBRC for T_MARA
      SELECT    MATNR
                ZZTECHSPEC
        APPENDING TABLE T_MARA
        FROM    MARA
        FOR ALL ENTRIES IN T_VB_AKAP
        WHERE   MATNR EQ T_VB_AKAP-PMATN.
      IF SY-SUBRC EQ 0.
        SORT T_MARA BY MATNR.
      ENDIF.                     "Checking SY-SUBRC for T_MARA
      SELECT    MATNR
                VKORG
                VTWEG
                KONDM
        INTO    TABLE T_MVKE
        FROM    MVKE
        FOR ALL ENTRIES IN T_VB_AKAP
        WHERE   MATNR EQ T_VB_AKAP-PMATN.
      IF SY-SUBRC EQ 0.
        SORT T_MVKE BY MATNR VKORG VTWEG.
      ENDIF.                     "Checking SY-SUBRC for T_MVKE
      SELECT    MATNR
                VKORG
                VTWEG
                KONDM
        APPENDING TABLE T_MVKE
        FROM    MVKE
        FOR ALL ENTRIES IN T_VB_AKAP
        WHERE   MATNR EQ T_VB_AKAP-MATNR.
      IF SY-SUBRC EQ 0.
        SORT T_MVKE BY MATNR VKORG VTWEG.
      ENDIF.                     "Checking SY-SUBRC for T_MVKE
    ENDIF.                    " FOR T_VB_AKAP NOT INITIAL.
  ENDIF.                    " FOR T_IHEADER NOT INITIAL.
  CLEAR: W_VB_AKAP,
         W_IFINAL.
  LOOP AT T_VB_AKAP INTO W_VB_AKAP.
    W_IFINAL-VBELN  = W_VB_AKAP-VBELN.
    W_IFINAL-KUNNR  = W_VB_AKAP-KUNNR.
    W_IFINAL-POSNR  = W_VB_AKAP-POSNR.
    W_IFINAL-MATNR  = W_VB_AKAP-MATNR.
    W_IFINAL-PMATN  = W_VB_AKAP-PMATN.
    W_IFINAL-KWMENG = W_VB_AKAP-KWMENG.
    W_IFINAL-VRKME  = W_VB_AKAP-VRKME.
   W_IFINAL-NETPR  = W_VB_AKAP-NETPR.
    W_IFINAL-KZWI1  = ( W_VB_AKAP-KZWI1 / W_VB_AKAP-KWMENG ) * 1000.
    W_IFINAL-VKAUS  = W_VB_AKAP-VKAUS.
  Populating Material Pricing Group from New Material Group, if such Group doesn't exist
  Population of Material Pricing Group from Material Number is tried.
  Similar condition does suit for Tech Spec too.
    SORT: T_MVKE BY MATNR VKORG VTWEG,
          T_MARA BY MATNR.
    IF NOT W_VB_AKAP-PMATN IS INITIAL.
      CLEAR W_MVKE.
      READ TABLE    T_MVKE
           INTO     W_MVKE
           WITH KEY MATNR = W_VB_AKAP-PMATN
                    VKORG = P_VKORG
                    VTWEG = P_VTWEG
           BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        W_IFINAL-KONDM = W_MVKE-KONDM.
      ENDIF.
      READ TABLE     T_MARA
           INTO      W_MARA
           WITH KEY  MATNR = W_VB_AKAP-PMATN
           BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        W_IFINAL-ZZTECHSPEC = W_MARA-ZZTECHSPEC.
      ENDIF.                              " SY-SUBRC FOR READ TABLE T_MARA
   IF W_MVKE-KONDM IS INITIAL.
    ELSE.
     SORT T_MVKE BY MATNR VKORG VTWEG.
      CLEAR W_MVKE.
      READ TABLE     T_MVKE
           INTO      W_MVKE
           WITH KEY  MATNR = W_VB_AKAP-MATNR
                     VKORG = P_VKORG
                     VTWEG = P_VTWEG
           BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        W_IFINAL-KONDM = W_MVKE-KONDM.
      ENDIF.
      READ TABLE     T_MARA
           INTO      W_MARA
           WITH KEY  MATNR = W_VB_AKAP-MATNR
           BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        W_IFINAL-ZZTECHSPEC = W_MARA-ZZTECHSPEC.
      ENDIF.                              " SY-SUBRC FOR READ TABLE T_MARA
   ELSE.
     W_IFINAL-KONDM  =  W_MVKE-KONDM.
    ENDIF.                              " IS INITIAL CHECK FOR W_MVKE-KONDM
    APPEND W_IFINAL TO T_IFINAL.
    CLEAR: W_VB_AKAP,
           W_IFINAL.
  ENDLOOP.
  SORT T_IFINAL BY VBELN.
Checking whether if there are any header quotations which does not have items against them in item internal table
if such records exist then, ensuring that such records gets deleted from header too, so that inconsitency is removed.
  CLEAR W_IHEADER.
  LOOP AT T_IHEADER INTO W_IHEADER.
    CLEAR W_IFINAL.
    READ TABLE T_IFINAL INTO W_IFINAL WITH KEY VBELN = W_IHEADER-VBELN.
    IF SY-SUBRC NE 0.
      W_IHEADER-SELECT = C_X.
      MODIFY T_IHEADER FROM W_IHEADER TRANSPORTING SELECT.
    ENDIF.
  ENDLOOP.
  DELETE T_IHEADER WHERE SELECT = C_X.
  SORT T_IFINAL BY VBELN.
ENDFORM.                    " DATA_RETRIEVAL
*&      Form  build_layout
      To build ALV Layout
FORM BUILD_LAYOUT.
  CLEAR  : W_LAYOUT.
  W_LAYOUT-COLWIDTH_OPTIMIZE = C_X.
  W_LAYOUT-BOX_TABNAME       = C_HTNAME.      "tabname for checkbox
  W_LAYOUT-BOX_FIELDNAME     = 'SELECT'.      "fieldname for checkbox
  CLEAR  : W_KEYINFO.
  W_KEYINFO-HEADER01 = 'VBELN'.               "Header1 key information
  W_KEYINFO-ITEM01   = 'VBELN'.               "Item1 key information
ENDFORM.                                      "build_layout
*&      Form  build_events
      To build ALV Events
FORM BUILD_EVENTS.
  CONSTANTS: C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE     = 1
    IMPORTING
      ET_EVENTS       = T_EVENTS
    EXCEPTIONS
      LIST_TYPE_WRONG = 1
      OTHERS          = 2.
  IF SY-SUBRC = 0.
    READ TABLE T_EVENTS INTO W_EVENT
                        WITH KEY NAME = C_TOP_OF_PAGE.
    IF SY-SUBRC = 0.
      MOVE C_TOP_OF_PAGE TO W_EVENT-FORM.
      MODIFY T_EVENTS INDEX SY-TABIX
                      FROM  W_EVENT
                      TRANSPORTING FORM.
    ENDIF.
  ELSE.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                                      "build_events
*&      Form  top_of_page
      To display top of page in ALV Report
FORM TOP_OF_PAGE.                                           "#EC CALLED
  DATA :
    L_VKORG(35) TYPE C,                        "Sales Organization
    L_VTWEG(35) TYPE C,                        "Distribution Channel
    L_SPART(35) TYPE C.                        "Division
Title
CLEAR W_HEADER.
W_HEADER-TYP  = C_H.
W_HEADER-INFO = TEXT-003.
APPEND W_HEADER TO T_HEADER.
Sales Organization
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_S.
  CONCATENATE TEXT-004 P_VKORG INTO L_VKORG.
  W_HEADER-INFO = L_VKORG.
  APPEND W_HEADER TO T_HEADER.
Distribution Channel
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_S.
  CONCATENATE TEXT-005 P_VTWEG INTO L_VTWEG.
  W_HEADER-INFO = L_VTWEG.
  APPEND W_HEADER TO T_HEADER.
Division
  CLEAR W_HEADER.
  W_HEADER-TYP  = C_S.
  CONCATENATE TEXT-006 P_SPART INTO L_SPART.
  W_HEADER-INFO = L_SPART.
  APPEND W_HEADER TO T_HEADER.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = T_HEADER.
ENDFORM.                                      "top_of_page
*&      Form  pf_status
      To set PF-Status (user interface)
     -->EXTAB     The excluding table (function codes)
FORM PF_STATUS                                              "#EC CALLED
          USING T_EXTAB TYPE SLIS_T_EXTAB.                  "#EC NEEDED
  SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.
ENDFORM.                                      "pf_status
*&      Form  display_alv_report
      To display ALV report
FORM DISPLAY_ALV_REPORT.
  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
  I_INTERFACE_CHECK              = ' '
     I_CALLBACK_PROGRAM             = G_REPID
     I_CALLBACK_PF_STATUS_SET       = 'PF_STATUS'
     I_CALLBACK_USER_COMMAND        = 'USER_COMMAND'
     IS_LAYOUT                      = W_LAYOUT
     IT_FIELDCAT                    = T_FIELDCATALOG
  IT_EXCLUDING                   =
  IT_SPECIAL_GROUPS              =
  IT_SORT                        =
  IT_FILTER                      =
  IS_SEL_HIDE                    =
  I_SCREEN_START_COLUMN          = 0
  I_SCREEN_START_LINE            = 0
  I_SCREEN_END_COLUMN            = 0
  I_SCREEN_END_LINE              = 0
     I_DEFAULT                      = C_X
     I_SAVE                         = C_A
  IS_VARIANT                     =
     IT_EVENTS                      = T_EVENTS[]
  IT_EVENT_EXIT                  =
     I_TABNAME_HEADER               = 'T_IHEADER'
     I_TABNAME_ITEM                 = 'T_IFINAL'
  I_STRUCTURE_NAME_HEADER        =
  I_STRUCTURE_NAME_ITEM          =
      IS_KEYINFO                     = W_KEYINFO
  IS_PRINT                       =
  IS_REPREP_ID                   =
  I_BYPASSING_BUFFER             =
  I_BUFFER_ACTIVE                =
  IR_SALV_HIERSEQ_ADAPTER        =
  IT_EXCEPT_QINFO                =
  I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
IMPORTING
  E_EXIT_CAUSED_BY_CALLER        =
  ES_EXIT_CAUSED_BY_USER         =
    TABLES
      T_OUTTAB_HEADER                = T_IHEADER
      T_OUTTAB_ITEM                  = T_IFINAL
   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  BUILD_FIELDCATALOG
      To build ALV Field Catalog
FORM BUILD_FIELDCATALOG .
  DATA: L_COUNT TYPE I VALUE 0.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'SELECT'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C01.
  W_FIELDCATALOG-CHECKBOX    =  C_X.
  W_FIELDCATALOG-EDIT        =  C_X.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'VBELN'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C02.
  W_FIELDCATALOG-KEY         =  C_X.   "Fixes the column for no-scroll
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_HTNAME.
  W_FIELDCATALOG-FIELDNAME   = 'KUNNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C04.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR L_COUNT.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'POSNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C03.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'KWMENG'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C06.
  W_FIELDCATALOG-EMPHASIZE   =  'C400'.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'VRKME'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C07.
  W_FIELDCATALOG-JUST        =  C_R.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
W_FIELDCATALOG-FIELDNAME   = 'NETPR'.
  W_FIELDCATALOG-FIELDNAME   = 'KZWI1'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C08.
  W_FIELDCATALOG-EMPHASIZE   =  'C400'.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'VKAUS'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C12.
  W_FIELDCATALOG-JUST        =  C_R.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'ZZTECHSPEC'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C09.
  W_FIELDCATALOG-EMPHASIZE   =  'C400'.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'MATNR'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C05.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'PMATN'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C10.
  W_FIELDCATALOG-EMPHASIZE   =  'C400'.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
  CLEAR  W_FIELDCATALOG.
  L_COUNT = L_COUNT + 1.
  W_FIELDCATALOG-COL_POS     =  L_COUNT.
  W_FIELDCATALOG-TABNAME     =  C_ITNAME.
  W_FIELDCATALOG-FIELDNAME   = 'KONDM'.
  W_FIELDCATALOG-SELTEXT_M   =  TEXT-C11.
  APPEND W_FIELDCATALOG TO T_FIELDCATALOG.
ENDFORM.                    " BUILD_FIELDCATALOG
*&      Form  user_command
      EXIT routine for command handling
     -->L_UCOMM      Function code that PAI triggered
     -->W_SELFIELD   Information cursor position ALV
FORM USER_COMMAND USING L_UCOMM    LIKE SY-UCOMM            "#EC CALLED
                        W_SELFIELD TYPE SLIS_SELFIELD.      "#EC NEEDED
Check function code
  CASE L_UCOMM.
    WHEN 'CREATE'.
      SORT T_IHEADER BY SELECT.
      READ TABLE T_IHEADER INTO W_IHEADER
                          WITH KEY SELECT = C_X
                          BINARY SEARCH.
      IF SY-SUBRC <> 0.
        MESSAGE I000(ZS) WITH TEXT-M01.
      ELSE.
        CLEAR : G_ANSWER.
Dialog box for save prompts
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            TEXT_QUESTION         = TEXT-OP1
            DISPLAY_CANCEL_BUTTON = ''
          IMPORTING
            ANSWER                = G_ANSWER
          EXCEPTIONS
            TEXT_NOT_FOUND        = 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.
        ELSE.
          IF G_ANSWER = 1.
            SET PF-STATUS 'ZSTANDARD_SCREEN'.
            PERFORM DATA_IDENTITY_4_ACCESS_SEQ.
            PERFORM CREATE_CONDITIONS.
            PERFORM DISPLAY_RESULT.
          ENDIF.
        ENDIF.
      ENDIF.
    WHEN '&REFRESH'.
      SUBMIT ZSPRENH069 USING SELECTION-SCREEN 1000
                        WITH SELECTION-TABLE T_SELECT.
    WHEN 'BACKTO'.
      SUBMIT ZSPRENH069 USING SELECTION-SCREEN 1000
                        WITH SELECTION-TABLE T_SELECT.
  ENDCASE.
ENDFORM.                                      "user_command
*&      Form  DATA_IDENTITY_4_ACCESS_SEQ
Seperates the Available Data for processing for both Access Sequences
FORM DATA_IDENTITY_4_ACCESS_SEQ .
  CLEAR : W_IFINAL,
          W_ACC1,
          W_ACC2.
  SORT T_MVKE BY MATNR VKORG VTWEG.
  LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT = C_X.
    LOOP AT T_IFINAL INTO W

Similar Messages

  • Adding pushbutton  in alv grid list

    hai friends,
                     i have developed an alv grid list and i place a pushbutton called 'GETEXCEL'.when i click on 'GETEXCEL' it should generate an excel sheet and it should get placed in application server.
    for the reference plz check my code also.
    the issue is when i debug, the transfer statement is getting executed then it is going to the standard program(moduel pool) and then it is not going to application server.of course excel sheet is also getting generated.can anybody find the solution for this.
    *&      Form  events_get
          text
    -->  p1        text
    <--  p2        text
    FORM events_get .
    *DATA t_event TYPE slis_t_event.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
       I_LIST_TYPE           = 0
    IMPORTING
       ET_EVENTS             = tab_events
    EXCEPTIONS
       LIST_TYPE_WRONG       = 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.
      READ TABLE tab_events INTO wa_events WITH KEY name = 'USER_COMMAND'.
      wa_events-form = 'USER_COMMAND'.
      MODIFY tab_events FROM wa_events TRANSPORTING form WHERE name =
      wa_events-name.
      READ TABLE tab_events INTO wa_events WITH KEY name = 'PF_STATUS_SET'.
      wa_events-form = 'PF_STATUS_SET'.
      MODIFY tab_events FROM wa_events TRANSPORTING form WHERE name =
      wa_events-name.
    ENDFORM.                    " events_get
    **& Form pf_status_set
    FORM pf_status_set USING rt_extab TYPE slis_t_extab.
      SET PF-STATUS 'STATUS'.
    ENDFORM.                           " pf_status_set
    **& Form user_command
    FORM user_command
    USING u_comm TYPE sy-ucomm
    r_selfield TYPE slis_selfield.
    CASE u_comm.
        WHEN 'GETEXCEL'.
          PERFORM f400_column_headings.
          PERFORM f500_generate_excel_file.
          PERFORM f600_transfer_excel_file.
      ENDCASE.
    ENDFORM.                    "user_command
    then i am passing the parameters in grid fm also for user command and set pf status.

    Hi Mahesh,
    1. No need to populate the EVENTS table in your case, just pass the Subroutine names for PF status and USER_COMMAND to GRId Display
      I_CALLBACK_PFSTATUS  = 'PF_STATUS_SET'.
    I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
    2. make sure you pass SY-REPID/SY-CPROG  to REUSE_ALV_GRID_DISPLAY  FM

  • Pushbutton on ALV grid.

    hi to all,
    I have created a push button on ALV grid. The ALV is not created in OO.
    Can anybody tell me how to select a row or multiple row and relate it to fuction attached to that push button. I have followed all links in forum but that all are for ALV created in OO.
    The row should be selected on basis of grid available on left hand of grid or I have also putted checkbox in grid.
    plz do the needful.
    thanks
    regards,
    sachin d.

    Hi,
    if you want multiple selection all lines. then
    case r_ucomm.
    when 'BUTTONCODE'.
    loop at itab.
    itab-check = 'X'. "Check is checkbox field
    modify itab index sy-tabix.
    endloop.
    selfield-refresh = 'X'.
    endcase.
    Regards
    vijay

  • Disabling push button column cell on alv grid control (OOABAP)

    Hello All,
    I have a requirement where I need to add one column as pushbutton in alv grid display. I have done that and it's triggering button_click event also. The problem here is that I want the few <b>push button cells</b> of that column to be disbaled (depending on my requirement). I tried using a internal table lvc_t_styl and adding a field of same lvc_t_styl in my main internal table. This works for all other fields (e.g disbaling checkbox in alv grid and other editable fields) but not for push buttons. My exact requirement is that I want some of the <b>cells of pushbutton column to be grayed out (made inactive)</b>. Can anyone tell me how to do that. Thanks.
    Note:Helpful answers will be duly rewarded.
    null

    Hi,
    I had the same problem.
    what I did I just added the  cl_gui_alv_grid=>mc_style_button at each row of the data table instead of adding it at the field catalog level.
    Hope this solve your problem.
    Thanks,
    Harish

  • How to create a secondary list of alv grid inside the function module

    Hi All,
    My requirement is to create a RFC function module to display the alv grid of one table.
    i have created that.
    while clicking on the records of the alv it should open the secondary list of another table.
    My problem is it is not fetching the records of the internal table of the primary list since it is created inside the function module(FUNCTION...ENDFUNCTION).
    pls help me on this.
    Thanks in Advance.

    hi,
    READ TABLE sel_sheet INTO wa_sheet INDEX rs_selfield-tabindex.
    here sel_sheet is the internal table for the primary list..
    i called the function module "reuse_lav_grid_display" inside Function...Endfunction.
    so when i am using  READ TABLE sel_sheet INTO wa_sheet INDEX rs_selfield-tabindex.
    inside the user command perform therecords in this internal table is not populating..
    pls help me on this.
    thanks in advance.

  • ALV REPORT: read selected checkbox in alv grid and process the pushbutton

    my requirement is to check some rows from alv grid and the press the pushbutton. Thereby following things should process:
    select all checked rows into an itab and call the transaction code CJ01 for all
    entries......
    I am finding the problem that when I select the checkbox....the internal table doesnt recognize the boxes as checked ones......
    thanks in advance...
    Kartikey Singh,

    Data: ref1 type ref to cl_gui_alv_grid.
          CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
            IMPORTING
              E_GRID = ref1.
          call method ref1->check_changed_data.
          loop at t_output where Flag = 'X'.
            if t_output-VKUEGRU is initial.
              message e000 with text-110.
            endif.
    endloop.

  • How can I get the selected rows from two ALV grids at the same time?

    I have a program that uses two ALV grids in one dialog screen. I'm using the OO ALV model (SALV* classes).
    The user can select any number of rows from each grid. Then, when a toolbar pushbutton is pressed, I'd have to retrieve the selected rows from both grids and start some processing with these rows.
    It is no problem to assign event handlers to both grids, and use the CL_SALV_TABLE->GET_SELECTIONS and CL_SALV_SELECTIONS->GET_SELECTED_ROWS methods to find out which rows were marked by the user. Trouble is, this only works when I raise an event in each grid separately, for instance via an own function that I added to the grid's toolbar. So, I can only see the selected rows of the same grid where such an event was raised.
    If I try to do this in the PBO of the dialog screen (that contains the two grids), the result of CL_SALV_SELECTIONS->GET_SELECTED_ROWS will be empty, as the program does not recognize the marked entries in the grids. Also, an event for grid1 does not see the selected rows from grid2 either.
    As it is right now, I can have an own button in both grid's toolbar, select the rows, click on the extra button in each grid (this will tell me what entries were selected per grid). Then, I'd have to click on a third button (the one in the dialog screen's toolbar), and process the selected rows from both grids.
    How can I select the rows, then click on just one button, and process the marked entries from both grids?
    Is it somehow possible to raise an event belonging to each grid programmatically, so that then the corresponding CL_SALV_SELECTIONS->GET_SELECTED_ROWS will work?
    Thanks.

    Hello Tamas ,
    If I try to do this in the PBO of the dialog screen (that contains the two grids), the result of CL_SALV_SELECTIONS->GET_SELECTED_ROWS will be empty, as the program does not recognize the marked entries in the grids. Also, an event for grid1 does not see the selected rows from grid2 either.--->
    is it possible to  have a check box in each grid  & get the selected lines in PAI of the screen ?
    regards
    prabhu

  • Functionality of Checkbox in ALV Grid Report

    Hi Experts,
    I created a ALV grid report with the checkbox as my first coloum and other fields as shown below. Initially, my ALV report displays as below. It is working fine till here.
    checkbox       customer     material      quantity       UOM         Sales Order    Delivery
                           C1                  M1           1                  KG
                           C1                   M2           2                  KG
                            C2                   M1          1                   KG
                            C2                  M2           2                   KG
                           C3                   M1          1                   KG
                           C3                   M2          2                   KG
                           C3                   M3           3                 KG
                            C4                  M1           1                  KG
                           C5                   M5           1                  KG
    I have created a push button on application toolbar for creating sales order and delivery using bapi's. When I click on my pushbutton, as of now it creates the SO and delivery for the first customer C1 and updates my Internal table with the sales order number and delivery number. If I need to create sales order for the second customer I need to run my ALV report again and so on for 3rd, 4th and 5th customers. It is also working fine till here.
    checkbox       customer     material      quantity       UOM     Sales Order     Delivery
                           C1                  M1           1                  KG          SO1               DEL1
                           C1                   M2           2                  KG         SO1               DEL1
                            C2                   M1          1                   KG
                            C2                  M2           2                   KG
                           C3                   M1          1                   KG
                           C3                   M2          2                   KG
                           C3                   M3           3                 KG
                            C4                  M1           1                  KG
                           C5                   M5           1                  KG
    Need help on this:
    When I select the check boxes as shown below and when I click the push button to create SO and Delivery then my program should create sales order and delivery for all the checked ones as shown below. What is the condition do I need to put here for selecting the checkbox.
    checkbox       customer     material      quantity       UOM     Sales Order     Delivery
    X                      C1                  M1           1                  KG         SO1               DEL1
    X                     C1                   M2           2                  KG         SO1               DEL1
                            C2                   M1          1                   KG
                            C2                  M2           2                   KG
    X                     C3                   M1          1                   KG        SO3             DEL3
    X                     C3                   M2          2                   KG        SO3             DEL3
    X                     C3                   M3           3                 KG          SO3            DEL3
                            C4                  M1           1                  KG
    X                     C5                   M5           1                  KG          SO5            DEL5
    I would really appreciate if somebody could help me / guide me on this. I will also post my code if someone needs to understand what I am doing exactly.
    Thanks.

    You need to use OO ABAP
    Use Class the class  1)  CL_GUI_ALV_GRID, 2) CL_GUI_CUSTOM_CONTAINER
    Create Sceen and container on same screen.
    Check following COde it used for printing purpose.
    Using AFTER_USER_COMMAND  Event you will find Check box selected entries.
    Capture those in another internal Table and use it for SO Creation
    DATA:  O_GRID TYPE REF TO CL_GUI_ALV_GRID,
           O_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
           T_FCAT TYPE LVC_T_FCAT,
           CONTAINER(15) TYPE C VALUE 'ET_CONTAINER'.
          CLASS EVENT_CLASS DEFINITION
    CLASS EVENT_CLASS DEFINITION.
      PUBLIC SECTION.
        METHODS: BEFORE_COMMAND FOR EVENT AFTER_USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM,
                 DOUBLE_CLICK_N  FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN,
                 TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT.
    ENDCLASS.                    "EVENT_CLASS DEFINITION
          CLASS EVENT_CLASS IMPLEMENTATION
    CLASS EVENT_CLASS IMPLEMENTATION.
      METHOD BEFORE_COMMAND.
        IF E_UCOMM = 'PRINT'.
          CLEAR : W_FLAG.
          T_FINAL2 = T_FINAL.
          SORT T_FINAL2 BY COL_CHK .
          DELETE   T_FINAL2 WHERE COL_CHK = ' '.
          IF NOT T_FINAL2 IS INITIAL.
            LOOP AT T_FINAL2 INTO WA_FINAL.
              IF W_FLAG IS INITIAL.
      Does some of modification/s in control parameters
                W_CONTROL_PARAM-NO_OPEN   = 'X'.
                W_CONTROL_PARAM-NO_CLOSE  = 'X'.
                W_CONTROL_PARAM-PREVIEW   = 'X'.
                W_CONTROL_PARAM-NO_DIALOG = SPACE.
                W_OUTPUT_OPTIONS-TDNEWID = 'X'.
                W_OUTPUT_OPTIONS-TDIMMED = SPACE.
      Opens the smartform print-job
                CALL FUNCTION 'SSF_OPEN'
                  EXPORTING
                    OUTPUT_OPTIONS     = W_OUTPUT_OPTIONS
                    CONTROL_PARAMETERS = W_CONTROL_PARAM
                  EXCEPTIONS
                    FORMATTING_ERROR   = 1
                    INTERNAL_ERROR     = 2
                    SEND_ERROR         = 3
                    USER_CANCELED      = 4
                    OTHERS             = 5.
                IF SY-SUBRC EQ 0.
                  W_FLAG = 'X'.
                ELSE.
                 LEAVE LIST-PROCESSING.
                ENDIF.
              ENDIF.
              IF W_FLAG = 'X'.
                CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
                  EXPORTING
                    FORMNAME           = 'ZFORM_BIW_PRINT'
                  IMPORTING
                    FM_NAME            = LF_FM_NAME
                  EXCEPTIONS
                    NO_FORM            = 1
                    NO_FUNCTION_MODULE = 2
                    OTHERS             = 3.
                IF SY-SUBRC <> 0.
                ENDIF.
                IF SY-SUBRC = 0.
                  CALL FUNCTION LF_FM_NAME
                    EXPORTING
                      CONTROL_PARAMETERS = W_CONTROL_PARAM
                     V_VBELN            = WA_FINAL-VBELN
                      WA_FINAL           = WA_FINAL.
                   TABLES
                     T_FINAL            = T_FINAL.
                ELSE.
                  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                ENDIF.
              ENDIF.
            ENDLOOP.
           * Close the smartform print job
            IF W_FLAG EQ 'X'.
              CALL FUNCTION 'SSF_CLOSE'
                EXCEPTIONS
                  FORMATTING_ERROR = 1
                  INTERNAL_ERROR   = 2
                  SEND_ERROR       = 3
                  OTHERS           = 4.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDMETHOD.                    "BEFORE_COMMAND

  • Input Field in ALV Grid

    Hi All,
    I have a requirement to display one field in the ALV grid as input field,so that  the user can enter value in that field when the ALV is displayed.I need to use this entered user value later in th eprg for further processing.
    My worry is that i do not see any parameter such as "INPUT " or "EDIT " in the field catalog structure lvc_s_fcat for the ALV.
    How can i acheive having editable input field in the ALV grid?
    Please suggest.
    Thanks,
    Swati

    EDIT field in field catalog is there, you must have ommited it.
    ls_fieldcat-edit = 'X'.   "set your desired column to be edited
    Now you need to get entered value for further processing.
    Define a class as a event receiver for data_changed or data_changed_finished events. Here is how to implement the latter method:
    CLASS cl_alv_event_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS:
          cell_changed FOR EVENT data_changed_finished OF cl_gui_alv_grid
                              IMPORTING e_modified et_good_cells.
    ENDCLASS.
    CLASS cl_alv_event_receiver IMPLEMENTATION.
       METHOD cell_changed.
          check e_modified = 'X'. "if content of cell was changed
           "here you check et_good_cells table, it will contain new values
           "it is of type lvc_t_modi
       ENDMETHOD.
    ENDCLASS.
    CREATE OBJECT cl_alv_event_receiver.
    "now just indicate the handler for this event
    SET HANDLER cl_avl_event_receiver->cell_changed FOR cl_gui_alv_grid.
    Each time some action was perfomed on edit field, the method will be invoked and you can check inside what was changed and what is the new value.
    Additionally after displaying your output table in alv, you need to register this event
    "register edit events
          CALL METHOD W_ROGRID->register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    Now all you need is to update appropraite records to your internal table in your METHOD cell_changed.

  • How to make a field manadatory within ALV Grid using methods and classes

    Hi,
    I am using ALV Grid using set_table_for_first_display
    inside my dialog programming. I have a field called project number inside my grid which has to be made as mandatory field.
    I have defined a method called catch_data_changed inside my class lcl_event_receiver. This method captures the changes made to one of the fields inside my ALV grid and displays all the default values of the other fields from the grid.
    Now, i have to make project number which is one of my fields inside my ALV grid as mandatory. At the field catalog level i did not find any such option for making a field as required field.
    Is there any other way, i can accomplish this within the ALV grid?

    from my understanding from ur question, i understood that u want the editable field inside alvgrid to be mandatory.
    i dont know anthing in fieldcat, but u can try the following logic.
    FORM DATA_CHANGED  USING P_ER_DATA_CHANGED TYPE REF TO
    CL_ALV_CHANGED_DATA_PROTOCOL .
      DATA: L_VALUE TYPE LVC_VALUE,
        ls_mod_cell type lvc_s_modi.
      READ TABLE P_ER_DATA_CHANGED->MT_MOD_CELLS INTO LS_MOD_CELL.
    if sy-subrc = 0.
        CALL METHOD P_ER_DATA_CHANGED->GET_CELL_VALUE
          EXPORTING
            I_ROW_ID    = LS_MOD_CELL-row_id
            I_FIELDNAME = LS_MOD_CELL-fieldname
          IMPORTING
            E_VALUE     = L_VALUE.
    IF LS_MOD_CELL-FIELDNAME <> 'fieldname what u want'
    MESSAGE 'ENTER VALUE INTO (fieldname u want) ' TYPE 'I'.
    ENDIF.
    ELSE.
    MESSAGE 'ENTER VALUE INTO (fieldname u want) ' TYPE 'I'.
    ENDIF.

  • ALV GRID DISPLAY and a Parameter entry in the same screen how ?

    Hi,
    I am newbie to ABAP and I am trying to figure out ways to display an ALV grid along with the parameter field into which the user enters his/ her values in the same screen.To be clear,  when I have a parameter type specified, my screen just lets me display that one field into which the user is asked to enter a value but I want to display the table as well as the user input field in the same screen.
    Any help would be appreciated.
    Thanks a lot. I appreciate that.
    -V

    Hi,
    I think the easiest way to do that is by means of docking container . I will assume you are using selection-screen, but you can also achieve that with normal screen.
    - first you need to place your field in selection screen which I believe you already have
    - now during AT SELECTION-SCREEN OUTPUT you check if something is entred to that field
    - if so you create instance of docking container (docking it at left hand side) then inside you place you alv with selected data for that field value
    So the code which fulfils that would be
    PARAMETERS pa_carr TYPE scarr-carrid.
    DATA: gr_dock_cont TYPE REF TO cl_gui_docking_container,
          gr_alv       TYPE REF TO cl_gui_alv_grid.
    DATA: it_spfli     TYPE TABLE OF spfli.
    AT SELECTION-SCREEN OUTPUT.
      IF pa_carr IS NOT INITIAL.
        SELECT * FROM spfli INTO TABLE it_spfli UP TO 10 ROWS
                                                WHERE carrid = pa_carr .
        IF gr_dock_cont IS NOT BOUND.
          CREATE OBJECT gr_dock_cont
            EXPORTING
              side                        = cl_gui_docking_container=>dock_at_left
              extension                   = 500.
          CREATE OBJECT gr_alv
            EXPORTING
              i_parent          = gr_dock_cont.
          CALL METHOD gr_alv->set_table_for_first_display
            EXPORTING
              i_structure_name = 'SPFLI'
            CHANGING
              it_outtab        = it_spfli.
        ELSE.
          CALL METHOD gr_alv->refresh_table_display.
        ENDIF.
      ENDIF.
    Regards
    Marcin

  • New Page in ALV GRID display.

    HI Experts,
    I have a requirement of displaying top of page and corresponding detailed records for specific combination of top of page(say plant,material,batch etc). Again for the next combination I need repeated header and detail list.
    I guess I have to use NEW PAGE to get this.
    However, I am using the REUSE ALV GRID DISPLAY for which the sort table does not display as required.
    Could you please help me  on this?
    In addition could you please suggest how to use NEW page in report without using OOPS concept.
    Please reply.
    Thanks,
    Suchi.

    Hi,
    1.Put a pushbutton  on the ALV o/p say 'Next'.
    2. Now in the user comand routine you have to change the  table contents u supply to reuse_alv_commentary write, also fill the o/p internal table with data corresponding to ur specific combination and supply to reuse_alv_grid_display.
    3.In the user comand routine u have  slis_selfield.
    4.It contains a component refresh, mark it as 'X'.( slis_selfield-refresh = 'X'.)
    5.No need of new page or calling reus_alv_grid_display number of times.
    Regards,
    Phani.

  • Push button in ALV Grid Display

    Hi all,
    I have a requirement wherin i need to place a button in the ALV Grid Display which should update all the records whatever are displayed in the specified infotype. This is to be done in a report.
    Can anybody give me any pointers or sample code for the above query.
    Regards,
    Amrita

    Simply add a button on your GUI status. Then when pushed, code your logic for update IT0008.
    AT USER-COMMAND event block will be triggered when you press your button.
    AT USER-COMMAND.
      if sy-ucomm = 'PUSHBUTTON'.    "here comes function code of your pushbutton
         "update your diplayed records
      endif.

  • ALV Grid Problem in WebGUI

    Hi All,
    We've created an ALV grid using classes in R3 and we're testing it in WebGUI.  All of those scenarios are working fine in R3 however the behavior in WebGUI is different.  We're encountering a problem wherein the cellstyles are not being reflected (eg. a particular cell for a particular row should be grayed out if a particular field has this value).  Furthermore, if we enter a value in this field, it should automatically populate values for other fields (eg. column name - PERNR.  Once pernr is entered; column name - NAME should have a value automatically).  Another thing is, the Refresh button is  missing in WebGUI.  One more problem is that the error message for that particular column was not shown.  We're using the add_protocol_entry method, so it should generate a pop-up screen.
    Any solution for all these problems?  Are these problems limitations of the ALV Grid in WebGUI? 
    We'll appreciate all your responses.  Thanks a lot.

    Have a look at example code: BCALV_GRID_01, where they suppress the error by catching it...
    If you are using the ABAP Grid Control (OO object), you can still create the ALV list as a spool listing for the background job.
    The easiest way to do this is to put all the create object statements and method calls for the custom container and ALV grid object inside a subroutine (for example, present_grid).
    All that is required is a simple check of the sy-batch variable to determine if the program is being executed in the foreground or background.
    e.g. if sy-batch is initial.
    call screen 0100.
    else.
    perform present_grid.
    endif.
    In a PBO module of screen 0100, the subroutine present_grid is also performed.
    The set_table_for_first_display method will be invoked in the routine present_grid, however, due to the job being executed in the background, the ALV list output will be written as spool output for the background job.

  • ALV grid to excel (.XLS) format issue

    im trying to export an ALV grid to excel file using FM 'GUI_DOWNLOAD'.
    the output  is located at the link  below:
    http://img393.imageshack.us/my.php?image=excelproblemjt4.jpg
    some how the fields arent inside the individual boxes..
    can anyone provide me with the solution? thanks
    below are the codes of how i implement the 'GUI DOWNLOAD' FM
    CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename   = lv_file        " C:\filename.xls
          write_field_separator = 'X'
        IMPORTING
          filelength = lv_size
        TABLES
          data_tab   = ltt_data

    REPORT  test0012                                                  .
    INCLUDE test_top.
    INCLUDE test_f01.
    INCLUDE test_alv.
          START OF SELECTION
    START-OF-SELECTION.
      PERFORM get_data.
      PERFORM process_data.
    END-OF-SELECTION.
      IF tt_output IS NOT INITIAL.
        PERFORM prepare_excel_data.
    Download CSV file to local
        IF c_loc = 'X'.
         PERFORM convert_to_xls.
          PERFORM download_local.
        ENDIF.
      ELSE.
    Show Message when no records selected
       MESSAGE I016 WITH TEXT-005.
      ENDIF.
      PERFORM f_alv_disp.
    *&  Include           test_TOP                                   *
    TABLES: vbrk, vbrp, vbak, vbap, kna1.
    DATA: total_value TYPE p DECIMALS 2 LENGTH 15.
    DATA: total TYPE c LENGTH 5 VALUE 'total'.
    TYPE-POOLS
    TYPE-POOLS: slis, truxs.
    -ALV----
    DATA:
      wa_alv_layout       TYPE slis_layout_alv,
      tt_alv_fieldcat     TYPE slis_t_fieldcat_alv WITH HEADER LINE,
    tt_alv_sort         TYPE slis_t_sortinfo_alv WITH HEADER LINE,
      tt_alv_events       TYPE slis_t_event WITH HEADER LINE,
      wa_sort             TYPE slis_sortinfo_alv,
      tt_sort             TYPE slis_t_sortinfo_alv,
      v_pagno             TYPE sy-pagno,
      s_keyinfo           TYPE slis_keyinfo_alv.
    TYPES
    TYPES: BEGIN OF vbrk,
            vbeln TYPE vbrk-vbeln,
            fkdat TYPE vbrk-fkdat,
            vkorg TYPE vbrk-vkorg,
            vtweg TYPE vbrk-vtweg,
            spart TYPE vbrk-spart,
            kunag TYPE vbrk-kunag,
           END OF vbrk,
           BEGIN OF vbrp,
            vbeln TYPE vbrp-vbeln,
            aubel TYPE vbrp-aubel,
            vgbel TYPE vbrp-vgbel,
            aupos TYPE vbrp-aupos,
           END OF vbrp,
           BEGIN OF vbak,
            vbeln TYPE vbak-vbeln,
            auart TYPE vbak-auart,
            bstnk TYPE vbak-bstnk,
           END OF vbak,
           BEGIN OF vbap,
            vbeln TYPE vbap-vbeln,
            posnr TYPE vbap-posnr,
            netwr TYPE vbap-netwr,
            mwsbp TYPE vbap-mwsbp,
           END OF vbap,
           BEGIN OF kna1,
            kunnr TYPE kna1-kunnr,
            name1 TYPE kna1-name1,
           END OF kna1,
           BEGIN OF output,
            fkdat TYPE vbrk-fkdat,
            vkorg TYPE vbrk-vkorg,
            vtweg TYPE vbrk-vtweg,
            spart TYPE vbrk-spart,
            kunag TYPE vbrk-kunag,
            name1 TYPE kna1-name1,
            auart TYPE vbak-auart,
            bstnk TYPE vbak-bstnk,
            aubel TYPE vbrp-aubel,
            vgbel TYPE vbrp-vgbel,
            total LIKE total_value,
           END OF output.
    Type for download to excel use.
    TYPES: BEGIN OF ty_excel,
             col1(20), sp01,
             col2(25), sp02,
             col3(23), sp03,
             col4(14), sp04,
             col5(15), sp05,
             col6(23), sp06,
             col7(13), sp07,
             col8(25), sp08,
             col9(20), sp09,
             col10(30), sp10,
             col11(13),
           END OF ty_excel.
    DATA: wa_vbrk TYPE vbrk,
          wa_vbrp TYPE vbrp,
          wa_vbak TYPE vbak,
          wa_vbap TYPE vbap,
          wa_kna1 TYPE kna1,
          wa_output TYPE output,
          tt_vbrk TYPE STANDARD TABLE OF vbrk,
          tt_vbrp TYPE STANDARD TABLE OF vbrp,
          tt_vbak TYPE STANDARD TABLE OF vbak,
          tt_vbap TYPE STANDARD TABLE OF vbap,
          tt_kna1 TYPE STANDARD TABLE OF kna1,
          tt_output TYPE STANDARD TABLE OF output.
    Table for download to excel use.
    DATA: tt_excel TYPE STANDARD TABLE OF ty_excel,
          wa_excel LIKE LINE OF tt_excel,
          tt_excel_output  TYPE truxs_t_text_data.
         wa_excel type ty_excel.
    Data Declaration for CSV file use
    CONSTANTS : c_comma TYPE c VALUE ','.
    Selection-Screen
    SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
    SELECT-OPTIONS:  s_fkdat FOR vbrk-fkdat OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK b01.
    SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE text-b02.
    PARAMETERS:      p_vkorg TYPE vbrk-vkorg OBLIGATORY.
    SELECT-OPTIONS:  s_vtweg FOR vbrk-vtweg,
                     s_spart FOR vbrk-spart.
    SELECTION-SCREEN END OF BLOCK b02.
    SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE text-b03.
    SELECT-OPTIONS:  s_kunag FOR vbrk-kunag.
    SELECTION-SCREEN END OF BLOCK b03.
    SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE text-b04.
    PARAMETERS:      c_loc AS CHECKBOX,
                     p_file LIKE rlgrap-filename DEFAULT 'C:\filename.txt'.
    SELECTION-SCREEN END OF BLOCK b04.
    *&  Include           test_F01                                   *
    FORM get_data
    FORM get_data.
      DATA: lt_vbrk TYPE STANDARD TABLE OF vbrk,
            lt_vbrp TYPE STANDARD TABLE OF vbrp.
      SELECT vbeln fkdat vkorg vtweg spart kunag
      FROM vbrk
      INTO TABLE tt_vbrk
      WHERE fkdat IN s_fkdat
      AND   vkorg = p_vkorg
      AND   vtweg IN s_vtweg
      AND   spart IN s_spart
      AND   kunag IN s_kunag.
      lt_vbrk[] = tt_vbrk[].
      SORT lt_vbrk BY vbeln.
      IF lt_vbrk[] IS NOT INITIAL.
        SELECT vbeln aubel vgbel aupos
        FROM vbrp
        INTO TABLE tt_vbrp
        FOR ALL ENTRIES IN lt_vbrk
        WHERE vbeln = lt_vbrk-vbeln.
      ENDIF.
      lt_vbrp[] = tt_vbrp[].
      SORT lt_vbrp BY aubel.
      IF lt_vbrp[] IS NOT INITIAL.
        SELECT vbeln auart bstnk
        FROM vbak
        INTO TABLE tt_vbak
        FOR ALL ENTRIES IN lt_vbrp
        WHERE vbeln = lt_vbrp-aubel.
      ENDIF.
      lt_vbrp[] = tt_vbrp[].
      SORT lt_vbrp BY aubel aupos.
      IF lt_vbrp[] IS NOT INITIAL.
        SELECT vbeln posnr netwr mwsbp
        FROM vbap
        INTO TABLE tt_vbap
        FOR ALL ENTRIES IN lt_vbrp
        WHERE vbeln = lt_vbrp-aubel
        AND posnr = lt_vbrp-aupos.
      ENDIF.
      lt_vbrk[] = tt_vbrk[].
      SORT lt_vbrk BY kunag.
      IF lt_vbrk[] IS NOT INITIAL.
        SELECT kunnr name1
        FROM kna1
        INTO TABLE tt_kna1
        FOR ALL ENTRIES IN lt_vbrk
        WHERE kunnr = lt_vbrk-kunag.
      ENDIF.
    ENDFORM.                    "get_data
    *&      Form  process_data
    FORM process_data.
      LOOP AT tt_vbrk INTO wa_vbrk.
        wa_output-fkdat = wa_vbrk-fkdat.
        wa_output-vkorg = wa_vbrk-vkorg.
        wa_output-vtweg = wa_vbrk-vtweg.
        wa_output-spart = wa_vbrk-spart.
        wa_output-kunag = wa_vbrk-kunag.
    read table tt_vbrp into wa_vbrp with key vbeln = wa_vbrk-vbeln.
    if sy-subrc = 0.
       wa_output-aubel = wa_vbrp-aubel.
       wa_output-vgbel = wa_vbrp-vgbel.
    endif.
        READ TABLE tt_kna1 INTO wa_kna1 WITH KEY kunnr = wa_vbrk-kunag BINARY SEARCH.
        IF sy-subrc = 0.
          wa_output-name1 = wa_kna1-name1.
        ENDIF.
        LOOP AT tt_vbrp INTO wa_vbrp WHERE vbeln = wa_vbrk-vbeln.
          wa_output-aubel = wa_vbrp-aubel.
          wa_output-vgbel = wa_vbrp-vgbel.
          READ TABLE tt_vbak INTO wa_vbak WITH KEY vbeln = wa_vbrp-aubel BINARY SEARCH.
          IF sy-subrc = 0.
            wa_output-auart = wa_vbak-auart.
            wa_output-bstnk = wa_vbak-bstnk.
          ENDIF.
          READ TABLE tt_vbap INTO wa_vbap  WITH KEY vbeln = wa_vbrp-aubel
                                                    posnr = wa_vbrp-aupos BINARY SEARCH.
          wa_output-total = wa_vbap-netwr + wa_vbap-mwsbp.
          APPEND wa_output TO tt_output.
        ENDLOOP. "endloop tt_vbrp
      wa_output-total = wa_vbap-netwr + wa_vbap-mwsbp.
    append wa_output to tt_output.
        CLEAR wa_output.
      ENDLOOP.  "endloop vbrk
    ENDFORM.                    "process_data
    *&      Form  APPEND_EXCEL
    FORM append_excel .
      wa_excel-sp01 = wa_excel-sp02 = wa_excel-sp03 =
      wa_excel-sp04 = wa_excel-sp05 = wa_excel-sp06 =
      wa_excel-sp07 = wa_excel-sp08 = wa_excel-sp09 =
      wa_excel-sp10.
      APPEND wa_excel TO tt_excel. CLEAR wa_excel.
    ENDFORM.                    " APPEND_EXCEL
    *&      Form  PREPARE_EXCEL_DATA
    FORM prepare_excel_data .
    List's Header for excel file
      WRITE  'Billing Date'                TO wa_excel-col1.
      WRITE  'Sales Organization'          TO wa_excel-col2.
      WRITE  'Distribution Channel'        TO wa_excel-col3.
      WRITE  'Division'                    TO wa_excel-col4.
      WRITE  'Sold-to Party'               TO wa_excel-col5.
      WRITE  'Name of Sold-to Party'       TO wa_excel-col6.
      WRITE  'Order Type'                  TO wa_excel-col7.
      WRITE  'Customer PO Number'          TO wa_excel-col8.
      WRITE  'Sales Order Number'          TO wa_excel-col9.
      WRITE  'Delivery Order Number'       TO wa_excel-col10.
      WRITE  'Total Value'                 TO wa_excel-col11.
      PERFORM append_excel.
    Item data for excel file.
      LOOP AT tt_output INTO wa_output.
        WRITE  wa_output-fkdat  TO wa_excel-col1.
        WRITE  wa_output-vkorg  TO wa_excel-col2.
        WRITE  wa_output-vtweg  TO wa_excel-col3.
        WRITE  wa_output-spart  TO wa_excel-col4.
        WRITE  wa_output-kunag  TO wa_excel-col5.
        WRITE  wa_output-name1  TO wa_excel-col6.
        WRITE  wa_output-auart  TO wa_excel-col7.
        WRITE  wa_output-bstnk  TO wa_excel-col8.
        WRITE  wa_output-aubel  TO wa_excel-col9.
        WRITE  wa_output-vgbel  TO wa_excel-col10.
        WRITE  wa_output-total TO wa_excel-col11.
        PERFORM append_excel.
      ENDLOOP.
    List's Header for excel file
    CONCATENATE '"' 'Billing Date'           '"'     INTO WA_EXCEL-COL1.
    CONCATENATE '"' 'Sales Organization'     '"'     INTO WA_EXCEL-COL2.
    CONCATENATE '"' 'Distribution Channel'   '"'     INTO WA_EXCEL-COL3.
    CONCATENATE '"' 'Division'               '"'     INTO WA_EXCEL-COL4.
    CONCATENATE '"' 'Sold-to Party'          '"'     INTO WA_EXCEL-COL5.
    CONCATENATE '"' 'Name of Sold-to Party'  '"'     INTO WA_EXCEL-COL6.
    CONCATENATE '"' 'Order Type'             '"'      INTO WA_EXCEL-COL7.
    CONCATENATE '"' 'Customer PO Number'     '"'     INTO WA_EXCEL-COL8.
    CONCATENATE '"' 'Sales Order Number'     '"'     INTO WA_EXCEL-COL9.
    CONCATENATE '"' 'Delivery Order Number'  '"'     INTO WA_EXCEL-COL10.
    CONCATENATE '"' 'Total Value'            '"'     INTO WA_EXCEL-COL11.
    PERFORM APPEND_EXCEL.
    Item data for excel file.
    LOOP AT TT_output INTO WA_output.
       CONCATENATE '"' WA_OUTPUT-FKDAT '"' INTO WA_EXCEL-COL1.
       CONCATENATE '"' WA_OUTPUT-VKORG '"' INTO WA_EXCEL-COL2.
       CONCATENATE '"' WA_OUTPUT-VTWEG '"' INTO WA_EXCEL-COL3.
       CONCATENATE '"' WA_OUTPUT-SPART '"' INTO WA_EXCEL-COL4.
       CONCATENATE '"' WA_OUTPUT-KUNAG '"' INTO WA_EXCEL-COL5.
       CONCATENATE '"' WA_OUTPUT-NAME1 '"' INTO WA_EXCEL-COL6.
       CONCATENATE '"' WA_OUTPUT-AUART '"' INTO WA_EXCEL-COL7.
       CONCATENATE '"' WA_OUTPUT-BSTNK '"' INTO WA_EXCEL-COL8.
       CONCATENATE '"' WA_OUTPUT-AUBEL '"' INTO WA_EXCEL-COL9.
       CONCATENATE '"' WA_OUTPUT-VGBEL '"' INTO WA_EXCEL-COL10.
       CONCATENATE '"' total '"' INTO WA_EXCEL-COL11.
       PERFORM APPEND_EXCEL.
    ENDLOOP.
    ENDFORM.                    " PREPARE_EXCEL_DATA
    *&      Form  Convert_to_xls
    *form Convert_to_xls.
    LOOP AT TT_EXCEL INTO WA_EXCEL.
       MOVE WA_EXCEL TO LTT_DATA-TEXT.
       APPEND LTT_DATA. CLEAR LTT_DATA.
    ENDLOOP.
    LV_FILE = P_FILE.
    CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
    EXPORTING
       I_FIELD_SEPERATOR          = ';'
      I_LINE_HEADER              =
       i_filename                 = lv_file
      I_APPL_KEEP                = ' '
    tables
       i_tab_sap_data             = LTT_DATA
    CHANGING
      I_TAB_CONVERTED_DATA       = tt_excel_output
    EXCEPTIONS
      CONVERSION_FAILED          = 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.
    *&      Form  DOWNLOAD_LOCAL
    FORM download_local .
      TYPES:
          BEGIN OF lty_data,
            text(800),
          END OF lty_data.
      DATA:
        lv_file  TYPE string,
        lv_size  TYPE i,
        lv_msg   TYPE bapi_msg,
        ltt_data TYPE STANDARD TABLE OF lty_data WITH HEADER LINE.
      LOOP AT tt_excel INTO wa_excel.
        MOVE wa_excel TO ltt_data-text.
        APPEND ltt_data. CLEAR ltt_data.
      ENDLOOP.
      lv_file = p_file.
    CONCATENATE LV_FILE 'file.csv' INTO LV_FILE.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename   = lv_file
          write_field_separator = 'X'
          FILETYPE   = 'ASC'
        IMPORTING
          filelength = lv_size
        TABLES
          data_tab   = ltt_data
        EXCEPTIONS
          OTHERS     = 1.
      IF sy-subrc EQ 0.
        "File &1 downloaded successfully - &2 bytes transferred
        MESSAGE e419(3e) WITH lv_file lv_size INTO lv_msg.      "#EC *
      ELSE.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
      ENDIF.
    WRITE LV_MSG.
    ENDFORM.                    " DOWNLOAD_LOCAL
    *ENDIF.
    *&  Include          test_ALV                                   *
    FORM build_layout .
    wa_alv_layout-zebra           = 'X'.
      wa_alv_layout-colwidth_optimize = 'X'.
      wa_alv_layout-window_titlebar = sy-title.
    ENDFORM.                    " build_layout
    *&      Form  f_build_event
          text
    -->  p1        text
    <--  p2        text
    FORM f_build_event .
      REFRESH tt_alv_events.
      tt_alv_events-name = slis_ev_top_of_page.
      tt_alv_events-form = slis_ev_top_of_page.
      APPEND tt_alv_events.
      CLEAR tt_alv_events.
      tt_alv_events-name = slis_ev_top_of_list.
      tt_alv_events-form = slis_ev_top_of_list.
      APPEND tt_alv_events.
      CLEAR tt_alv_events.
    ENDFORM.                    " f_build_event
    *&      Form  f_alv_disp
          text
    -->  p1        text
    <--  p2        text
    FORM f_alv_disp.
      DATA lv_repid TYPE sy-repid.
      REFRESH: tt_alv_fieldcat, tt_alv_events.
      PERFORM build_layout.
      PERFORM f_build_event.
      lv_repid = sy-repid.
      PERFORM f_build_fieldcat_summary.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = lv_repid
          is_layout          = wa_alv_layout
          it_fieldcat        = tt_alv_fieldcat[]
          I_GRID_TITLE       = 'Billing Due List Report'
         it_sort           = tt_sort
           i_save          = 'A'
         it_events          = tt_alv_events[]
        TABLES
          t_outtab           = tt_output
        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.                    " f_alv_disp
    *&      Form  f_build_fieldcat_SUMMARY
          text
    -->  p1        text
    <--  p2        text
    FORM f_build_fieldcat_summary .
    do_sum    no_out    outputlen
      PERFORM f_fieldcat USING:
      'tt_output'  'FKDAT'      text-c01    ' '       ' '       '10' ,
      'tt_output'  'VKORG'      text-c02    ' '       ' '       '10',
      'tt_output'  'VTWEG'      text-c03    ' '       ' '       '10' ,
      'tt_output'  'SPART'      text-c04    ' '       ' '       '10'  ,
      'tt_output'  'KUNAG'      text-c05    ' '       ' '       '10' ,
      'tt_output'  'NAME1'      text-c06    ' '       ' '       '10' ,
      'tt_output'  'AUART'      text-c07    ' '       ' '       '10' ,
      'tt_output'  'BSTNK'      text-c08    ' '       ' '       '10'  ,
      'tt_output'  'AUBEL'      text-c09    ' '       ' '       '10' ,
      'tt_output'  'VGBEL'      text-c10    ' '       ' '       '10' ,
      'tt_output'  'TOTAL'      text-c11    ' '       ' '       '15' .
    ENDFORM.                    "
    *&      Form  f_fieldcat
    FORM f_fieldcat  USING pv_a TYPE any
                           pv_b TYPE any
                           pv_c TYPE any
                           pv_d TYPE any
                           pv_e TYPE any
                           pv_f TYPE any.
      tt_alv_fieldcat-tabname      = pv_a.
      tt_alv_fieldcat-fieldname    = pv_b.
      tt_alv_fieldcat-reptext_ddic = pv_c.
      tt_alv_fieldcat-do_sum       = pv_d.
      tt_alv_fieldcat-no_out       = pv_e.
      tt_alv_fieldcat-outputlen    = pv_f.
      APPEND tt_alv_fieldcat.
      CLEAR tt_alv_fieldcat.
    ENDFORM.                    " f_fieldcat

Maybe you are looking for

  • Sorry, a serious error has occured that requires adobe premiere pro to shut down

    Every time I start premiere pro, i get this message Sorry, a serious error has occurred that requires adobe premiere pro to shut down. We will attempt to save your current project. I have no idea why this is happening because the program has been wor

  • Location of itunes update file in Windows 7

    After launching iTunes (10.6.1.7), I am notified that there is an update available, and I approve the download.  Unfortunately, a download location is not displayed nor the exact file name.  A notification that the download is complete is not given. 

  • Number displaying beside Movies in iTunes 11

    all of a sudden i have a number showing beside my movies on the sidebar in iTunes 11. I habve about 100 movies but the number showing is 42. What is this pleae and how do i get rid of it ?

  • Auto email multiple copies to multiple user as per filter

    Hello all , I am developed a report  as below Auto email status report to particular Heads if store proc returns data for him . I can make a copy of report for one head using his division filter and user_id and if store proc returns data for him so e

  • IPhoto 9.5 library does not open in Aperture 3.5

    I have a huge library (250gb) that I created in iPhoto, and I want to use Aperture to work on it now. Both software versions are up to date, 9.5 and 3.5. The library runs without a problem under iPhoto 9.5. When I try to open the library in Aperture,