Subtotal in ALV using class cl_salv_table

Hello All,
I am displaying a LAV using the class 'cl_salv_table'. I want to do a sub total on a field and at the end of each plant data I want to display the custom text "Total for Plant 'P1' " in the subtotal line.
Please help me solve this.
Thanks,
Anju

Hi,
Firstly , add TEXT field your internal table. Then, fill this field.
loop at itab.
at the end of plant.
itab-text = 'Sub total text'.
endat.
modify itab.
endloop.
Secondly,
In fieldcat:
loop at pt_fieldcat into ls_fcat .
    case ls_fcat-fieldname .
      when 'TEXT'.
        ls_fcat-col_pos = '1'.
        ls_fcat-tech = 'X'.
        ls_fcat-no_out = 'X'.
        modify  pt_fieldcat from ls_fcat.
   endcase.
Thirdly;
In Sort:
  ls_sort-fieldname = 'TEXT' .
  ls_sort-subtot = 'X'.
  ls_sort-up = 'X'.
  append ls_sort to pt_sort.

Similar Messages

  • Download Option Not Working in ALV Using Classes

    Hi,
    Can anyone let me know what im missing since i get only my header downloaded when i download my output to EXCEL.
    Im using ALV using CLASSES.
    Thanks,
    Anita

    REPORT ZTMM_STOCK  MESSAGE-ID zmsg
                    LINE-SIZE 270
                    LINE-COUNT 58
                    NO STANDARD PAGE HEADING.
    tables: YGFMLINV,  "Material Ledger - Inventory Data Extract
            lfa1,      "Vendor Master (General Section)
            setheader, "Set Header and Directory(checking profit center grp)
            mseg,
            t001w,
            mslbh,
            mslb,
            t001.
    Internal Tables Declaration
    data: begin of i_ygfmlinv occurs 0,
           BDATJ like ygfmlinv-bdatj,     "Posting date YYYY
           POPER like ygfmlinv-poper,     "Posting period
           BUKRS like ygfmlinv-bukrs,     "Company Code
           PRCTR like ygfmlinv-prctr,     "Profit center
           WERKS like ygfmlinv-werks,     "Plant
           BKLAS like ygfmlinv-bklas,     "Valuation class
           MATNR like ygfmlinv-matnr,     "Material number
           BWTAR  like ygfmlinv-bwtar,    "Valuation type
           STOCK_IND like ygfmlinv-stock_ind, "Stock indicators
           MEINS like ygfmlinv-meins,    "Base unit of measure
           MLAST like ygfmlinv-mlast,  "Material Price Dtermination: Control
           LBKUM like ygfmlinv-lbkum,      "Total valuated stock
           vprsv like ygfmlinv-vprsv,     "Price control indicator
           lc_mvp_prc like ygfmlinv-lc_mvp_prc, "LC:Moving Avg/Periodic Prc
           LC_CURTP like ygfmlinv-LC_CURTP, "Currency Type
           LC_CURRENCY like ygfmlinv-lc_currency, "Currency Key
           gc_curtp like ygfmlinv-gc_curtp, "Grp.Curr Type
           gc_currency like ygfmlinv-gc_currency, " Grp.Curr
           LC_TOT_AMT like ygfmlinv-lc_tot_amt, "LC: Total Amount
           KONTS   LIKE T030-KONTS,       "G/L Account No
           XBILK   LIKE SKA1-XBILK,
           lc_cogs like ygfmlinv-lc_var_amt,
           lifnr like mslbh-lifnr,
           lc_trfix_amt like ygfmlinv-lc_trfix_amt,
           lc_lofix_amt like ygfmlinv-lc_lofix_amt,
           lc_var_amt like ygfmlinv-lc_var_amt,
           lc_utp_amt like ygfmlinv-lc_utp_amt,
          end of i_ygfmlinv.
    data: begin of i_mslbh occurs 0,
          MATNR like mslbh-matnr, "Material number
          SOBKZ like mslbh-sobkz, "Special stock indicator
          LIFNR like mslbh-lifnr, "Account number of vendor or creditor
          WERKS like mslbh-werks, "Plant
          CHARG like mslbh-charg, "Batch number
          LFGJA like mslbh-lfgja, "Fiscal year of current period
          LFMON like mslbh-lfmon, "Current period (posting period)
          LBLAB like mslbh-lblab, "Current period (posting period)
          LBINS like mslbh-lbins, "Stock in quality inspection
         end of i_mslbh.
    data: begin of i_MSLB occurs 0,
           MATNR like mslb-matnr,
           WERKS like mslb-werks,
           SOBKZ like mslb-sobkz,
           LIFNR like mslb-lifnr,
           LFGJA like mslb-lfgja,
           LFMON like mslb-lfmon,
           LBLAB like mslb-lblab,
           LBINS like mslb-lbins,
           LBEIN like mslb-lbein,
          end of i_mslb.
    *data: begin of i_t030 occurs 0,
         KTOPL like t030-ktopl,
         BKLAS like t030-bklas,
         KONTS like t030-konts,
         end of i_t030.
    *data: begin of i_ska1 occurs 0,
         SAKNR like ska1-saknr,
         XBILK like ska1-xbilk,
         end of i_ska1.
    DATA : BEGIN OF i_non_subc OCCURS 0,
          MATNR         LIKE YGFMLINV-MATNR,        "Material
          WERKS         LIKE YGFMLINV-WERKS,    "Plant,
          bukrs         like ygfmlinv-bukrs,    "Company Code
          BKLAS         LIKE YGFMLINV-BKLAS,    "Val Class
          PRCTR         LIKE YGFMLINV-PRCTR,   "Profit Center
          BWTAR         LIKE YGFMLINV-BWTAR,    "Val Type
          LBKUM         LIKE YGFMLINV-LBKUM,        "QTY
          PEINH         LIKE YGFMLINV-PEINH,        "Price Unit
          MEINS         LIKE YGFMLINV-MEINS,        "Unit of Measure
          lc_currency   like ygfmlinv-lc_currency,
          lc_curtp      like ygfmlinv-lc_curtp,
          gc_currency   like ygfmlinv-gc_currency,
          gc_curtp   like ygfmlinv-gc_currency,
          LC_VAR_AMT    LIKE YGFMLINV-LC_VAR_AMT,   "LC :Variable Amt
          LC_TRFIX_AMT  LIKE YGFMLINV-LC_TRFIX_AMT, "LC :Trnsfer Fixed Amt
          LC_LOFIX_AMT  LIKE YGFMLINV-LC_LOFIX_AMT, "LC:Local Fixed Amt.
          LC_COGS       LIKE YGFMLINV-LC_VAR_AMT,  "Total LC fixed COGS
                                                   "added as per CC01507
          LC_UTP_AMT    LIKE YGFMLINV-LC_UTP_AMT,   "LC:UTP Amount.
          LC_TR_VAL     LIKE YGFMLINV-LC_LOFIX_AMT,"TotalLC Transfer value
          XBILK         LIKE SKA1-XBILK,            "Balance Indicator
          gc_var_amt    like ygfmlinv-gc_var_amt,
          gc_trfix_amt like ygfmlinv-gc_trfix_amt,
          gc_lofix_amt like ygfmlinv-gc_lofix_amt,
          gc_cogs      like ygfmlinv-gc_var_amt,
          gc_utp_amt   like ygfmlinv-gc_utp_amt,
          gc_tr_val    like ygfmlinv-gc_lofix_amt,
    END OF i_non_subc.
    Final Output Table
    types: begin of t_output,
          matnr like ygfmlinv-matnr,
          lifnr like mslbh-lifnr,
          werks like ygfmlinv-werks,
          spstk like mslbh-lblab,
          totstk like ygfmlinv-lbkum,
          lc_currency like ygfmlinv-LC_CURRENCY,
          lc_curtp like ygfmlinv-lc_curtp,
          gc_curtp like ygfmlinv-gc_curtp,
          gc_currency like ygfmlinv-gc_currency,
          name1 like lfa1-name1,
          vprsv like ygfmlinv-vprsv,
          bukrs like ygfmlinv-bukrs,
          mlast like ygfmlinv-mlast,
          meins like ygfmlinv-meins,
          bklas like ygfmlinv-bklas,
          maktx like makt-maktx,
          stdprice(18),
          totval like ygfmlinv-lc_tot_amt,
          sobkz like mslbh-sobkz,
          end of t_output.
    Work Area for Final Output Table
    data: wa_output type t_output.
    ALV Display
    Name of Custom Container added on the screen
    data: G_CONTAINER TYPE SCRFNAME VALUE 'ZGRID_CTRL',
    ALV GRID Instance Reference
          G_GRID1 TYPE REF TO CL_GUI_ALV_GRID, "Grid
    Instance Reference to Custom Container
          G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
    PBO Status
    data: ok_code like sy-ucomm,
    Field Catalog Table
          gT_FIELDCAT      TYPE LVC_T_FCAT,
    Layout Structure
          gs_layout type lvc_s_layo,
    Sorting anf Subtotal
          gt_sort TYPE lvc_s_sort occurs 0,
    gt_output  type standard table  of t_output.
    data: g_curr(2).
          CLASS lcl_event_receiver DEFINITION
    class lcl_event_receiver definition.
      public section.
    Add SUB TOTAL TEXT to the ALV DISPLAY
        methods handle_subtotal_text
            for event subtotal_text of cl_gui_alv_grid
            importing es_subtottxt_info ep_subtot_line e_event_data.
    endclass.
    Declaration for EVENT Receiver
    data: event_receiver type ref to lcl_event_receiver,
         l_subtxt(60) value 'Subtotal Text'.
    field-symbols: <fs> type t_output,
                   <fs1>.
          CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
    CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
      METHOD HANDLE_SUBTOTAL_TEXT.
    FIELD for which the SUBTOTAL is Calculated
        if es_subtottxt_info-criteria = 'MATNR'.
          ASSIGN EP_SUBTOT_LINE->* TO <FS1>.
          ASSIGN  E_EVENT_DATA->M_DATA->* TO <FS>.
          CONCATENATE es_subtottxt_info-keyword ':MATERIAL'
        <fs>-matnr INTO <fs1>.
        ENDIF.
      ENDMETHOD.                 "HANDLE_SUBTOTAL_TEXT
    ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
    Constants
    constants: c_eb(2) value 'EB',
               c_m value 'M',
               C_KTOPL(4) VALUE 'TCOA',
               C_KTOSL(3) VALUE 'BSX',
               C_KONTS(4) VALUE '002%'.
    Selection Screen
    selection-screen:begin of block b1 with frame title text-001.
    select-options: s_lifnr for lfa1-lifnr ,       "Vendor
            s_werks for YGFMLINV-werks obligatory, "Plant
            s_prctr for YGFMLINV-prctr, "Pr.Ctr
            s_matnr for ygfmlinv-matnr, "Mat.No
            s_bwtar for mseg-bwtar no-display.
    parameters: p_bukrs like YGFMLINV-bukrs obligatory, "C.Code
          p_pctrgp like  SETHEADER-SETNAME, "Pf.ct.Grp
          p_poper like YGFMLINV-poper obligatory, " Period
          p_bdatj like YGFMLINV-bdatj obligatory, " Year
          r_ccode  radiobutton group rad1 default 'X',
          r_grpcur radiobutton group rad1.
    selection-screen: end of block b1.
    Ranges Declaration
    RANGES : R_PROFIT_CTR FOR CEPC-PRCTR.
           INITIALIZATON
    *initialization.
      Validations for Selection Screen
    Validation for Vendor
    at selection-screen on s_lifnr.
      select single lifnr
               from lfa1
               into lfa1-lifnr
               where lifnr in s_lifnr.
      if sy-subrc ne 0.
        message e039.
      endif.
    Validation for Plant
    at selection-screen on s_werks.
      select single werks
             from t001w
             into t001w-werks
             where werks in s_werks.
      if sy-subrc ne 0.
        message e040.
      endif.
    Validation for Profit Center
    at selection-screen on s_prctr.
      select single prctr
              from ygfmlinv
              into ygfmlinv-prctr
             where prctr in s_prctr.
      if sy-subrc ne 0.
        message e041.
      endif.
    Validation for Company Code
    at selection-screen on p_bukrs.
      select single bukrs
             from t001
             into t001-bukrs
             where bukrs eq p_bukrs.
      if sy-subrc ne 0.
        message e042.
      endif.
    Validation for Profit Center Group
    at selection-screen on p_pctrgp.
      if not p_pctrgp is initial.
        select single setname
              from setheader
              into setheader-setname
              where setname eq p_pctrgp.
        if sy-subrc ne 0.
          message e043.
        endif.
      endif.
    Validation for Fiscal Period
    *at selection-screen on p_poper.
    select single poper
            from YGFMLINV
            into YGFMLINV-poper
            where poper eq p_poper.
    if sy-subrc ne 0.
       message e045.
    endif.
    Validation for Fiscal Year
    *at selection-screen on p_bdatj.
    select single bdatj
            from YGFMLINV
            into YGFMLINV-bdatj
            where bdatj eq p_bdatj.
    if sy-subrc ne 0.
       message e046.
    endif.
    start-of-selection.
      if p_pctrgp ne ' '.
        perform f_profit_center_select.
      endif.
      perform f_data_selection. "using p_profit_center..
    end-of-selection.
      call screen 100.
    *&      Form  f_data_selection
          text
    -->  p1        text
    <--  p2        text
    FORM f_data_selection.
      data: l_flg,
            l_lblab like mslbh-lblab,
            l_name1 like lfa1-name1,
            l_rate like mslbh-lblab,
            l_maktx like makt-maktx,
            l_diff_stk like mslbh-lblab,
            l_totval like ygfmlinv-lc_tot_amt.
    From profit center group get Profit Center
      LOOP AT R_PROFIT_CTR.
        IF R_PROFIT_CTR-LOW EQ R_PROFIT_CTR-HIGH.
          R_PROFIT_CTR-OPTION = 'EQ'.
          R_PROFIT_CTR-HIGH = SPACE.
          MODIFY R_PROFIT_CTR.
        ENDIF.
      ENDLOOP.
      if r_ccode eq 'X'.
        g_curr = '10'.
      else.
        g_curr = '30'.
      endif.
      if g_curr eq '10'.
    Fetch TOTAL STOCK ,VALUE from ML - Inv. Data Extract Table
        select BDATJ POPER BUKRS PRCTR WERKS BKLAS MATNR
                 BWTAR  STOCK_IND MEINS MLAST LBKUM
                 vprsv lc_mvp_prc LC_CURTP
                 LC_CURRENCY LC_TOT_AMT
                 lc_var_amt LC_UTP_AMT
                 lc_trfix_amt lc_lofix_amt
                 gc_curtp gc_currency
                 from YGFMLINV
                 into corresponding fields of table i_YGFMLINV
                 where bdatj eq p_bdatj and
                       poper eq p_poper and
                       bukrs eq p_bukrs and
                       werks in s_werks and
                       matnr in s_matnr and
                     STOCK_IND eq c_m and
                       trans_type eq c_eb and
                       lc_curtp eq g_curr.
      else.
    Fetch TOTAL STOCK ,VALUE from ML - Inv. Data Extract Table
        select BDATJ POPER BUKRS PRCTR WERKS BKLAS MATNR
                 BWTAR  STOCK_IND MEINS MLAST LBKUM
                 vprsv lc_mvp_prc LC_CURTP
                 LC_CURRENCY LC_TOT_AMT
                 lc_var_amt LC_UTP_AMT
                 lc_trfix_amt lc_lofix_amt
                 gc_curtp gc_currency
                 from YGFMLINV
                 into corresponding fields of table i_YGFMLINV
                 where bdatj eq p_bdatj and
                       poper eq p_poper and
                       bukrs eq p_bukrs and
                       werks in s_werks and
                       matnr in s_matnr and
                     STOCK_IND eq c_m and
                       trans_type eq c_eb and
                       gc_curtp eq g_curr.
      endif.
    Delete Entries not in Profit Center range
      LOOP AT I_YGFMLINV.
        IF  NOT I_YGFMLINV-PRCTR IN R_PROFIT_CTR.
          DELETE I_YGFMLINV.
        ENDIF.
      ENDLOOP.
      if not i_ygfmlinv[] is initial.
        data l_date like mkpf-budat.
        move : p_bdatj to l_date(4),
               p_poper to l_date+4(2),
               '31' to l_date+6(2).
    Get the TOTAL STOCK for Vendor and Material
        SELECT     MATNR
                   WERKS
                   CHARG
                   SOBKZ
                   LIFNR
                   LFGJA
                   LFMON
                   LBLAB
                   LBINS
                   FROM MSLBH INTO corresponding fields of TABLE I_MSLBH
                   for all entries in i_ygfmlinv
                   WHERE MATNR eq i_ygfmlinv-matnr and
                        WERKS EQ i_ygfmlinv-WERKS AND
                       SOBKZ in p_stkind AND
                        LIFNR in s_LIFNR AND
                        LFGJA GE P_BDATJ and
                        lfmon eq p_poper.
        if sy-subrc eq 0.
          DELETE I_MSLBH WHERE LFGJA EQ P_BDATJ AND
                               LFMON LT P_POPER.
        endif.
      endif.
      sort i_mslbh by matnr lifnr werks lfgja lfmon.
      sort i_ygfmlinv by matnr  werks bdatj poper.
      loop at i_mslbh.
        l_lblab = l_lblab + i_mslbh-lblab.
        at end of lifnr.
          l_flg = 'X'.
        endat.
        read table i_ygfmlinv with key matnr = i_mslbh-matnr
                                       werks = i_mslbh-werks
                                       bdatj = i_mslbh-lfgja
                                       poper = i_mslbh-lfmon
                                       binary search.
        if sy-subrc eq 0.
          select single name1 from lfa1 into l_name1
                   where lifnr eq i_mslbh-lifnr.
          if sy-subrc eq 0.
            select single maktx
                      from makt
                      into l_maktx
                      where matnr eq i_mslbh-matnr and
                            spras eq sy-langu.
            if l_flg eq 'X'.
    Subtract Total stk from Special Stock Vendor to get the difference
              l_diff_stk =   i_ygfmlinv-lbkum - l_lblab.
              move : i_mslbh-matnr to wa_output-matnr,
                     i_mslbh-lifnr to wa_output-lifnr,
                     i_mslbh-werks to wa_output-werks,
                     l_lblab to wa_output-totstk,
                     l_name1 to wa_output-name1,
                     i_ygfmlinv-vprsv to wa_output-vprsv,
                     i_ygfmlinv-meins to wa_output-meins,
                     i_ygfmlinv-lc_mvp_prc to wa_output-stdprice,
                     i_ygfmlinv-mlast to wa_output-mlast,
                     i_ygfmlinv-bukrs to wa_output-bukrs,
                     i_ygfmlinv-bklas to wa_output-bklas,
                     i_mslbh-sobkz to wa_output-sobkz.
              if g_curr eq '10'.
                move: i_ygfmlinv-lc_curtp to wa_output-lc_curtp,
                      i_ygfmlinv-lc_currency to wa_output-lc_currency.
              else.
                move: i_ygfmlinv-gc_curtp to wa_output-gc_curtp,
                      i_ygfmlinv-gc_currency to wa_output-gc_currency.
              endif.
              if wa_output-totstk ne 0.
                l_rate = i_ygfmlinv-LC_TOT_AMT  / i_ygfmlinv-lbkum.
                wa_output-totval =  l_rate * l_lblab.
              endif.
              append wa_output to gt_output.
              move wa_output-totval to l_totval.
              clear: l_rate,wa_output.
              if l_diff_stk ne 0.
                wa_output-totval = i_ygfmlinv-LC_TOT_AMT  -  l_totval.
                move: i_mslbh-matnr to wa_output-matnr,
    *Included - Remove
                      i_mslbh-matnr to wa_output-matnr,
                      i_mslbh-werks to wa_output-werks,
                      l_diff_stk to wa_output-totstk,
                      i_ygfmlinv-vprsv to wa_output-vprsv,
                      i_ygfmlinv-meins to wa_output-meins,
                      i_ygfmlinv-lc_mvp_prc to wa_output-stdprice,
                      i_ygfmlinv-mlast to wa_output-mlast,
                      i_ygfmlinv-bukrs to wa_output-bukrs,
                      i_ygfmlinv-bklas to wa_output-bklas.
                if g_curr eq '10'.
                  move: i_ygfmlinv-lc_curtp to wa_output-lc_curtp,
                        i_ygfmlinv-lc_currency to wa_output-lc_currency.
                else.
                  move: i_ygfmlinv-gc_curtp to wa_output-gc_curtp,
                        i_ygfmlinv-gc_currency to wa_output-gc_currency.
                endif.
                append wa_output to gt_output.
                clear: i_ygfmlinv,l_flg,l_lblab,l_name1,wa_output,
                       i_mslbh.
              endif.
            endif.
          endif.
        endif.
      endloop.
      sort: i_ygfmlinv by matnr werks,
                i_mslbh by matnr werks.
      LOOP AT I_YGFMLINV.
        read table i_mslbh with key matnr = i_ygfmlinv-matnr
                                        binary search.
        if sy-subrc eq 0.
          delete i_ygfmlinv.
          clear i_ygfmlinv.
        else.
          MOVE-CORRESPONDING I_YGFMLINV TO i_non_subc.
          APPEND i_non_subc.
          CLEAR I_YGFMLINV.
        endif.
      ENDLOOP.
      sort i_non_subc by matnr werks.
      data: l_lc_cogs(16) type p decimals 2,
            l_lc_tr_val(16) type p decimals 2,
            l_gc_cogs(16) type p decimals 2,
            l_gc_tr_val(16) type p decimals 2.
      LOOP AT i_non_subc.
        if g_curr eq '10'.
          l_LC_COGS   = i_non_subc-LC_TRFIX_AMT +
                        i_non_subc-LC_LOFIX_AMT.
          l_LC_TR_VAL = i_non_subc-LC_VAR_AMT + l_LC_COGS +
                        i_non_subc-LC_UTP_AMT.
        else.
          l_gc_cogs  = i_non_subc-gc_trfix_amt + i_non_subc-gc_lofix_amt.
          l_gc_tr_val = i_non_subc-gc_var_amt + i_non_subc-gc_cogs +
                        i_non_subc-gc_utp_amt.
        endif.
        at end of matnr.
          l_flg = 'X'.
        endat.
        if l_flg eq 'X'.
          move: i_non_subc-matnr to wa_output-matnr,
                i_non_subc-werks to wa_output-werks,
                i_non_subc-lbkum to wa_output-totstk,
                i_non_subc-meins to wa_output-meins,
                i_non_subc-bukrs to wa_output-bukrs,
                i_non_subc-bklas to wa_output-bklas,
                i_non_subc-lc_curtp to wa_output-lc_curtp,
                i_non_subc-lc_currency to wa_output-lc_currency,
                i_non_subc-gc_curtp to wa_output-gc_curtp,
                i_non_subc-gc_currency to wa_output-gc_currency.
          if g_curr eq '10'.
            move l_lc_tr_val to wa_output-totval.
          else.
            move  l_gc_tr_val to wa_output-totval.
          endif.
             i_non_subc-mlast to wa_output-mlast.
          select single maktx
                    from makt
                    into l_maktx
                    where matnr eq i_non_subc-matnr and
                          spras eq sy-langu.
          if sy-subrc eq 0.
            move l_maktx to wa_output-maktx.
            append wa_output to gt_output .
            clear: wa_output,l_flg,l_lc_tr_val,l_lc_cogs,
                   l_gc_cogs,l_gc_tr_val.
          endif.
        endif.
      ENDLOOP.
    ENDFORM.                    " f_data_selection
    *&      Module  STATUS_0100  OUTPUT
          text
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'ZPF_STATUS'.
      SET TITLEBAR 'ZTITLE'.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&      Module  alv_display  OUTPUT
          text
    MODULE alv_display OUTPUT.
      data: total type ref to data,
            subtotal1 type ref to data.
    field-symbols <total> like gt_output .
    field-symbols <subtotal1> like gt_output.
      if g_grid1 is initial.
        perform f_create_objects.
        perform f_build_field_catalog changing gt_fieldcat.
        perform f_prepare_layout changing gs_layout.
        perform f_sort_sub_total changing  gt_sort.
        CALL METHOD G_GRID1->GET_SORT_CRITERIA
          IMPORTING
            ET_SORT = gt_sort[]  .
       CALL METHOD g_grid1->GET_SUBTOTALS
         IMPORTING
           EP_COLLECT00   = total
           EP_COLLECT01   = subtotal1 .
               EP_COLLECT02   =
               EP_COLLECT03   =
               EP_COLLECT04   =
               EP_COLLECT05   =
               EP_COLLECT06   =
               EP_COLLECT07   =
               EP_COLLECT08   =
               EP_COLLECT09   =
               ET_GROUPLEVELS =             .
       assign total->* to <total>.
       assign subtotal1->* to <subtotal1>.
    *ALV Display - Specify Sorting,Filtering Criteria
        if gt_output[] is initial.
          message i015.
        endif.
        CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
          EXPORTING
       I_BYPASSING_BUFFER            =
       I_BUFFER_ACTIVE               =
       I_CONSISTENCY_CHECK           =
       I_STRUCTURE_NAME              =
       IS_VARIANT                    =
       I_SAVE                        =
       I_DEFAULT                     = 'X'
            IS_LAYOUT                  = gs_layout
       IS_PRINT                      =
       IT_SPECIAL_GROUPS             =
       IT_TOOLBAR_EXCLUDING          =
       IT_HYPERLINK                  =
       IT_ALV_GRAPHICS               =
       IT_EXCEPT_QINFO               =
          CHANGING
            IT_OUTTAB                  = gt_output[]
            IT_FIELDCATALOG            = gt_fieldcat
            IT_SORT                    = gt_sort[]
       IT_FILTER                     =
          EXCEPTIONS
            INVALID_PARAMETER_COMBINATION = 1
            PROGRAM_ERROR                 = 2
            TOO_MANY_LINES                = 3
            others                        = 4        .
        IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      else.
        CALL METHOD G_GRID1->REFRESH_TABLE_DISPLAY
    EXPORTING
       IS_STABLE      =
       I_SOFT_REFRESH =
          EXCEPTIONS
            FINISHED       = 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.
      endif.
    ENDMODULE.                 " alv_display  OUTPUT
    *&      Module  USER_COMMAND_0100  INPUT
          text
    MODULE USER_COMMAND_0100 INPUT.
      case ok_code.
        when 'BACK'.
          set screen '0'.
          leave screen.
        when 'EXIT' or 'CANCEL'.
          PERFORM EXIT_PROGRAM.
      endcase.
      clear ok_code.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Form  f_create_objects
          text
    -->  p1        text
    <--  p2        text
    FORM f_create_objects.
    Creating Custom Container Objects and GRID
      IF G_grid1 IS INITIAL.
    *Creating Custom Container Instance
    Pass the name of the control that you have created on the screen
        CREATE OBJECT G_CUSTOM_CONTAINER
               EXPORTING CONTAINER_NAME = 'ZGRID_CTRL'.
    *Creating ALV Grid Instance
        CREATE OBJECT G_GRID1 EXPORTING I_PARENT = G_CUSTOM_CONTAINER.
      endif.
    ENDFORM.                    " f_create_objects
    *&      Form  f_build_field_catalog
          text
    -->  p1        text
    <--  p2        text
    FORM f_build_field_catalog changing pt_fieldcat type lvc_t_fcat.
      data ls_fcat type lvc_s_fcat.
    Val Type
      ls_fcat-fieldname = 'BUKRS'.
      ls_fcat-inttype    = 'C'.
      ls_fcat-outputlen = '4'.
      ls_fcat-coltext   = 'Val.Type'.
      ls_fcat-seltext   = 'Val.Type'.
      ls_fcat-col_pos   = '1'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    Val.Class
      ls_fcat-fieldname = 'BKLAS'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-outputlen = '4'.
      ls_fcat-coltext   = 'Val.Class'.
      ls_fcat-seltext   = 'Val.Class'.
      ls_fcat-col_pos   = '2'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Plant
      ls_fcat-fieldname = 'WERKS'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-outputlen = '4'.
      ls_fcat-coltext   = 'Plant'.
      ls_fcat-seltext   = 'Plant'.
      ls_fcat-col_pos   = '3'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Material
      ls_fcat-fieldname = 'MATNR'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-outputlen = '18'.
      ls_fcat-coltext   = 'Material'.
      ls_fcat-seltext   = 'Material'.
      ls_fcat-col_pos   = '4'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Description
      ls_fcat-fieldname = 'MAKTX'.
      ls_fcat-TABNAME = 'MAKT'.
      ls_fcat-outputlen = '40'.
      ls_fcat-coltext   = 'Description'.
      ls_fcat-seltext   = 'Description'.
      ls_fcat-col_pos   = '5'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Price Control
      ls_fcat-fieldname = 'VPRSV'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-outputlen = '1'.
      ls_fcat-coltext   = 'Price Control'.
      ls_fcat-seltext   = 'Price Control'.
      ls_fcat-col_pos   = '6'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Price Determination
      ls_fcat-fieldname = 'MLAST'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-outputlen = '1'.
      ls_fcat-coltext   = 'Price Determination'.
      ls_fcat-seltext   = 'Price Determination'.
      ls_fcat-col_pos   = '7'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    Total Stock
      ls_fcat-fieldname = 'TOTSTK'.
      ls_fcat-REF_TABLE = 'YGFMLINV'.
      ls_fcat-REF_FIELD = 'LBKUM'.
      ls_fcat-QFIELDNAME = 'MEINS'.
      ls_fcat-IFIELDNAME = 'YGFMLINV'.
      ls_fcat-coltext   = 'Total Stock'.
      ls_fcat-seltext   = 'Total Stock'.
      ls_fcat-col_pos   = '8'.
      ls_fcat-do_sum = 'X'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    Std. Price
      ls_fcat-fieldname = 'STDPRICE'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-REF_TABLE = 'YGFMLINV'.
      ls_fcat-ref_field = 'LC_MVP_PRC'.
      ls_fcat-coltext = 'Std.Price'.
      ls_fcat-col_pos   = '9'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
      if g_curr eq '10'.
    Currency Type
        ls_fcat-fieldname = 'LC_CURTP'.
        ls_fcat-TABNAME = 'YGFMLINV'.
        ls_fcat-coltext = 'Currency Type'.
        ls_fcat-seltext = 'Currency Type'.
        ls_fcat-col_pos = '10'.
        append ls_fcat to pt_fieldcat.
        clear ls_fcat.
      else.
    Currency Type
        ls_fcat-fieldname = 'GC_CURTP'.
        ls_fcat-TABNAME = 'YGFMLINV'.
        ls_fcat-coltext = 'Currency Type'.
        ls_fcat-seltext = 'Currency Type'.
        ls_fcat-col_pos = '10'.
        append ls_fcat to pt_fieldcat.
        clear ls_fcat.
      endif.
    *Per Unit Price
      ls_fcat-fieldname = 'STDPRICE'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-ref_table = 'YGFMLINV'.
      ls_fcat-ref_field = 'LC_MVP_PRC'.
    ls_fcat-currency  = 'LC_CURRENCY'.
      ls_fcat-coltext = 'Per.Unit.Price'.
      ls_fcat-seltext = 'Per.Unit.Price'.
      ls_fcat-col_pos   = '11'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    Quantity Measurement
      ls_fcat-fieldname = 'MEINS'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-coltext = 'Base Unit'.
      ls_fcat-seltext = 'Base Unit'.
      ls_fcat-col_pos = '12'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Total Value
      ls_fcat-fieldname = 'TOTVAL'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-currency  = 'GC_CURRENCY'.
      ls_fcat-coltext   = 'Total Value'.
      ls_fcat-seltext   = 'Total Value'.
      ls_fcat-col_pos   = '13'.
      ls_fcat-do_sum = 'X'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Value/period
      ls_fcat-fieldname = 'TOTVAL'.
      ls_fcat-TABNAME = 'YGFMLINV'.
      ls_fcat-currency  = 'GC_CURRENCY'.
      ls_fcat-coltext   = 'Value/Period'.
      ls_fcat-seltext   = 'Value/Period'.
      ls_fcat-col_pos   = '14'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Vendor
      ls_fcat-fieldname = 'LIFNR'.
      ls_fcat-TABNAME = 'LFA1'.
      ls_fcat-coltext   = 'Vendor'.
      ls_fcat-seltext   = 'Vendor'.
      ls_fcat-col_pos   = '15'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Vendor Description
      ls_fcat-fieldname = 'NAME1'.
      ls_fcat-TABNAME = 'LFA1'.
      ls_fcat-coltext = 'Vend.Desc'.
      ls_fcat-seltext = 'Vend.Desc'.
      ls_fcat-col_pos   = '16'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    *Special Stock Indicator
      ls_fcat-fieldname = 'SOBKZ'.
      ls_fcat-TABNAME = 'MSLBH'.
      ls_fcat-coltext = 'Spl.Stock Ind'.
      ls_fcat-seltext = 'Spl.Stock Ind'.
      ls_fcat-col_pos   = '17'.
      append ls_fcat to pt_fieldcat.
      clear ls_fcat.
    ENDFORM.                    " f_build_field_catalog
    *&      Form  f_prepare_layout
          text
         <--P_GS_LAYOUT  text
    FORM f_prepare_layout CHANGING P_GS_LAYOUT type lvc_s_layo.
      p_gs_layout-zebra = 'X'.
      p_gs_layout-grid_title = 'Material List: Prices and Inventory Values'.
      p_gs_layout-smalltitle ='X'.
    p_gs_layout-no_totline = 'X'.
      p_gs_layout-no_totarr = 'X'.
    p_gs_layout-no_totexp = 'X'.
    p_gs_layout-totals_bef = 'X'.
    ENDFORM.                    " f_prepare_layout
    *&      Form  f_profit_center_select
    Validate the Profit Center Groups with Profit Center
    -->  p1        text
    <--  p2        text
    FORM f_profit_center_select.
      DATA:V_RETCODE LIKE BAPIRET2,
           V_GROUPNAME LIKE  BAPICO_GROUP-GROUPNAME ,
           p_kokrs like CEPC-KOKRS  value 'DU01',
           I_HIERARCHYNODES LIKE BAPISET_HIER OCCURS 0 WITH HEADER LINE,
           I_PRCTR LIKE BAPI1116_VALUES OCCURS 0 WITH HEADER LINE.
      V_GROUPNAME = P_PCTRGP.
      CALL FUNCTION 'BAPI_PROFITCENTERGRP_GETDETAIL'
           EXPORTING
                CONTROLLINGAREA = P_KOKRS
                GROUPNAME       = V_GROUPNAME
           IMPORTING
                RETURN          = V_RETCODE
           TABLES
                HIERARCHYNODES  = I_HIERARCHYNODES
                HIERARCHYVALUES = I_PRCTR.
      LOOP AT I_PRCTR.
        R_PROFIT_CTR-LOW = I_PRCTR-VALFROM.
        R_PROFIT_CTR-HIGH = I_PRCTR-VALTO.
        R_PROFIT_CTR-SIGN = 'I'.
        R_PROFIT_CTR-OPTION = 'BT'.
        APPEND R_PROFIT_CTR.
      ENDLOOP.
    ENDFORM.                    " f_profit_center_select
    *&      Form  f_sort_sub_total
          text
         <--P_GT_SORT  text
    FORM f_sort_sub_total CHANGING P_GT_SORT.
      DATA: ls_sort TYPE lvc_s_sort occurs 0 with header line.
    ls_sort-spos = '1' .
      ls_sort-fieldname = 'MATNR'.
      ls_sort-up = 'X'.
      ls_sort-subtot = 'X'.
      ls_sort-expa ='X'.
      ls_sort-group = 'UL'.
      append ls_sort TO gt_sort.
    ENDFORM.                    " f_sort_sub_total
    *&      Form  EXIT_PROGRAM
          text
    -->  p1        text
    <--  p2        text
    FORM EXIT_PROGRAM.
      data: g_repid like sy-repid.
      g_repid = sy-repid.
      CALL METHOD G_CUSTOM_CONTAINER->FREE.
      CALL METHOD CL_GUI_CFW=>FLUSH.
      IF SY-SUBRC NE 0.
    add your handling, for example
        CALL FUNCTION 'POPUP_TO_INFORM'
             EXPORTING
                  TITEL = G_REPID
                  TXT2  = SY-SUBRC
                  TXT1  = 'Error in Flush'(009).
      ENDIF.
      LEAVE PROGRAM.
    ENDFORM.                    " EXIT_PROGRAM

  • Reg..ALV using classes

    i have displayed a ALV report with a push button 'HST'.
    When i select a particular line(vbeln) and click on pushbutton 'HST' it has to display me a interactive report based on the condition vbeln and posnr.
    can anyone help me with the detail code using classes..
    answers will be rewarded....
    regards,
    kumar

    Hi,
    Class ALV Specification
    Classes used:
    CL_GUI_ALV_GRID
    Example of ALV using Classes
    DATA: lcl_alv TYPE REF TO cl_gui_alv_grid,
          t_flights TYPE STANDARD TABLE OF FLIGHTS.
    SELECT * FROM flights INTO TABLE t_flights.
    CREATE OBJECT lcl_alv
        EXPORTING I_PARENT = cl_gui_container=>screen0.
    CALL METHOD lcl_alv->set_table_for_first_display
        EXPORTING
           I_STRUCTURE_NAME = 'FLIGHTS'
        CHANGING
           IT_OUTTAB = t_flights.
    CALL SCREEN 100.
    Example Details
    This is a simple example of the class ALV, we do not need to create, in this case, a field catalog because we are using the whole table of FLIGHTS and we will show all the fields that this table contains, we do this at the I_STRUCTURE_NAME = 'FLIGHTS' statement.
    The CL_GUI_ALV_GRID constructor needs the I_PARENT parameter to define where it will be show, in the example we set the entire screen to place the ALV.
    reward if helpful

  • List display for ALV using class and methods

    Hi friends
    I want the list display for the ALV using Class and methods
    which class and methods i can use.
    Here we can't use the REUSE_ALV_LIST_DISPLAY and also GRID
    I was done GRID display using class and methods but i want only list display for using class.
    plz Give me sample code of list display not for grid.
    Thanks
    Nani.

    hi
    please check with this code...
    declare grid and container.
    DATA : o_alvgrid TYPE REF TO cl_gui_alv_grid,
    o_dockingcontainer TYPE REF TO cl_gui_docking_container,
    i_fieldcat TYPE lvc_t_fcat,"fieldcatalogue
    w_layout TYPE lvc_s_layo."layout
    If any events like double click,etc., are needed we have to add additional functionality.
    call the screen in program.
    Then , create the container as follows
    IF cl_gui_alv_grid=>offline( ) IS INITIAL.
    CREATE OBJECT o_dockingcontainer
    EXPORTING
    ratio = '95'
    EXCEPTIONS
    cntl_error = 1
    cntl_system_error = 2
    create_error = 3
    lifetime_error = 4
    lifetime_dynpro_dynpro_link = 5
    others = 6.
    ENDIF.
    CREATE OBJECT o_alvgrid
    EXPORTING
    i_parent = o_dockingcontainer.
    Build the fieldcatalog
    create a output structure in SEll for the ALV output
    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
    i_structure_name = <alv output>
    CHANGING
    ct_fieldcat = i_fieldcat[]
    EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.
    IF sy-subrc <> 0.
    MESSAGE i030."Error in building the field catalogue
    LEAVE LIST-PROCESSING.
    ENDIF.
    *If you need to modify the field catalog,modify it using field sysmbols
    *setting the layout
    w_layout-grid_title = title.
    w_layout-zebra = 'X'.
    then displaying the output
    CALL METHOD o_alvgrid->set_table_for_first_display
    EXPORTING
    i_save = 'A'
    is_layout = w_layout
    CHANGING
    it_outtab = i_output[]
    it_fieldcatalog = i_fieldcat[]
    EXCEPTIONS
    invalid_parameter_combination = 1
    program_error = 2
    too_many_lines = 3
    OTHERS = 4.
    IF sy-subrc <> 0.
    MESSAGE i032 ."Error in Displaying
    LEAVE LIST-PROCESSING.
    ENDIF.
    *After that in PAI of the screen, you need to free the *object while going back from the screen(according to *your requirement)
    MODULE user_command_9001 INPUT.
    CASE sy-ucomm.
    WHEN 'EXIT' OR 'CANC'.
    PERFORM f9600_free_objects:
    USING o_alvgrid 'ALV' text-e02,
    USING o_dockingcontainer 'DOCKING'
    text-e01.
    LEAVE PROGRAM.
    ENDCASE.
    ENDMODULE. " USER_COMMAND_9001 INPUT
    *in the program, write the follwoing code
    FORM f9600_free_objects USING pobject
    value(ptype)
    value(ptext).
    DATA: l_objectalv TYPE REF TO cl_gui_alv_grid.
    CASE ptype.
    WHEN 'ALV'.
    l_objectalv = pobject.
    IF NOT ( l_objectalv IS INITIAL ).
    CALL METHOD l_objectalv->free
    EXCEPTIONS
    cntl_error = 1
    cntl_system_error = 2
    OTHERS = 3.
    CLEAR: pobject, l_objectalv.
    PERFORM f9700_error_handle USING ptext.
    ENDIF.
    WHEN 'DOCKING'.
    DATA: lobjectdock TYPE REF TO cl_gui_docking_container.
    lobjectdock = pobject.
    IF NOT ( lobjectdock IS INITIAL ).
    CALL METHOD lobjectdock->free
    EXCEPTIONS
    cntl_error = 1
    cntl_system_error = 2
    OTHERS = 3.
    CLEAR: pobject, lobjectdock.
    PERFORM f9700_error_handle USING ptext.
    ENDIF.
    WHEN 'CONTAINER'.
    DATA: lobjectcontainer TYPE REF TO cl_gui_container.
    lobjectcontainer = pobject.
    IF NOT ( lobjectcontainer IS INITIAL ).
    CALL METHOD lobjectcontainer->free
    EXCEPTIONS
    cntl_error = 1
    cntl_system_error = 2
    OTHERS = 3.
    CLEAR: pobject, lobjectcontainer.
    PERFORM f9700_error_handle USING ptext.
    ENDIF.
    WHEN OTHERS.
    sy-subrc = 1.
    PERFORM f9700_error_handle USING
    text-e04.
    ENDCASE.
    ENDFORM. " f9600_free_objects
    FORM f9700_error_handle USING value(ptext).
    IF sy-subrc NE 0.
    CALL FUNCTION 'POPUP_TO_INFORM'
    EXPORTING
    titel = text-e03
    txt2 = sy-subrc
    txt1 = ptext.
    ENDIF.
    endform.
    also check with this
    http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCSRVALV/BCSRVALV.pdf
    Hope this helps
    if it helped, you can acknowledge the same by rewarding
    regards
    dinesh

  • Provide me Helpful Links/Documents on ALV using Classes

    Dear all,
    Could you guys provide me with some Helpful Links/Documents on ALV using Classes.
    Thanks in Advance,
    Joseph Reddy

    Hi,
    Check these out:
    Check this for basic concepts of OOPS
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap code samples/abap objects/abap code sample to learn basic concept of object-oriented programming.doc
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap code samples/alv grid/abap code sample to display data in alv grid using object oriented programming.doc
    Tabstrip
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap code samples/alv grid/abap code sample for tab strip in alv.pdf
    Editable ALV
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap code samples/alv grid/abap code sample to edit alv grid.doc
    Tree
    http://www.sapdevelopment.co.uk/reporting/alv/alvtree/alvtree_usrint.htm
    General Tutorial for OOPS
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/an easy reference for alv grid control.pdf
    http://www.geocities.com/mpioud/Abap_programs.html
    Best Regards,
    Anjali

  • Program using class "cl_salv_table"

    Hi Experts,
    I am new to this class (cl_salv_table). I wrote a program with general ABAP code. But, according to my standard I should use standard ALV factory class i.e., 'CL_SALV_TABLE'.  I wouls appreciate if anybody could send me the code using this class. Here is the code which I have written.
    REPORT zrgae_acctquery
            NO STANDARD PAGE HEADING
            LINE-SIZE 190
            LINE-COUNT 65
            MESSAGE-ID zrga.
    Program Title  : SAP Account Coding Block Transaction Query Program*
    Description   : This program loads the legacy General Ledger                *
                          account monthly net activity into the SAP-FI                   *
                          system using LSMW.  This conversion pertains to           *
                          companyu2019s GL account balances beginning with              *
                          FY07 YE, posting monthly net changes in the                 *
                         accounts for FY2008 and FY2009 through go-live.             *
    Run Frequency: The Z-transaction must be available at any time             *
                    an end user requires the conversion information.                    *
                    T A B L E  D E C L A R A T I O N                   
    TABLES: ztt_rga_xreft.
                    D A T A  D E C L A R A T I O N                      
    DATA: group_id(3) TYPE c,
          l_line TYPE i.
                    I N T E R N A L  T A B L E S                        
    TYPES: BEGIN OF lty_ztt_rga_xreft,
           ctacct TYPE ztt_rga_xreft-ctacct,
           ctrc01 TYPE ztt_rga_xreft-ctrc01,
           ctrc02 TYPE ztt_rga_xreft-ctrc02,
           ctrc03 TYPE ztt_rga_xreft-ctrc03,
           ctrc04 TYPE ztt_rga_xreft-ctrc04,
           ctrc05 TYPE ztt_rga_xreft-ctrc05,
           ctrc06 TYPE ztt_rga_xreft-ctrc06,
           ctrc07 TYPE ztt_rga_xreft-ctrc07,
           ctrc08 TYPE ztt_rga_xreft-ctrc08,
           bukrs TYPE ztt_rga_xreft-bukrs,
           prctr TYPE ztt_rga_xreft-prctr,
           kostl TYPE ztt_rga_xreft-kostl,
           saknr TYPE ztt_rga_xreft-saknr,
           aufnr TYPE ztt_rga_xreft-aufnr,
           sap_offset TYPE ztt_rga_xreft-sap_offset,
           END OF lty_ztt_rga_xreft.
    DATA: lt_data TYPE STANDARD TABLE OF lty_ztt_rga_xreft,       lwa_data TYPE lty_ztt_rga_xreft.
               S E L E C T I O N   S C R E E N   D E F I N I T I O N S  *
    SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
    PARAMETERS: p_lgsap RADIOBUTTON GROUP b1 USER-COMMAND rad DEFAULT 'X',
                p_saplg RADIOBUTTON GROUP b1.
    SELECTION-SCREEN END OF BLOCK a1.
    SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK a2 WITH FRAME TITLE text-002. "ACC
    SELECT-OPTIONS: s_lccode FOR ztt_rga_xreft-ctrc01 MODIF ID acc,
                    s_ldiv FOR ztt_rga_xreft-ctrc02 MODIF ID acc,
                    s_lreg FOR ztt_rga_xreft-ctrc03 MODIF ID acc,
                    s_lloc FOR ztt_rga_xreft-ctrc04 MODIF ID acc,
                    s_lcctr FOR ztt_rga_xreft-ctrc05 MODIF ID acc,
                    s_lacct FOR ztt_rga_xreft-ctrc06 MODIF ID acc,
                    s_lsacct FOR ztt_rga_xreft-ctrc07 MODIF ID acc.
    SELECTION-SCREEN END OF BLOCK a2.
    SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK a3 WITH FRAME TITLE text-003. "ALL
    SELECT-OPTIONS: s_bukrs FOR ztt_rga_xreft-bukrs MODIF ID all,
                    s_prctr FOR ztt_rga_xreft-prctr MODIF ID all,
                    s_kostl FOR ztt_rga_xreft-kostl MODIF ID all,
                    s_saknr FOR ztt_rga_xreft-saknr MODIF ID all,
                    s_aufnr FOR ztt_rga_xreft-aufnr MODIF ID all.
    SELECTION-SCREEN END OF BLOCK a3.
    A T  S E L E C T I O N  S C R E E N                 
    AT SELECTION-SCREEN OUTPUT.
      CASE 'X'.
        WHEN p_saplg.
          group_id = 'ACC'.
          SET CURSOR FIELD 'S_BUKRS-LOW'.
        WHEN p_lgsap.
          group_id = 'ALL'.
          SET CURSOR FIELD 'S_LCCTR-LOW'.
      ENDCASE.
      LOOP AT SCREEN.
        IF screen-group1 = group_id.
          screen-input = 0.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
                    S T A R T  O F  S E L E C T I O N                   
    START-OF-SELECTION.
      CLEAR l_line.
      IF p_lgsap = 'X'.  " If legacy input filled
               INFINIUM CASE-I VALIDATIONS & OUTPUT                                *
               PASSING INFINIUM 'COST CENTER','ACCOUNT',& 'SUB ACCT'    *
        IF s_lcctr-low NE ' ' AND s_lacct-low NE ' ' AND s_lsacct-low NE ' '.
          SELECT ctrc01
                 ctrc02
                 ctrc03
                 ctrc04
                 ctrc05
                 ctrc06
                 ctrc07
                 ctrc08
                 bukrs
                 prctr
                 kostl
                 saknr
                 aufnr
                 sap_offset
                 FROM ztt_rga_xreft INTO TABLE lt_data
                                    WHERE ctrc05 IN s_lcctr
                                    AND ctrc06 IN s_lacct
                                    AND ctrc07 IN s_lsacct.
          DESCRIBE TABLE lt_data LINES l_line.
          IF l_line < 0.
            MESSAGE e001(zrga) with 'Cost Ctr,Acct,SubAcct are not valid.pl check'.
          ENDIF.
        INFINIUM CASE-II VALIDATIONS & OUTPUT                    *
        PASSING INFINIUM 'COST CENTER'&'ACCOUNT'                 *
        ELSEIF s_lcctr-low NE ' ' AND s_lacct-low NE ' '
             AND s_lsacct-low EQ ' '.
          SELECT ctrc01
                 ctrc02
                 ctrc03
                 ctrc04
                 ctrc05
                 ctrc06
                 ctrc07
                 ctrc08
                 bukrs
                 prctr
                 kostl
                 saknr
                 aufnr
                 sap_offset
              FROM ztt_rga_xreft INTO TABLE lt_data WHERE ctrc05 IN s_lcctr
                                                     AND ctrc06 IN s_lacct.
          DESCRIBE TABLE lt_data LINES l_line.
          IF l_line < 0.
            MESSAGE e002(zrga) with 'Cost Center,Account are not valid...pl check'.
          ENDIF.
        ENDIF.
              INFINIUM CASE-III VALIDATIONS & OUTPUT                   *
               PASSING INFINIUM 'COMPANY CODE'&'ACCOUNT'                *
      ELSEIF s_lccode-low NE ' ' AND s_lacct-low NE ' '.
        SELECT ctrc01
               ctrc02
               ctrc03
               ctrc04
               ctrc05
               ctrc06
               ctrc07
               ctrc08
               bukrs
               prctr
               kostl
               saknr
               aufnr
               sap_offset
            FROM ztt_rga_xreft INTO TABLE lt_data WHERE ctrc01 IN s_lccode
                                                  AND ctrc06 IN s_lacct.
        DESCRIBE TABLE lt_data LINES l_line.
        IF l_line < 0.
        MESSAGE e003(zrga) with 'Company code,Acct are not valid.pl check'.
        ENDIF.
      ELSE. " If SAP input filled
               SAP CASE-I VALIDATIONS & OUTPUT                          *
               PASSING SAP 'COST CENTER','ACCOUNT'&'INTERNAL ORDER'     *
        IF s_kostl-low NE ' ' AND s_saknr-low NE ' ' AND s_aufnr-low NE ' '.
          SELECT ctrc01
                 ctrc02
                 ctrc03
                 ctrc04
                 ctrc05
                 ctrc06
                 ctrc07
                 ctrc08
                 bukrs
                 prctr
                 kostl
                 saknr
                 aufnr
                 sap_offset
              FROM ztt_rga_xreft INTO TABLE lt_data WHERE kostl IN s_kostl
                                               AND saknr IN s_saknr
                                               AND aufnr IN s_aufnr.
          DESCRIBE TABLE lt_data LINES l_line.
          IF l_line < 0.
            MESSAGE e004(zrga) with 'Cost Ctr,Acct,Int order are not valid...pl check'.
                  ENDIF.
               SAP CASE-II VALIDATIONS & OUTPUT                         *
               PASSING SAP 'COST CENTER'&'ACCOUNT'                      *
    ELSEIF s_kostl-low NE ' ' AND s_saknr-low NE ' ' AND s_aufnr-low EQ ' '.
          SELECT ctrc01
                 ctrc02
                 ctrc03
                 ctrc04
                 ctrc05
                 ctrc06
                 ctrc07
                 ctrc08
                 bukrs
                 prctr
                 kostl
                 saknr
                 aufnr
                 sap_offset
                 FROM ztt_rga_xreft INTO TABLE lt_data WHERE kostl IN s_kostl
                                          AND saknr IN s_saknr.
          DESCRIBE TABLE lt_data LINES l_line.
          IF l_line < 0.
          MESSAGE e005(zrga) with 'Cost Ctr,Acct are not valid...pl check'.
          ENDIF.
        ENDIF.
      ENDIF.
                    O U T P U T                                         
      IF p_lgsap = 'X'.  " If legacy input filled
        WRITE:/2 'Infinium Company',       40 s_lccode-low,
              /2 'Infinium Division',      40 s_ldiv-low,
              /2 'Infinium Region',        40 s_lreg-low,
              /2 'Infinium Location',      40 s_lloc-low,
              /2 'Infinium Cost center',   40 s_lcctr-low,
              /2 'Infinium Account',       40 s_lacct-low,
              /2 'Infinium Sub-account',   40 s_lsacct-low.
      ELSE. "If SAP input filled
        WRITE:/2 'SAP Company',            40 s_bukrs-low,
              /2 'SAP Cost center',        40 s_kostl-low,
              /2 'SAP Profit center',      40 s_prctr-low,
              /2 'SAP Account',            40 s_saknr-low,
              /2 'SAP order',              40 s_aufnr-low.
      ENDIF.
      WRITE:/ sy-uline(190).
      FORMAT COLOR COL_HEADING ON.
      WRITE:/1 sy-vline,
             2 'Infinium Company',
             17 sy-vline,
             18 'Infinium Division',
             37 sy-vline,
             38 'Infinium Region',
             57 sy-vline,
             58 'Infinium Location',
             77 sy-vline,
             78 'Infinium Cost Center',
             97 sy-vline,
             98 'Infinium Account',
             114 sy-vline,
             115 'Infinium Sub Account',
             134 sy-vline.
      FORMAT COLOR COL_HEADING OFF.
      FORMAT COLOR COL_POSITIVE ON.
      WRITE: 135 'SAP Company',
             144 sy-vline,
             145 'SAP Profit Center',
             154 sy-vline,
             155 'SAP Cost Center',
             164 sy-vline,
             165 'SAP Account',
             174 sy-vline,
             175 'SAP Order',
             190 sy-vline.
      FORMAT COLOR COL_POSITIVE OFF.
      WRITE:/1 sy-vline.
      WRITE:/ sy-uline(190).
      WRITE:/ sy-uline(190).
      LOOP AT lt_data into lwa_data.
        FORMAT COLOR COL_HEADING ON.
        WRITE:/1 sy-vline,
               2 lwa_data-ctrc01,
               17 sy-vline,
               18 lwa_data-ctrc02,
               37 sy-vline,
               38 lwa_data-ctrc03,
               57 sy-vline,
               58 lwa_data-ctrc04,
               77 sy-vline,
               78 lwa_data-ctrc05,
               97 sy-vline,
               98 lwa_data-ctrc06,
               114 sy-vline,
               115 lwa_data-ctrc07,
               134 sy-vline.
        FORMAT COLOR COL_HEADING OFF.
        FORMAT COLOR COL_POSITIVE ON.
        WRITE: 135 lwa_data-bukrs,
               144 sy-vline,
               145 lwa_data-prctr,
               154 sy-vline,
               155 lwa_data-kostl,
               164 sy-vline,
               165 lwa_data-saknr,
               174 sy-vline,
               175 lwa_data-aufnr,
               190 sy-vline.
        FORMAT COLOR COL_POSITIVE OFF.
        WRITE:/ sy-uline(190).
        append lwa_data to lt_data.
        clear lwa_data.
      ENDLOOP.

    HI nani,
    welcome
    This is a sample program to illustrate several techniques:
    use of dynamic selections
    persistent data stored into cluster INDX
    data definition at runtime
    display internal table using SALV class
    Just copy the code into a new program, create include for events, then copy status STANDARD from program SAPLSALV.
    u have to add the SAVE function code to the disk button. It allow you to save modifications to the database.
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    *& Report  zkarthik_update
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    report zkarthik_update.
      Data definition
    type-pools: rsds.
    data: is_x030l   type x030l,
    it_x031l   type table of x031l,
    is_x031l   type x031l.
    data: w_selid    type rsdynsel-selid,
    it_tables  type table of rsdstabs,
    is_tables  type rsdstabs,
    it_fields  type table of rsdsfields,
    it_expr    type rsds_texpr,
    it_ranges  type rsds_trange,
    it_where   type rsds_twhere,
    is_where   type rsds_where,
    w_active   type i.
    data: w_repid    type sy-repid,
    w_dynnr    type sy-dynnr,
    wt_dynp    type table of dynpread,
    ws_dynp    type dynpread.
    data: it_content type ref to data,
    is_content type ref to data.
    data: w_okcode   type sy-ucomm.
    data: w_fdkey    type x value u201801u2032.
    data: w_akey     type indx-srtfd,
    w_rkey     type indx-srtfd,
    w_fkey     type indx-srtfd.
    Include to handle events on ALV display screen
    include zbc_query_events.
    field-symbols: <itab> type standard table,
    <irec> type any.
    Macros
    define table_error.
    message e398(00) with u2018Tableu2019 p_table &1.
    end-of-definition.
    define fixed_val.
    assign component is_x031l-fieldname of structure <irec> to <fld>.
    if sy-subrc = 0.
    <fld> = &1.
    endif.
    end-of-definition.
    Selection screen
    selection-screen: begin of block b01 with frame.
    parameters: p_table type tabname obligatory                    u201Ctable
    memory id dtb
    matchcode object dd_dbtb_16.
    selection-screen: begin of line,
    pushbutton 33(20) selopt user-command sel,
    comment    55(15) selcnt,
    end of line.
    selection-screen: skip.
    parameters: p_field type fieldname,                            u201Cfield
    p_value type text132.                              u201Cvalue
    selection-screen: end of block b01,
    skip,
    begin of block b02 with frame.
    parameters: p_displ type c as checkbox default u2018Xu2019,            u201Cdisplay
    p_systm type c as checkbox.                        u201Csystem
    selection-screen: end of block b02.
    Initialization
    initialization.
    move u2018@4G@ Filter recordsu2019 to selopt.
    ws_dynp-fieldname = u2018P_TABLEu2019.
    append ws_dynp to wt_dynp.
    Get dynamic selection from cluster
    w_akey(1) = u2018Au2019.
    w_akey+1(12) = sy-uname.
    import w_active  from database indx(xy) id w_akey.
    w_rkey(1) = u2018Ru2019.
    w_rkey+1(12) = sy-uname.
    import it_expr   from database indx(xy) id w_rkey.
    w_rkey(1) = u2018Fu2019.
    w_rkey+1(12) = sy-uname.
    import it_fields from database indx(xy) id w_fkey.
    PBO
    at selection-screen output.
    if w_active is initial.
    clear: selcnt.
    else.
    write w_active to selcnt left-justified.
    endif.
    PAI
    at selection-screen.
    if p_table ne is_x030l-tabname.
    perform f_init_table.
    endif.
    if sy-ucomm = u2018SELu2019.
    if w_selid is initial.
    perform f_init_selections.
    endif.
      Display free selection dialog
    call function u2018FREE_SELECTIONS_DIALOGu2019
    exporting
    selection_id            = w_selid
    title                   = u2018Selectionu2019
    status                  = 1
    as_window               = u2018Xu2019
    importing
    expressions             = it_expr
    field_ranges            = it_ranges
    number_of_active_fields = w_active
    tables
    fields_tab              = it_fields
    exceptions
    others                  = 1.
      Write dynamic selection to cluster
    w_akey(1) = u2018Au2019.
    w_akey+1(12) = sy-uname.
    export w_active  to database indx(xy) id w_akey.
    w_rkey(1) = u2018Ru2019.
    w_rkey+1(12) = sy-uname.
    export it_expr   to database indx(xy) id w_rkey.
    w_rkey(1) = u2018Fu2019.
    w_rkey+1(12) = sy-uname.
    export it_fields to database indx(xy) id w_fkey.
    endif.
    if p_field is not initial.
    read table it_x031l into is_x031l
    with key fieldname = p_field.
    if sy-subrc = 0.
    if is_x031l-flag1 o w_fdkey.
    message e129(53) with p_field p_table.
    endif.
    else.
    message e804(5g) with p_field p_table.
    endif.
    endif.
    at selection-screen on value-request for p_field.
    w_repid = sy-repid.
    w_dynnr = sy-dynnr.
    call function u2018DYNP_VALUES_READu2019
    exporting
    dyname     = w_repid
    dynumb     = w_dynnr
    tables
    dynpfields = wt_dynp
    exceptions
    others     = 1.
    if sy-subrc = 0.
    read table wt_dynp into ws_dynp index 1.
    p_table = ws_dynp-fieldvalue.
    call function u2018F4_DD_TABLE_FIELDSu2019
    exporting
    table  = p_table
    importing
    result = p_field.
    endif.
    Start of processing
    start-of-selection.
    perform f_create_table using p_table.
    perform f_select_table.
    perform f_modify_table.
    perform f_display_table using <itab>.
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    *&      Form  f_init_table
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_init_table.
      Prepare free selection on table
    perform f_table_def using p_table.
    refresh it_tables.
    is_tables-prim_tab = p_table.
    append is_tables to it_tables.
    clear: w_selid.
    endform.                    u201Cf_init_table
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    *&      Form  f_init_selections
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_init_selections.
    Init free selection dialog
    call function u2018FREE_SELECTIONS_INITu2019
    exporting
    expressions  = it_expr
    importing
    selection_id = w_selid
    expressions  = it_expr
    tables
    tables_tab   = it_tables
    fields_tab   = it_fields
    exceptions
    others       = 1.
    endform.                    u201Cf_init_selections
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
          FORM f_table_def                                              *
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_table_def using in_tabname.
    call function u2018DDIF_NAMETAB_GETu2019
    exporting
    tabname   = p_table
    importing
    x030l_wa  = is_x030l
    tables
    x031l_tab = it_x031l
    exceptions
    others    = 1.
    if is_x030l is initial.
    table_error u2018does not exist or is not activeu2019.
    elseif is_x030l-tabtype ne u2018Tu2019.
    table_error u2018is not selectableu2019.
    endif.
    endform.                    u201Cf_table_def
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
          FORM f_create_table                                           *
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_create_table using in_tabname.
    create data it_content type table of (in_tabname).
    if sy-subrc = 0.
    assign it_content->* to <itab>.
    else.
    write: u2018Error creating internal tableu2019.
    stop.
    endif.
    endform.                    u201Cf_create_table
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
          FORM f_select_table                                           *
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_select_table.
    if w_active = 0.
    select * from (p_table)
    into corresponding fields of table <itab>.
    else.
      Selection with parameters
    call function u2018FREE_SELECTIONS_EX_2_WHEREu2019
    exporting
    expressions              = it_expr
    importing
    where_clauses            = it_where
    exceptions
    expression_not_supported = 1
    others                   = 2.
    read table it_where into is_where with key tablename = p_table.
    select * from (p_table)
    into corresponding fields of table <itab>
    where (is_where-where_tab).
    endif.
    if sy-dbcnt = 0.
    write: u2018No record selectedu2019.
    stop.
    endif.
    endform.                    u201Cf_select_table
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
          FORM f_modify_table                                           *
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_modify_table.
    field-symbols: <fld> type any.
    loop at <itab> assigning <irec>.
    if p_field is not initial.
    assign component p_field of structure <irec> to <fld>.
    if sy-subrc = 0.
    call function u2018GENERIC_CONVERSION_EXIT_INPUTu2019
    exporting
    i_tabname               = p_table
    i_fieldname             = p_field
    input_text              = p_value
    importing
    output_text             = <fld>
    exceptions
    invalid_ddic_parameters = 1
    invalid_input           = 2
    others                  = 3.
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    endif.
    endif.
    if p_systm is not initial.
        Default values for system fields
    loop at it_x031l into is_x031l.
    if is_x031l-dtyp = u2018CLNTu2019.
    fixed_val sy-mandt.
    elseif is_x031l-rollname = u2018ERDATu2019
    or is_x031l-rollname = u2018ERSDAu2019
    or is_x031l-rollname = u2018AEDATu2019
    or is_x031l-rollname = u2018LAEDAu2019.
    fixed_val sy-datum.
    elseif is_x031l-rollname = u2018ERTIMu2019
    or is_x031l-rollname = u2018AETIMu2019.
    fixed_val sy-uzeit.
    elseif is_x031l-rollname = u2018ERNAMu2019
    or is_x031l-rollname = u2018AENAMu2019.
    fixed_val sy-uname.
    endif.
    endloop.
    endif.
    endloop.
    endform.                    u201Cf_modify_table
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
          FORM f_display_table                                          *
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form f_display_table using in_table.
    data: ob_table type ref to cl_salv_table,
    ob_event type ref to cl_salv_events_table,
    cx_error type ref to cx_salv_msg.
    try.
    call method cl_salv_table=>factory
    importing
    r_salv_table = ob_table
    changing
    t_table      = in_table.
    catch cx_salv_msg into cx_error.
    exit.
    endtry.
    if p_displ is initial and
    p_field is not initial.
    call method ob_table->set_screen_status
    exporting
    report        = u2018ZBC_UPDATE_TABLEu2019
    pfstatus      = u2018STANDARDu2019
    set_functions = ob_table->c_functions_all.
    ob_event = ob_table->get_event( ).
    create object ob_appl.
    set handler ob_appl->on_user_command for ob_event.
    else.
    call method ob_table->set_screen_status
    exporting
    report        = u2018SAPLSALVu2019
    pfstatus      = u2018STANDARDu2019
    set_functions = ob_table->c_functions_all.
    endif.
    call method ob_table->display.
    endform.                    u201Cf_display_table
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    *&      Form  user_command
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    form user_command using in_command type salv_de_function.
    data: l_messg  type string,
    l_answer type c.
    data: ls_expr  type string.
    check in_command = u2018SAVEu2019.
    l_messg = u2018Overwrite field for all selected records ?u2019.
    call function u2018POPUP_TO_CONFIRMu2019
    exporting
    titlebar              = u2018Update tableu2019
    text_question         = l_messg
    default_button        = u20182u2032
    display_cancel_button = u2018 u2018
    popup_type            = u2018@1A@u2019
    importing
    answer                = l_answer
    exceptions
    text_not_found        = 1
    others                = 2.
    if l_answer = u20181u2032.
    concatenate p_field u2018= u201Du2019 into ls_expr
    separated by space.
    concatenate ls_expr p_value u201Du201D into ls_expr.
    try.
    update (p_table) set (ls_expr)
    where (is_where-where_tab).
    catch cx_sy_dynamic_osql_error.
    rollback work.
    message u2018Error during update!u2019 type u2018Iu2019.
    endtry.
    if sy-subrc = 0.
    commit work.
    endif.
    endif.
    endform.                    u201Cuser_command
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    *&  Include           ZBC_QUERY_EVENTS
    &u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014
    class lcl_handle_events definition deferred.
    data: ob_appl type ref to lcl_handle_events.
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014-
          CLASS lcl_handle_events DEFINITION
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014-
    class lcl_handle_events definition.
    public section.
    methods:
    on_user_command for event added_function of cl_salv_events
    importing e_salv_function,
    on_before_salv_function for event before_salv_function of cl_salv_events
    importing e_salv_function,
    on_after_salv_function for event after_salv_function of cl_salv_events
    importing e_salv_function,
    on_double_click for event double_click of cl_salv_events_table
    importing row column,
    on_link_click for event link_click of cl_salv_events_table
    importing row column.
    endclass.                    u201Clcl_handle_events DEFINITION
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014-
          CLASS lcl_handle_events IMPLEMENTATION
    u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014u2014-
    class lcl_handle_events implementation.
    method on_user_command.
    perform user_command in program (sy-repid) if found
    using e_salv_function.
    endmethod.                    u201Con_user_command
    method on_before_salv_function.
    perform before_function in program (sy-repid) if found
    using e_salv_function.
    endmethod.                    u201Con_before_salv_function
    method on_after_salv_function.
    perform after_function in program (sy-repid) if found
    using e_salv_function.
    endmethod.                    u201Con_after_salv_function
    method on_double_click.
    perform double_click in program (sy-repid) if found
    using row column.
    endmethod.                    u201Con_double_click
    method on_link_click.
    perform link_click in program (sy-repid) if found
    using row column.
    endmethod.                    u201Con_single_click
    endclass.                    u201Clcl_handle_events IMPLEMENTATION
    thanks
    karthik

  • Color subtotal value while using class "cl_gui_alv_tree"

    Dear All,
    Can we color subtotal value?? I am using class "cl_gui_alv_tree" to creare alv tree.  if yes please let me know how.
    Regards.
    Gyanendra

    Hi gop4sap11 ,
    Autometically subtotal is coming  coloured that is fine,but my requirment is like,,,  
    can i manually coloured subtotal value of any particular node of any column based on some condition??
    for ex: node name  : -
    af
    coloumn name : ---abc    bcd
    60       70
    can i colore 60 or 70 in red colore?
    subtotal is calculating using standard method
    call method tree1->update_calculations.  of class "cl_gui_alv_tree"
    after that , i tried to use following method
    LOOP AT lt_node_temp INTO ls_node_temp.
                      CALL METHOD TREE1->GET_OUTTAB_LINE
                           EXPORTING
                             I_NODE_KEY     = ls_node_temp-lv_p_node_key
                           IMPORTING
                             E_OUTTAB_LINE  = lv_E_OUTTAB_LINE
                             E_NODE_TEXT    = LV_E_NODE_TEXT
                             ET_ITEM_LAYOUT = LV_ET_ITEM_LAYOUT
                             ES_NODE_LAYOUT = LV_ES_NODE_LAYOUT
                           EXCEPTIONS
                             NODE_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.
                         ENDIF.
                         CALL METHOD TREE1->CHANGE_NODE
                           EXPORTING
                             I_NODE_KEY     = ls_node_temp-lv_p_node_key
                             I_OUTTAB_LINE  = lv_E_OUTTAB_LINE
                             IS_NODE_LAYOUT = LV_ES_NODE_TEMP_LAYOUT
                             IT_ITEM_LAYOUT = LV_ET_ITEM_TEMP_LAYOUT
                             I_NODE_TEXT    = LV_E_NODE_TEXT
                            I_U_NODE_TEXT  =
                           EXCEPTIONS
                             NODE_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.
                         ENDIF.
    ENDLOOP.
    this method must be called to send the data to the frontend
      call method tree1->frontend_update.

  • ALV using Classes.

    hi all,
    How to create a ALV report using Classes....?
    any links or feedback will be appreciated.
    Thanks in Advance.

    Please Don't Duplicate the same Question. and Don't Corss Post.
    close this one.

  • Using row selection in ALV using class cl_salv

    Hi,
    how to use row selection by using cl_salv classes...
    I need to display scarr table in the basic list in ALV wthout using screens and function modules...
    On multiple selection of carrid from ALV, need to display flight details from sflight.
    Also how to get the selection buttons for corresponding rows.
    NOTE : Using class cl_salv*
    Thanks,
    Siddarth

    You may need to look into Rich's example code by the following thread
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/cda3992d-0e01-0010-90b2-c4e1f899ac01

  • Capturing data changes in alv using classes

    Hello All,
    Currently am working on alv report using classes..,In this report am displaying 3 grids in the output in 3 different containers(cl_gui_custom_container)...,Am able to handle the data changes done in the grid  at the run time using event  data_changed ...,
    Now the requirement + problem is ...if i do the changes in all the grids ,,,,,and if i click(hotspot event) on any of the rows/records in any of the grids ...,, I need to be able to capture all the data changes done in all the other grids....,,
    for example:-
    if i modify some records in all the 3 grids ,,, and if I click any of the row in any of the grid at a time,,, all the changes done in all the grids should be captured.....( in simple words one click all changes )
    I tried using data_changed event....., am only able to capture the changes of the grid on which i clicked ( ie.hotspot event) but not the changes which i have done on other grids.....Pls. help me out with the possibilities
    Hope am clear..
    Thanks
    John

    Hi friend,
    METHOD handle_user_command.
      CASE e_ucomm.
    WHEN 'UPDATE'.
                 CALL METHOD r_grid->get_selected_rows
              IMPORTING
                 ET_INDEX_ROWS =
                 et_row_no     = it_rows.
    LOOP AT it_rows INTO wa_rows.
    *****modify the first container data***********
    endloop.
    CALL METHOD r_grid1->get_selected_rows
              IMPORTING
                 ET_INDEX_ROWS =
                 et_row_no     = it_rows1.
    LOOP AT it_rows1 INTO wa_rows1.
    *****modify the second container data***********
    endloop.
    CALL METHOD r_grid1->get_selected_rows
              IMPORTING
                 ET_INDEX_ROWS =
                 et_row_no     = it_rows2.
    LOOP AT it_rows2 INTO wa_rows2.
    *****modify the third container data***********
    endloop.
    endcase.
    Now we can create three container and three different grid class object but we are using same method.
    UPDATE buttton is common to all three containers.
    But one important point when u change the records in container we must select the rows then only selected rows r come to the internal table otherwise it is not come.
    CREATE OBJECT r_container
        EXPORTING
          container_name              = 'CONTAINER_1'
    CREATE OBJECT r_container2
        EXPORTING
          container_name              = 'CONTAINER_2'
    CREATE OBJECT r_container3
        EXPORTING
          container_name              = 'CONTAINER_3'
    CREATE OBJECT r_grid
        EXPORTING
          i_parent          = r_container
    CREATE OBJECT r_grid1
        EXPORTING
          i_parent          = r_container2
    CREATE OBJECT r_grid2
        EXPORTING
          i_parent          = r_container3
    NOW WE CAN CALL THE METHOD.
    CREATE OBJECT event_receiver1.
      SET HANDLER event_receiver1->handle_before_user_command FOR r_grid.
    CREATE OBJECT event_receiver1.
      SET HANDLER event_receiver1->handle_before_user_command FOR r_grid2.
    CREATE OBJECT event_receiver1.
      SET HANDLER event_receiver1->handle_before_user_command FOR r_grid3
    I thing it should be possible.But u must remeber u must select the records when u modifie in three containersBUT UPDATE button is common to all three containers.
    Regards,
    MURALII

  • Top of Page Sequential/Hierarchical ALV using Class

    Hi Experts.
    I'd like to ask some codes on how to have the top-of-page function of the Sequential ALV using the CLASS cl_salv_hierseq_table.
    Points would be rewarded.
    Thanks!
    Message was edited by:
            Jay Cruz
    Message was edited by:
            Jay Cruz

    Hi Jay,
    Plz check out this code.
    REPORT BALVHT01 NO STANDARD PAGE HEADING.
    ALV
    TYPE-POOLS: SLIS.
    DB-Table
    TABLES: SCARR, SPFLI.
    Includes
    INCLUDE .
    CONSTANTS:
    GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
    DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          GS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
          GS_KEYINFO  TYPE SLIS_KEYINFO_ALV,
          GT_SORT     TYPE SLIS_T_SORTINFO_ALV,
          GT_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV,
          GT_EVENTS   TYPE SLIS_T_EVENT.
    Data to be displayed
    DATA: BEGIN OF GT_SPFLI OCCURS 0.
            INCLUDE STRUCTURE SPFLI.
    DATA: ADD1,
          BOX,
          WERT TYPE P,
          LIGHTS.
    DATA: END OF GT_SPFLI.
    DATA: BEGIN OF GT_SCARR OCCURS 0.
            INCLUDE STRUCTURE SCARR.
    DATA: BOX,
          LIGHTS,
          EXPAND.
    DATA: END OF GT_SCARR.
    DATA: G_REPID LIKE SY-REPID.
    DATA: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
    Report Selections
    SELECT-OPTIONS CARRID FOR SCARR-CARRID.
    SELECTION-SCREEN SKIP 1.
    Parameters
    PARAMETERS: P_MAXROW TYPE I DEFAULT 50.
    SELECTION-SCREEN SKIP 1.
    Variante
    SELECTION-SCREEN BEGIN OF BLOCK 0 WITH FRAME TITLE TEXT-064.
    PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT.
    SELECTION-SCREEN END OF BLOCK 0.
    Layout
    SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-060.
    PARAMETERS:
                P_ZEBRA AS CHECKBOX DEFAULT ' ',
                P_NOCOLH AS CHECKBOX DEFAULT ' ',
                P_COLOPT AS CHECKBOX DEFAULT ' ',
                P_KEYHOT AS CHECKBOX DEFAULT ' ',
                P_NOINPT AS CHECKBOX DEFAULT ' '.
    SELECTION-SCREEN END OF BLOCK A.
    SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME TITLE TEXT-061.
    PARAMETERS:
                P_LIGHTS AS CHECKBOX DEFAULT ' ',
                P_LIGHTC AS CHECKBOX DEFAULT ' '.
    SELECTION-SCREEN END OF BLOCK B.
    SELECTION-SCREEN BEGIN OF BLOCK C WITH FRAME TITLE TEXT-062.
    PARAMETERS:
                P_TOTONL AS CHECKBOX DEFAULT ' ',
                P_TOTEXT(60),
                P_STTEXT(60).
    SELECTION-SCREEN END OF BLOCK C.
    SELECTION-SCREEN BEGIN OF BLOCK D WITH FRAME TITLE TEXT-063.
    PARAMETERS:
                P_GPCE   AS CHECKBOX DEFAULT ' ',
                P_CHKBOX AS CHECKBOX DEFAULT ' ',
                P_EXPAND AS CHECKBOX DEFAULT ' ',
                P_DETPOP AS CHECKBOX DEFAULT ' '.
    SELECTION-SCREEN END OF BLOCK D.
    DATA:       G_BOXNAM TYPE SLIS_FIELDNAME VALUE  'BOX',
                G_EXPANDNAME TYPE SLIS_FIELDNAME VALUE  'EXPAND',
                P_F2CODE LIKE SY-UCOMM       VALUE  '&ETA',
                P_LIGNAM TYPE SLIS_FIELDNAME VALUE  'LIGHTS',
                G_SAVE(1) TYPE C,
                G_TABNAME_HEADER TYPE SLIS_TABNAME,
                G_TABNAME_ITEM   TYPE SLIS_TABNAME,
              g_default(1) type c,
                G_EXIT(1) TYPE C,
                GX_VARIANT LIKE DISVARIANT,
                G_VARIANT LIKE DISVARIANT.
    INITIALIZATION.
      G_REPID = SY-REPID.
      G_TABNAME_HEADER = 'GT_SCARR'.
      G_TABNAME_ITEM   = 'GT_SPFLI'.
    define keyinfo
      CLEAR GS_KEYINFO.
      GS_KEYINFO-HEADER01 = 'CARRID'.
      GS_KEYINFO-ITEM01   = 'CARRID'.
      PERFORM E01_FIELDCAT_INIT  USING GT_FIELDCAT[].
      PERFORM E03_EVENTTAB_BUILD USING GT_EVENTS[].
      PERFORM E04_COMMENT_BUILD  USING GT_LIST_TOP_OF_PAGE[].
      PERFORM E06_T_SORT_BUILD   USING GT_SORT[].
      PERFORM E07_SP_GROUP_BUILD USING GT_SP_GROUP[].
    Schalter Varianten benutzerspezifisch/allgemein speicherbar setzen
    Set Options: save variants userspecific or general
      G_SAVE = 'A'.
      PERFORM VARIANT_INIT.
    Get default variant
      GX_VARIANT = G_VARIANT.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                I_SAVE     = G_SAVE
           CHANGING
                CS_VARIANT = GX_VARIANT
           EXCEPTIONS
                NOT_FOUND  = 2.
      IF SY-SUBRC = 0.
        P_VARI = GX_VARIANT-VARIANT.
      ENDIF.
    Process on value request
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
      PERFORM F4_FOR_VARIANT.
    PAI
    AT SELECTION-SCREEN.
      PERFORM PAI_OF_SELECTION_SCREEN.
    START-OF-SELECTION.
      PERFORM SELECTION.
    END-OF-SELECTION.
      PERFORM E05_LAYOUT_BUILD USING GS_LAYOUT.     "wg. Parameters
    Call ABAP/4 List Viewer
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
           EXPORTING
                I_CALLBACK_PROGRAM       = G_REPID
              I_CALLBACK_PF_STATUS_SET = ' '
              I_CALLBACK_USER_COMMAND  = ' '
                IS_LAYOUT                = GS_LAYOUT
                IT_FIELDCAT              = GT_FIELDCAT[]
              IT_EXCLUDING             =
                IT_SPECIAL_GROUPS        = GT_SP_GROUP[]
                IT_SORT                  = GT_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                = g_default
                I_SAVE                   = G_SAVE
                IS_VARIANT               = G_VARIANT
                IT_EVENTS                = GT_EVENTS[]
              IT_EVENT_EXIT            =
                I_TABNAME_HEADER         = G_TABNAME_HEADER
                I_TABNAME_ITEM           = G_TABNAME_ITEM
                IS_KEYINFO               = GS_KEYINFO
              IS_PRINT                 =
         IMPORTING
              E_EXIT_CAUSED_BY_CALLER  =
           TABLES
                T_OUTTAB_HEADER          = GT_SCARR
                T_OUTTAB_ITEM            = GT_SPFLI.
          FORM E01_FIELDCAT_INIT                                        *
    -->  E01_LT_FIELDCAT                                               *
    FORM E01_FIELDCAT_INIT USING E01_LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
      DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'ADD1'.
      LS_FIELDCAT-TABNAME      = G_TABNAME_ITEM.
      LS_FIELDCAT-REPTEXT_DDIC = '?'.
      LS_FIELDCAT-OUTPUTLEN    = 1.
      LS_FIELDCAT-NO_OUT       = 'X'.
      LS_FIELDCAT-INPUT        = 'X'.
      LS_FIELDCAT-SP_GROUP = 'A'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
           EXPORTING
              I_PROGRAM_NAME         =
                I_INTERNAL_TABNAME     = G_TABNAME_HEADER
                I_STRUCTURE_NAME       = 'SCARR'
              I_CLIENT_NEVER_DISPLAY = 'X'
           CHANGING
                CT_FIELDCAT            = E01_LT_FIELDCAT[].
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
           EXPORTING
              I_PROGRAM_NAME         =
                I_INTERNAL_TABNAME     = G_TABNAME_ITEM
                I_STRUCTURE_NAME       = 'SPFLI'
              I_CLIENT_NEVER_DISPLAY = 'X'
           CHANGING
                CT_FIELDCAT            = E01_LT_FIELDCAT[].
    geht am Anfang nicht !!!!
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'WERT'.
      LS_FIELDCAT-TABNAME      = G_TABNAME_ITEM.
      LS_FIELDCAT-REPTEXT_DDIC = 'Wert'(070).
      LS_FIELDCAT-OUTPUTLEN    = 4.
      LS_FIELDCAT-INTTYPE      ='P'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    ENDFORM.
          FORM E02_DATA_ADD                                             *
    -->  E02_LT_SFLIGHT                                                *
    FORM E02_DATA_ADD TABLES E02_LT_SPFLI STRUCTURE GT_SPFLI.
      LOOP AT E02_LT_SPFLI.
        IF SY-TABIX > 10.
          E02_LT_SPFLI-ADD1 = 'A'.
          E02_LT_SPFLI-BOX  = 'X'.
          E02_LT_SPFLI-LIGHTS = '3'.
        ELSE.
          IF SY-TABIX = 1.
            E02_LT_SPFLI-LIGHTS = '2'.
          ELSE.
            E02_LT_SPFLI-LIGHTS = '1'.
          ENDIF.
        ENDIF.
        E02_LT_SPFLI-WERT = SY-TABIX MOD 5.
        MODIFY E02_LT_SPFLI.
      ENDLOOP.
    ENDFORM.
          FORM E03_EVENTTAB_BUILD                                       *
    -->  E03_LT_EVENTS                                                 *
    FORM E03_EVENTTAB_BUILD USING E03_LT_EVENTS TYPE SLIS_T_EVENT.
      DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
                I_LIST_TYPE = 1
           IMPORTING
                ET_EVENTS   = E03_LT_EVENTS.
      READ TABLE E03_LT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                               INTO LS_EVENT.
      IF SY-SUBRC = 0.
        MOVE GC_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
        APPEND LS_EVENT TO E03_LT_EVENTS.
      ENDIF.
    ENDFORM.
          FORM E04_COMMENT_BUILD                                        *
    -->  E04_LT_TOP_OF_PAGE                                            *
    FORM E04_COMMENT_BUILD USING E04_LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
      DATA: LS_LINE TYPE SLIS_LISTHEADER.
    Listenüberschrift: Typ H
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
    LS_LINE-KEY:  not used for this type
      LS_LINE-INFO = TEXT-001.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
    Kopfinfo: Typ S
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'S'.
      LS_LINE-KEY  = TEXT-050.
      LS_LINE-INFO = TEXT-010.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
      LS_LINE-KEY  = TEXT-051.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
    Aktionsinfo: Typ A
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'A'.
    LS_LINE-KEY:  not used for this type
      LS_LINE-INFO = TEXT-002.
      APPEND LS_LINE TO  E04_LT_TOP_OF_PAGE.
    ENDFORM.
          FORM E05_LAYOUT_BUILD                                         *
    <->  E05_LS_LAYOUT                                                 *
    FORM E05_LAYOUT_BUILD USING E05_LS_LAYOUT TYPE SLIS_LAYOUT_ALV.
      E05_LS_LAYOUT-F2CODE            = P_F2CODE.
      E05_LS_LAYOUT-ZEBRA          = P_ZEBRA.
      E05_LS_LAYOUT-COLWIDTH_OPTIMIZE = P_COLOPT.
      IF P_CHKBOX = 'X'.
        E05_LS_LAYOUT-BOX_FIELDNAME     = G_BOXNAM.
        E05_LS_LAYOUT-BOX_TABNAME       = G_TABNAME_ITEM.
      ELSE.
        CLEAR E05_LS_LAYOUT-BOX_FIELDNAME.
        CLEAR E05_LS_LAYOUT-BOX_TABNAME.
      ENDIF.
      IF P_EXPAND = 'X'.
        E05_LS_LAYOUT-EXPAND_FIELDNAME     = G_EXPANDNAME.
      ELSE.
        CLEAR E05_LS_LAYOUT-EXPAND_FIELDNAME.
      ENDIF.
      E05_LS_LAYOUT-NO_INPUT          = P_NOINPT.
      E05_LS_LAYOUT-NO_COLHEAD        = P_NOCOLH.
      IF P_LIGHTS = 'X' OR P_LIGHTC = 'X'.
        E05_LS_LAYOUT-LIGHTS_FIELDNAME = P_LIGNAM.
        E05_LS_LAYOUT-LIGHTS_TABNAME   = G_TABNAME_ITEM.
      ELSE.
        CLEAR E05_LS_LAYOUT-LIGHTS_FIELDNAME.
        CLEAR E05_LS_LAYOUT-LIGHTS_TABNAME.
      ENDIF.
      IF P_GPCE = 'X'.
        E05_LS_LAYOUT-GROUP_CHANGE_EDIT = 'X'.
      ENDIF.
      E05_LS_LAYOUT-LIGHTS_CONDENSE = P_LIGHTC.
      E05_LS_LAYOUT-TOTALS_TEXT       = P_TOTEXT.
      E05_LS_LAYOUT-SUBTOTALS_TEXT    = P_STTEXT.
      E05_LS_LAYOUT-TOTALS_ONLY       = P_TOTONL.
      E05_LS_LAYOUT-KEY_HOTSPOT       = P_KEYHOT.
      E05_LS_LAYOUT-DETAIL_POPUP      = P_DETPOP.
    ENDFORM.
          FORM E06_T_SORT_BUILD                                         *
    -->  E06_LT_SORT                                                   *
    FORM E06_T_SORT_BUILD USING E06_LT_SORT TYPE SLIS_T_SORTINFO_ALV.
      DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.
      CLEAR LS_SORT.
      LS_SORT-FIELDNAME = 'CARRID'.
      LS_SORT-TABNAME   = G_TABNAME_HEADER.
      LS_SORT-SPOS      = 1.
      LS_SORT-UP        = 'X'.
      APPEND LS_SORT TO E06_LT_SORT.
      CLEAR LS_SORT.
      LS_SORT-FIELDNAME = 'CONNID'.
      LS_SORT-TABNAME   = G_TABNAME_ITEM.
      LS_SORT-SPOS      = 2.
      LS_SORT-DOWN      = 'X'.
      APPEND LS_SORT TO E06_LT_SORT.
    ENDFORM.
          FORM E07_SP_GROUP_BUILD                                       *
    -->  E07_LT_SP_GROUP                                               *
    FORM E07_SP_GROUP_BUILD USING E07_LT_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV.
      DATA: LS_SP_GROUP TYPE SLIS_SP_GROUP_ALV.
      CLEAR  LS_SP_GROUP.
      LS_SP_GROUP-SP_GROUP = 'A'.
      LS_SP_GROUP-TEXT     = TEXT-005.
      APPEND LS_SP_GROUP TO E07_LT_SP_GROUP.
    ENDFORM.
          FORM SELECTION                                                *
    FORM SELECTION.
      SELECT * FROM SCARR INTO CORRESPONDING FIELDS OF TABLE GT_SCARR
                                                  WHERE CARRID IN CARRID.
      SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI
                                                  UP TO P_MAXROW ROWS
                                                  WHERE CARRID IN CARRID.
      LOOP AT GT_SCARR.
        READ TABLE GT_SPFLI WITH KEY CARRID = GT_SCARR-CARRID.
        IF SY-SUBRC NE 0.
          DELETE GT_SCARR.
        ENDIF.
      ENDLOOP.
      PERFORM E02_DATA_ADD TABLES GT_SPFLI.
    ENDFORM.
          FORM TOP_OF_PAGE                                              *
    FORM TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
    ENDFORM.
          FORM F4_FOR_VARIANT                                           *
    FORM F4_FOR_VARIANT.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                IS_VARIANT          = G_VARIANT
                I_SAVE              = G_SAVE
                I_TABNAME_HEADER    = G_TABNAME_HEADER
                I_TABNAME_ITEM      = G_TABNAME_ITEM
              it_default_fieldcat =
           IMPORTING
                E_EXIT              = G_EXIT
                ES_VARIANT          = GX_VARIANT
           EXCEPTIONS
                NOT_FOUND = 2.
      IF SY-SUBRC = 2.
        MESSAGE ID SY-MSGID TYPE 'S'      NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ELSE.
        IF G_EXIT = SPACE.
          P_VARI = GX_VARIANT-VARIANT.
        ENDIF.
      ENDIF.
    ENDFORM.
    *&      Form  PAI_OF_SELECTION_SCREEN
          text
    FORM PAI_OF_SELECTION_SCREEN.
      IF NOT P_VARI IS INITIAL.
        MOVE G_VARIANT TO GX_VARIANT.
        MOVE P_VARI TO GX_VARIANT-VARIANT.
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  I_SAVE     = G_SAVE
             CHANGING
                  CS_VARIANT = GX_VARIANT.
        G_VARIANT = GX_VARIANT.
      ELSE.
        PERFORM VARIANT_INIT.
      ENDIF.
    ENDFORM.                               " PAI_OF_SELECTION_SCREEN
    *&      Form  VARIANT_INIT
          text
    -->  p1        text
    <--  p2        text
    FORM VARIANT_INIT.
      CLEAR G_VARIANT.
      G_VARIANT-REPORT = G_REPID.
    ENDFORM.                               " VARIANT_INIT
    Regards,
    Kiran

  • Create simple ALV using Classes

    hi all,
    How to create a ALV report using Classes....?
    any links or feedback will be appreciated.
    Thanks in Advance.

    Check this Sample code using Docking container. In case of docking container no need of custom container required on screen.
    REPORT  ztest_oo_a.
    DATA: it_flight TYPE sflight_tab1.
    DATA: dock TYPE REF TO cl_gui_docking_container,
          grid TYPE REF TO cl_gui_alv_grid.
    SELECT *
      FROM sflight
      INTO TABLE it_flight
      UP TO 20 ROWS.
    CALL SCREEN 100.
    *&      Module  STATUS_0100  OUTPUT
    *       text
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'SATR'.
      CREATE OBJECT dock
        EXPORTING
          repid     = sy-repid
          dynnr     = '100'
          extension = '1500'
        EXCEPTIONS
          cntl_error                  = 1
          cntl_system_error           = 2
          create_error                = 3
          lifetime_error              = 4
          lifetime_dynpro_dynpro_link = 5
          OTHERS                      = 6
      IF sy-subrc ne  0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CREATE OBJECT grid EXPORTING i_parent = dock.
      CALL METHOD grid->set_table_for_first_display
        EXPORTING
          i_structure_name              = 'SFLIGHT'
        CHANGING
          it_outtab                     = it_flight
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc ne 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&      Module  USER_COMMAND_0100  INPUT
    *       text
    MODULE user_command_0100 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    Flow Logic
    PROCESS BEFORE OUTPUT.
    MODULE STATUS_0100.
    PROCESS AFTER INPUT.
    MODULE USER_COMMAND_0100.

  • Disablig Sorting functinoality in ALV using Classes

    Hi,
      How can I disable the ALV sorting functionality using classes? I disabled the buttons on the ALV. But when I select a column and press right click, the sorting functionality is available. How can I disable the right click functionality in alv.
      Thanks in advance.
    Regards,
    Suvan.

    Hi Sridhar,
      Here is the requested code:
    <u><i><b>PBO:</b></i></u>
      gs_LAYOUT-SGL_CLK_HD = 'X'.
      CALL METHOD grid_ref->set_table_for_first_display
        EXPORTING
          i_structure_name              = 'SPFLI'
          is_variant                    = grid_layout
          i_save                        = 'U'
        IS_LAYOUT                     = gs_layout
        IT_TOOLBAR_EXCLUDING          = lt_exclude[]
        CHANGING
          it_outtab                     = t_spfli[]
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CREATE OBJECT event_receiver.
      SET HANDLER event_receiver->handle_context
                                 FOR grid_ref.
    <u><i><b>
    Class Definition:</b></i></u>
      CLASS my_receiver DEFINITION.
        PUBLIC SECTION.
          METHODS:
            handle_context for event context_menu_request
                     of cl_gui_alv_grid importing e_object.
    endclass.
    <u>
    <i><b>Method Implementation:</b></i></u>
      method handle_right_click.
        data:
          t_fcode_list type UI_FUNCTIONS.
        if t_fcode_list is initial.
          append CL_GUI_ALV_GRID=>MC_FC_SORT_ASC
                              TO T_FCODE_LIST.
          append CL_GUI_ALV_GRID=>MC_FC_SORT_DSC
                              TO T_FCODE_LIST.
        endif.
        CALL METHOD OBJ_CT->HIDE_FUNCTIONS
          EXPORTING
            FCODES = t_fcode_list.
        call method cl_gui_cfw=>flush.
      endmethod.
    Thanks,
    Suvan.

  • Alv using class In list format

    Hi,
    I am using a method set_table_for_first_display in class cl_gui_alv_grid to display ALV. but by default the output appears in grid format, I want to change the output in LIST format.
    What can I do to change the output in list format.
    Kind Regards,
    Abhishek.

    try this.... this is an example code.... don't use set_table_for_first_display rather use CL_SALV_TABLE and execute the below code
    *& Report  ZAMIT_TEST
    REPORT  zamit_test  MESSAGE-ID z_zzz_ca_messages.
    * constants for icons
    TYPE-POOLS: icon, col.
    * type for internal table
    TYPES: BEGIN OF x_sflight.
    *       selfld TYPE char1.
            INCLUDE STRUCTURE sflight.
    TYPES: seatsfree TYPE sflight-seatsocc,
           usage TYPE n,                    " exception
           icon_future TYPE icon-id,        " icon for future / past
           line_counter TYPE i,             " line counter
           it_colors TYPE lvc_t_scol, " internal tab for cell color info
    END OF x_sflight.
    * Internal table
    DATA: i_sflight  TYPE STANDARD TABLE OF x_sflight,
          wa_sflight TYPE x_sflight,
          wa_colors  TYPE lvc_s_scol,
          list_display TYPE sap_bool,
          vref_cont    TYPE REF TO cl_gui_custom_container,
          vref_alv     TYPE REF TO cl_salv_table,      " ALV instance
          oref_error   TYPE REF TO cx_salv_error,      " Error instance
          l_text_alv_e TYPE string,
          ok_code      TYPE syucomm.
    SELECT-OPTIONS: so_car FOR wa_sflight-carrid MEMORY ID car,
                    so_con FOR wa_sflight-connid.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK alv WITH FRAME TITLE text-alv.
    PARAMETERS: pa_full RADIOBUTTON GROUP alvd DEFAULT 'X',
                pa_cont RADIOBUTTON GROUP alvd,
                pa_list RADIOBUTTON GROUP alvd.
    SELECTION-SCREEN END OF BLOCK alv.
    PARAMETERS: p_layout TYPE slis_vari.
    *       CLASS lcl_handler DEFINITION
    CLASS lcl_handler DEFINITION.
      PUBLIC SECTION.
        CLASS-METHODS:
        on_added_function FOR EVENT added_function OF cl_salv_events_table
                IMPORTING e_salv_function, " type salv_de_function
        on_double_click FOR EVENT double_click OF cl_salv_events_table
                IMPORTING row,   " type salv_de_row = int4
        on_link_click FOR EVENT link_click OF cl_salv_events_table
                IMPORTING row    " type salv_de_row = int4
                          column." type salv_de_column = char(30)
    ENDCLASS. "lcl_handler definition
    * CLASS lcl_handler IMPLEMENTATION
    CLASS lcl_handler IMPLEMENTATION.
      METHOD on_added_function.
        DATA: l_oref_columns TYPE REF TO cl_salv_columns_table,
              l_oref_column  TYPE REF TO cl_salv_column_table,
              l_oref_column1 TYPE REF TO cl_salv_column,
              l_except1      TYPE REF TO cx_salv_not_found,   "Exception
              l_text1        TYPE string,                     "Exception msg
              l_lvc_s_colo TYPE lvc_s_colo.
        CASE e_salv_function.
          WHEN 'REORDER'.
    * get the COLUMNS object
            l_oref_columns = vref_alv->get_columns( ).
    * positions: (MANDT column + 3 key colums)
            l_oref_columns->set_column_position( columnname = 'SEATSOCC'
                                                 position = 5 ).
            l_oref_columns->set_column_position( columnname = 'SEATSOCC_B'
                                                 position = 6 ).
            l_oref_columns->set_column_position( columnname = 'SEATSOCC_F'
                                                 position = 7 ).
    *       prepare color info
    *       column SEATSOCC
            TRY.
                CALL METHOD l_oref_columns->get_column
                  EXPORTING
                    columnname = 'SEATSOCC'
                  RECEIVING
                    value      = l_oref_column1.
              CATCH cx_salv_not_found INTO l_except1.
                l_text1 = l_except1->get_text( ).
                MESSAGE i000 WITH l_text1.
                LEAVE LIST-PROCESSING.
            ENDTRY.
            l_oref_column ?= l_oref_column1.
            l_oref_column->set_color( value = l_lvc_s_colo ).
    *       column SEATSOCC_B
            TRY.
                CALL METHOD l_oref_columns->get_column
                  EXPORTING
                    columnname = 'SEATSOCC_B'
                  RECEIVING
                    value      = l_oref_column1.
              CATCH cx_salv_not_found INTO l_except1.
                l_text1 = l_except1->get_text( ).
                MESSAGE i000 WITH l_text1.
                LEAVE LIST-PROCESSING.
            ENDTRY.
            l_oref_column ?= l_oref_column1.
            l_oref_column->set_color( value = l_lvc_s_colo ).
    *       column SEATSOCC_F
            TRY.
                CALL METHOD l_oref_columns->get_column
                  EXPORTING
                    columnname = 'SEATSOCC_F'
                  RECEIVING
                    value      = l_oref_column1.
              CATCH cx_salv_not_found INTO l_except1.
                l_text1 = l_except1->get_text( ).
                MESSAGE i000 WITH l_text1.
                LEAVE LIST-PROCESSING.
            ENDTRY.
            l_oref_column ?= l_oref_column1.
            l_oref_column->set_color( value = l_lvc_s_colo ).
        ENDCASE.
      ENDMETHOD. "on_added_function
      METHOD on_double_click.
        DATA: message_text(70),
              lc_seatsfree_e(10),
              lc_seatsfree_b(10),
              lc_seatsfree_f(10).
        READ TABLE i_sflight INTO wa_sflight INDEX row.
        CHECK sy-subrc EQ 0.
        lc_seatsfree_e = wa_sflight-seatsmax - wa_sflight-seatsocc.
        lc_seatsfree_b = wa_sflight-seatsmax_b - wa_sflight-seatsocc_b.
        lc_seatsfree_f = wa_sflight-seatsmax_f - wa_sflight-seatsocc_f.
        CONCATENATE 'FREE SEATS:'(frs) 'ECONOMY:'(eco) lc_seatsfree_e
        'BUSINESS'(bus) lc_seatsfree_b 'FIRST'(fst) lc_seatsfree_f
                        INTO message_text SEPARATED BY space.
        MESSAGE message_text TYPE 'I'.
      ENDMETHOD. "on_double_click
      METHOD on_link_click.
        DATA: lc_carrname TYPE scarr-carrname,
        lc_currcode TYPE scarr-currcode,
        message_text(70).
        READ TABLE i_sflight INTO wa_sflight INDEX row.
        CHECK sy-subrc EQ 0.
        CASE column.
          WHEN 'CARRID'.
            SELECT SINGLE carrname currcode
            INTO (lc_carrname, lc_currcode)
            FROM scarr
            WHERE carrid = wa_sflight-carrid.
            IF sy-subrc EQ 0.
              CONCATENATE 'AIRLINE:'(air) wa_sflight-carrid
              'NAME:'(nme) lc_carrname
              'CURRENCY:' lc_currcode
              INTO message_text
              SEPARATED BY space.
              MESSAGE message_text TYPE 'I'.
            ENDIF.
          WHEN 'SELFLD'.
            MESSAGE i000 with 'Checkbox Clicked'.
        ENDCASE.
      ENDMETHOD. "on_link_click
    ENDCLASS. "lcl_handler IMPLEMENTATION
    START-OF-SELECTION.
    * retrieve data into internal table
      SELECT * FROM sflight
      INTO CORRESPONDING FIELDS OF TABLE i_sflight
      WHERE carrid IN so_car
      AND connid IN so_con.
    END-OF-SELECTION.
    * fill additional data fields
      LOOP AT i_sflight INTO wa_sflight.
    * seats free
        wa_sflight-seatsfree =
        wa_sflight-seatsmax + wa_sflight-seatsmax_b
        + wa_sflight-seatsmax_f
        - wa_sflight-seatsocc - wa_sflight-seatsocc_b
        - wa_sflight-seatsocc_f.
    * usage (exception light)
        IF wa_sflight-seatsfree = 0.
          wa_sflight-usage = '1'.
        ELSEIF wa_sflight-seatsfree <= 20.
          wa_sflight-usage = '2'.
        ELSE.
          wa_sflight-usage = '3'.
        ENDIF.
    * icon "in the future/not in the future"
        IF wa_sflight-fldate > sy-datum.
          wa_sflight-icon_future = icon_positive.
        ELSE.
          wa_sflight-icon_future = icon_negative.
        ENDIF.
    * cell colors
    * single cell if planetype is 747-400
        IF wa_sflight-planetype = '747-400'.
          CLEAR wa_colors.
          wa_colors-fname = 'PLANETYPE'.
          wa_colors-color-col = col_positive.
          wa_colors-color-int = 1.
          APPEND wa_colors TO wa_sflight-it_colors.
        ENDIF.
    * whole line if seatsfree gt 200
        IF wa_sflight-seatsfree >= 200.
          CLEAR wa_colors.
          wa_colors-color-col = col_heading.
          wa_colors-color-int = 1.
          APPEND wa_colors TO wa_sflight-it_colors.
        ENDIF.
        MODIFY i_sflight
        FROM wa_sflight
             TRANSPORTING
        seatsfree
        usage
        icon_future
        it_colors.
      ENDLOOP.
      CASE 'X'.
        WHEN pa_full OR pa_list.
          IF pa_list IS NOT INITIAL.
            list_display = if_salv_c_bool_sap=>true.
          ELSE.
            list_display = if_salv_c_bool_sap=>false.
          ENDIF.
          TRY.
              CALL METHOD cl_salv_table=>factory
                EXPORTING
                  list_display = list_display
                IMPORTING
                  r_salv_table = vref_alv
                CHANGING
                  t_table      = i_sflight.
            CATCH cx_salv_msg INTO oref_error.
              l_text_alv_e = oref_error->get_text( ).
              MESSAGE i000 WITH l_text_alv_e.
              LEAVE LIST-PROCESSING.
          ENDTRY.
    * define settings
          PERFORM define_settings USING vref_alv.
    * display ALV
          vref_alv->display( ).
        WHEN pa_cont.
          CALL SCREEN 100.
      ENDCASE.
    *&      Form  define_settings
    *       text
    *      -->P_ALV      ALV object
    FORM define_settings USING p_alv TYPE REF TO cl_salv_table.
      PERFORM: sub_set_display    USING p_alv,
               sub_set_columns    USING p_alv,
               sub_set_sorts      USING p_alv,
               sub_set_aggregs    USING p_alv,
               sub_set_selections USING p_alv,
               sub_set_layout     USING p_alv,
               sub_set_functions  USING p_alv,
               sub_set_events     USING p_alv,
               sub_set_header     USING p_alv.
    ENDFORM. " define_settings
    *& Form sub_set_display
    * set general display attributs
    * -->P_ALV ALV object
    FORM sub_set_display USING p_alv TYPE REF TO cl_salv_table.
      DATA: lr_display TYPE REF TO cl_salv_display_settings,
            l_title TYPE lvc_title.
    * get display settings object
      lr_display = p_alv->get_display_settings( ).
    * set header
      l_title = text-ttl.
      lr_display->set_list_header( value = text-ttl ).
    * set horizontal lines off
      lr_display->set_horizontal_lines( value = ' '  ).
    * set striped pattern
      lr_display->set_striped_pattern( value = 'X' ).
    ENDFORM. " sub_set_display
    *&      Form  sub_set_columns
    *       text
    *      -->P_ALV      text
    FORM sub_set_columns USING p_alv TYPE REF TO cl_salv_table.
      DATA: l_oref_columns TYPE REF TO cl_salv_columns_table,
            l_oref_column  TYPE REF TO cl_salv_column_table,
            l_oref_column1 TYPE REF TO cl_salv_column,
            l_except1      TYPE REF TO cx_salv_not_found,   "Exception
            l_except2      TYPE REF TO cx_salv_data_error,  "Exception
            l_text1        TYPE string,                     "Exception msg
            l_scrtext_s    TYPE scrtext_s,
            l_scrtext_m    TYPE scrtext_m,
            l_scrtext_l    TYPE scrtext_l,
            l_lvc_tip      TYPE lvc_tip,     " for tooltip
            l_pos          TYPE i,           " column position
            l_lvc_s_colo   TYPE lvc_s_colo.  " column color
      l_oref_columns = p_alv->get_columns( ).   " get columns object
    * set exception column
      TRY.
          CALL METHOD l_oref_columns->set_exception_column
            EXPORTING
              value = 'USAGE'.
        CATCH cx_salv_data_error INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
    * set count column
      TRY.
          CALL METHOD l_oref_columns->set_count_column
            EXPORTING
              value = 'LINE_COUNTER'.
        CATCH cx_salv_data_error INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
    * set cell colors / line colors column
      TRY.
          CALL METHOD l_oref_columns->set_color_column
            EXPORTING
              value = 'IT_COLORS'.
        CATCH cx_salv_data_error INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
    * column ICON_FUTURE
      TRY.
          CALL METHOD l_oref_columns->get_column
            EXPORTING
              columnname = 'ICON_FUTURE'
            RECEIVING
              value      = l_oref_column1.
        CATCH cx_salv_not_found INTO l_except1.
          l_text1 = l_except1->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
      l_oref_column ?= l_oref_column1.
      l_oref_column->set_icon( ).
      l_scrtext_s = text-fut.
      l_oref_column->set_short_text( value = l_scrtext_s ).
      l_oref_column->set_row( value = 2 ).
    * Column SEATSFREE
      TRY.
          CALL METHOD l_oref_columns->get_column
            EXPORTING
              columnname = 'SEATSFREE'
            RECEIVING
              value      = l_oref_column1.
        CATCH cx_salv_not_found INTO l_except1.
          l_text1 = l_except1->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
      l_oref_column ?= l_oref_column1.
    * set color to COL_GROUP
      l_lvc_s_colo-col = col_group.
      l_lvc_s_colo-int = 1.
      l_oref_column->set_color( value = l_lvc_s_colo ).
    ** Column SELFLD
    *  TRY.
    *      CALL METHOD l_oref_columns->get_column
    *        EXPORTING
    *          columnname = 'SELFLD'
    *        RECEIVING
    *          value      = l_oref_column1.
    *    CATCH cx_salv_not_found INTO l_except1.
    *      l_text1 = l_except1->get_text( ).
    *      MESSAGE i000 WITH l_text1.
    *      LEAVE LIST-PROCESSING.
    *  ENDTRY.
    *  l_oref_column ?= l_oref_column1.
    ** set color to COL_GROUP
    *  if pa_list = 'X'.
    *  l_oref_column->set_cell_type( value =
    *                               if_salv_c_cell_type=>CHECKBOX ).
    *  ELSEIF pa_full = 'X'.
    *    l_oref_column->set_cell_type( value =
    *                               if_salv_c_cell_type=>CHECKBOX_HOTSPOT ).
    *  endif.
    ENDFORM.                    "sub_set_columns
    *& Form sub_set_sorts
    * -->P_ALV text
    FORM sub_set_sorts USING p_alv TYPE REF TO cl_salv_table.
      DATA: l_oref_sorts TYPE REF TO cl_salv_sorts,
            l_except1      TYPE REF TO cx_salv_not_found,   "Exception
            l_except2      TYPE REF TO cx_salv_existing,    "Exception
            l_except3      TYPE REF TO cx_salv_data_error,  "Exception
            l_text1        TYPE string.                     "Exception msg
    * get the SORTS object
      l_oref_sorts = p_alv->get_sorts( ).
    * add sorts
      TRY.
          CALL METHOD l_oref_sorts->add_sort
            EXPORTING
              columnname = 'CARRID'
              position   = 1.
        CATCH cx_salv_not_found INTO l_except1.
          l_text1 = l_except1->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_existing  INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_data_error INTO l_except3.
          l_text1 = l_except3->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
      TRY.
          CALL METHOD l_oref_sorts->add_sort
            EXPORTING
              columnname = 'CONNID'
              position   = 2
              subtotal   = if_salv_c_bool_sap=>true.
        CATCH cx_salv_not_found INTO l_except1.
          l_text1 = l_except1->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_existing  INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_data_error INTO l_except3.
          l_text1 = l_except3->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
      TRY.
          CALL METHOD l_oref_sorts->add_sort
            EXPORTING
              columnname = 'FLDATE'
              position   = 3.
        CATCH cx_salv_not_found INTO l_except1.
          l_text1 = l_except1->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_existing  INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_data_error INTO l_except3.
          l_text1 = l_except3->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
    ENDFORM. " sub_set_sorts
    *& Form sub_set_aggregs
    * -->P_ALV text
    FORM sub_set_aggregs USING p_alv TYPE REF TO cl_salv_table.
      DATA: l_oref_aggregs TYPE REF TO cl_salv_aggregations,
            l_except1      TYPE REF TO cx_salv_data_error,  "Exception
            l_except2      TYPE REF TO cx_salv_not_found,   "Exception
            l_except3      TYPE REF TO cx_salv_existing,    "Exception
            l_text1        TYPE string.                     "Exception msg
      l_oref_aggregs = p_alv->get_aggregations( ).
      TRY.
          CALL METHOD l_oref_aggregs->add_aggregation
            EXPORTING
              columnname  = 'SEATSFREE'
              aggregation = if_salv_c_aggregation=>total.
        CATCH cx_salv_data_error INTO l_except1.
          l_text1 = l_except1->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_not_found  INTO l_except2.
          l_text1 = l_except2->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
        CATCH cx_salv_existing   INTO l_except3.
          l_text1 = l_except3->get_text( ).
          MESSAGE i000 WITH l_text1.
          LEAVE LIST-PROCESSING.
      ENDTRY.
    ENDFORM. " sub_set_aggregs
    *& Form sub_set_selections
    * -->P_ALV text
    FORM sub_set_selections USING p_alv TYPE REF TO cl_salv_table.
      DATA: lr_selections TYPE REF TO cl_salv_selections.
    * get the SELECTIONS object
      lr_selections = p_alv->get_selections( ).
    * set the selection mode
      lr_selections->set_selection_mode(
                     value = if_salv_c_selection_mode=>cell ).
    ENDFORM. " sub_set_selections
    *& Form sub_set_layout
    * -->P_ALV text
    FORM sub_set_layout USING p_alv TYPE REF TO cl_salv_table.
      DATA: lr_layout TYPE REF TO cl_salv_layout,
      ls_key TYPE salv_s_layout_key.
    * get the LAYOUT object
      lr_layout = p_alv->get_layout( ).
    * set the layout key
      ls_key-report = sy-cprog.
      lr_layout->set_key( value = ls_key ).
    * set save restriction
    * (restriction "none" is intended,
    * so we may use the default)
      lr_layout->set_save_restriction(
    * VALUE = IF_SALV_C_LAYOUT=>RESTRICT_NONE
    * allow setting a default layout
      lr_layout->set_default( value = 'X' ).
    * set initial layout
      lr_layout->set_initial_layout( value = p_layout ).
    ENDFORM. " sub_set_layout
    *& Form sub_set_functions
    * -->P_ALV text
    FORM sub_set_functions USING p_alv TYPE REF TO cl_salv_table.
      DATA: lr_functions TYPE REF TO cl_salv_functions_list,
            l_except1    TYPE REF TO cx_salv_existing,
            l_except2    TYPE REF TO cx_salv_wrong_call,
            l_text1      TYPE string,
    * help variables for method call ADD_FUNCTION
            l_icon       TYPE string,
            l_text       TYPE string,
            l_tooltip    TYPE string.
    IF pa_full = 'X' or pa_list = 'X'.
      p_alv->set_screen_status( pfstatus = 'SALV_TABLE_STANDARD'
                                report = sy-repid
                           set_functions = p_alv->c_functions_all ).
    ENDIF.
    * get the FUNCTIONS object
      lr_functions = p_alv->get_functions( ).
    * offer all generic functions
      lr_functions->set_all( value = if_salv_c_bool_sap=>true ).
    * subtract average
      lr_functions->set_aggregation_average(
                        value = if_salv_c_bool_sap=>false ).
    * subtract all export functions
      lr_functions->set_group_export(
                        value = if_salv_c_bool_sap=>false ).
    * enable exort to local file
      lr_functions->set_export_localfile(
                        value = if_salv_c_bool_sap=>true ).
    * subtract transfer to lotus
      lr_functions->set_view_lotus(
                        value = if_salv_c_bool_sap=>false ).
    * customer defined function:
    * display occupied seats columns most left
    * and highlight them
    *  IF pa_cont = 'X'.
    *    l_icon = icon_insert_row.
    *    l_text = text-tot.
    *    l_tooltip = text-ttt.
    *    TRY.
    *        CALL METHOD lr_functions->add_function
    *          EXPORTING
    *            name     = 'REORDER'
    *            icon     = l_icon
    *            text     = l_text
    *            tooltip  = l_tooltip
    *     position = if_salv_c_function_position=>right_of_salv_functions.
    *      CATCH cx_salv_existing   INTO l_except1.
    *        l_text1 = l_except1->get_text( ).
    *        MESSAGE i000 WITH l_text1.
    *        LEAVE LIST-PROCESSING.
    *      CATCH cx_salv_wrong_call INTO l_except2.
    *        l_text1 = l_except2->get_text( ).
    *        MESSAGE i000 WITH l_text1.
    *        LEAVE LIST-PROCESSING.
    *    ENDTRY.
    *  ENDIF.
    ENDFORM. " sub_set_functions
    *& Form sub_set_events
    * text
    * -->P_ALV text
    FORM sub_set_events USING p_alv TYPE REF TO cl_salv_table.
      DATA: lr_event TYPE REF TO cl_salv_events_table.
    * get the EVENT object
      lr_event = p_alv->get_event( ).
      SET HANDLER :
      lcl_handler=>on_added_function FOR lr_event,
      lcl_handler=>on_double_click   FOR lr_event,
      lcl_handler=>on_link_click     FOR lr_event.
    ENDFORM. " sub_set_events
    *& Form sub_set_header
    * -->P_ALV text
    FORM sub_set_header
    USING p_alv TYPE REF TO cl_salv_table.
      DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid.
    * 1st step: create the grid object
      CREATE OBJECT lr_grid.
    * 2nd step: add some text items
      lr_grid->create_header_information( row = 1  column = 1
                             text = 'Flight List Grp ##'(fll) ).
      lr_grid->create_text( row = 2  column = 1
                             text = 'Please check utilization'(uti) ).
    * 3rd step: declare grid as header of list
      p_alv->set_top_of_list( value = lr_grid ).
    ENDFORM. " sub_set_header
    *& Module STATUS_0100 OUTPUT
    * text
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'SALV_TABLE_STANDARD'.
      SET TITLEBAR 'T100'.
    ENDMODULE. " STATUS_0100 OUTPUT
    *& Module create_control OUTPUT
    * text
    MODULE create_control OUTPUT.
      IF vref_cont IS NOT BOUND.
    * create container control
    * and link it to the dynpro
        CREATE OBJECT vref_cont
        EXPORTING
          container_name = 'MY_CONTAINER'
        EXCEPTIONS
          OTHERS = 1.
        IF sy-subrc <> 0.
          MESSAGE e000 WITH 'Error when creating the container object'.
        ENDIF.
    * create ALV and
    * link it to the container control
        TRY.
            cl_salv_table=>factory(
            EXPORTING
              r_container = vref_cont
            IMPORTING
              r_salv_table = vref_alv
            CHANGING
              t_table = i_sflight ).
          CATCH cx_salv_msg INTO oref_error.
            l_text_alv_e = oref_error->get_text( ).
            MESSAGE i000 WITH l_text_alv_e.
            LEAVE LIST-PROCESSING.
        ENDTRY.
    * display ALV
        vref_alv->display( ).
      ENDIF.
    ENDMODULE. " create_control OUTPUT
    *& Module USER_COMMAND_0100 INPUT
    * text
    MODULE user_command_0100 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
          SET SCREEN 0.
      ENDCASE.
    ENDMODULE. " USER_COMMAND_0100 INPUT
    *&      Module  exit  INPUT
    *       text
    MODULE exit INPUT.
      SET SCREEN 0.
    ENDMODULE.                 " exit  INPUT

  • Alv using class (CL_GUI_ALV_TREE)

    hi guys,
                i want a small example on the class CL_GUI_ALV_TREE_using alv......... its urgent so plx reply immediately.............
    Thanks with regards,
    Vishnu. R

    hi,
    use the following code, if it useful reward the points.
    REPORT  zdemo_alvgrid                 .
    *Data Declaration
    TABLES:     ekko.
    TYPE-POOLS: slis.                                 "ALV Declarations
    TYPES: BEGIN OF t_ekko,
      ebeln TYPE ekpo-ebeln,
      ebelp TYPE ekpo-ebelp,
      statu TYPE ekpo-statu,
      aedat TYPE ekpo-aedat,
      matnr TYPE ekpo-matnr,
      menge TYPE ekpo-menge,
      meins TYPE ekpo-meins,
      netpr TYPE ekpo-netpr,
      peinh TYPE ekpo-peinh,
    END OF t_ekko.
    DATA: it_ekko     TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          it_ekpo     TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          it_emptytab TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko     TYPE t_ekko,
          wa_ekpo     TYPE t_ekko.
    DATA: ok_code like sy-ucomm,           "OK-Code
          save_ok like sy-ucomm.
    *ALV data declarations
    DATA: fieldcatalog  TYPE lvc_t_fcat WITH HEADER LINE.
    DATA: gd_fieldcat   TYPE lvc_t_fcat,
          gd_tab_group  TYPE slis_t_sp_group_alv,
          gd_layout     TYPE slis_layout_alv.
    *ALVtree data declarations
    CLASS cl_gui_column_tree DEFINITION LOAD.
    CLASS cl_gui_cfw DEFINITION LOAD.
    DATA: gd_tree             TYPE REF TO cl_gui_alv_tree,
          gd_hierarchy_header TYPE treev_hhdr,
          gd_report_title     TYPE slis_t_listheader,
          gd_logo             TYPE sdydo_value,
          gd_variant          TYPE disvariant.
    *Create container for alv-tree
    DATA: l_tree_container_name(30) TYPE c,
          l_custom_container        TYPE REF TO cl_gui_custom_container.
    *Includes
    *INCLUDE ZDEMO_ALVTREEO01. "Screen PBO Modules
    *INCLUDE ZDEMO_ALVTREEI01. "Screen PAI Modules
    *INCLUDE ZDEMO_ALVTREEF01. "ABAP Subroutines(FORMS)
    *Start-of-selection.
    START-OF-SELECTION.
    ALVtree setup data
        PERFORM data_retrieval.
        PERFORM build_fieldcatalog.
        PERFORM build_layout.
        PERFORM build_hierarchy_header CHANGING gd_hierarchy_header.
        PERFORM build_report_title USING gd_report_title gd_logo.
        PERFORM build_variant.
    Display ALVtree report
      call screen 100.
    *&      Form  DATA_RETRIEVAL
          Retrieve data into Internal tables
    FORM data_retrieval.
      SELECT ebeln
       UP TO 10 ROWS
        FROM ekko
        INTO corresponding fields of TABLE it_ekko.
      loop at it_ekko into wa_ekko.
        SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
          FROM ekpo
          appending TABLE it_ekpo
         where ebeln eq wa_ekko-ebeln.
      endloop.
    ENDFORM.                    " DATA_RETRIEVAL
    *&      Form  BUILD_FIELDCATALOG
          Build Fieldcatalog for ALV Report
    FORM build_fieldcatalog.
    Please not there are a number of differences between the structure of
    ALVtree fieldcatalogs and ALVgrid fieldcatalogs.
    For example the field seltext_m is replace by scrtext_m in ALVtree.
      fieldcatalog-fieldname   = 'EBELN'.           "Field name in itab
      fieldcatalog-scrtext_m   = 'Purchase Order'.  "Column text
      fieldcatalog-col_pos     = 0.                 "Column position
      fieldcatalog-outputlen   = 15.                "Column width
      fieldcatalog-emphasize   = 'X'.               "Emphasize  (X or SPACE)
      fieldcatalog-key         = 'X'.               "Key Field? (X or SPACE)
    fieldcatalog-do_sum      = 'X'.              "Sum Column?
    fieldcatalog-no_zero     = 'X'.              "Don't display if zero
      APPEND fieldcatalog TO gd_fieldcat.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'EBELP'.
      fieldcatalog-scrtext_m   = 'PO Iten'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 1.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'STATU'.
      fieldcatalog-scrtext_m   = 'Status'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 2.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'AEDAT'.
      fieldcatalog-scrtext_m   = 'Item change date'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 3.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MATNR'.
      fieldcatalog-scrtext_m   = 'Material Number'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 4.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MENGE'.
      fieldcatalog-scrtext_m   = 'PO quantity'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 5.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MEINS'.
      fieldcatalog-scrtext_m   = 'Order Unit'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 6.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'NETPR'.
      fieldcatalog-scrtext_m   = 'Net Price'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 7.
      fieldcatalog-datatype     = 'CURR'.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'PEINH'.
      fieldcatalog-scrtext_m   = 'Price Unit'.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-col_pos     = 8.
      APPEND fieldcatalog TO gd_fieldcat..
      CLEAR  fieldcatalog.
    ENDFORM.                    " BUILD_FIELDCATALOG
    *&      Form  BUILD_LAYOUT
          Build layout for ALV grid report
    FORM build_layout.
      gd_layout-no_input          = 'X'.
      gd_layout-colwidth_optimize = 'X'.
      gd_layout-totals_text       = 'Totals'(201).
    gd_layout-totals_only        = 'X'.
    gd_layout-f2code            = 'DISP'.  "Sets fcode for when double
                                            "click(press f2)
    gd_layout-zebra             = 'X'.
    gd_layout-group_change_edit = 'X'.
    gd_layout-header_text       = 'helllllo'.
    ENDFORM.                    " BUILD_LAYOUT
    *&      Form  build_hierarchy_header
          build hierarchy-header-information
         -->P_L_HIERARCHY_HEADER  structure for hierarchy-header
    FORM build_hierarchy_header CHANGING
                                   p_hierarchy_header TYPE treev_hhdr.
      p_hierarchy_header-heading = 'Hierarchy Header'(013).
      p_hierarchy_header-tooltip = 'This is the Hierarchy Header !'(014).
      p_hierarchy_header-width = 30.
      p_hierarchy_header-width_pix = ''.
    ENDFORM.                               " build_hierarchy_header
    *&      Form  BUILD_REPORT_TITLE
          Build table for ALVtree header
    <->  p1        Header details
    <->  p2        Logo value
    FORM build_report_title CHANGING
          pt_report_title  TYPE slis_t_listheader
          pa_logo             TYPE sdydo_value.
      DATA: ls_line TYPE slis_listheader,
            ld_date(10) TYPE c.
    List Heading Line(TYPE H)
      CLEAR ls_line.
      ls_line-typ  = 'H'.
    ls_line-key     "Not Used For This Type(H)
      ls_line-info = 'PO ALVTree Display'.
      APPEND ls_line TO pt_report_title.
    Status Line(TYPE S)
      ld_date(2) = sy-datum+6(2).
      ld_date+2(1) = '/'.
      ld_date3(2) = sy-datum4(2).
      ld_date+5(1) = '/'.
      ld_date+6(4) = sy-datum(4).
      ls_line-typ  = 'S'.
      ls_line-key  = 'Date'.
      ls_line-info = ld_date.
      APPEND ls_line TO pt_report_title.
    Action Line(TYPE A)
      CLEAR ls_line.
      ls_line-typ  = 'A'.
      CONCATENATE 'Report: ' sy-repid INTO ls_line-info  SEPARATED BY space.
      APPEND ls_line TO pt_report_title.
    ENDFORM.
    *&      Form  BUILD_VARIANT
          Build variant
    form build_variant.
    Set repid for storing variants
      gd_variant-report = sy-repid.
    endform.                    " BUILD_VARIANT

Maybe you are looking for

  • Apple TV Purchases Backed Up In Itunes But Will Not Show In Home Sharing On Ipad

    This problem is bizzare. Basically I have had Apple TV for a while but really only made some purchases from the interface on the TV the other day. (Besides Rentals) Normally I buy the movie directly on my macbook and download it.  Then go watch it on

  • Copy Control between Sales Orders and Deliveries

    Hi Gurus, please can you tell me why copy control between Sales Order and Delivery doesn't work? At header level, into copy control, we can set 2 requirement routines, one as general requirement for copying (TVCPL-AUBED) and the other one as requirem

  • Internal 500 error while accessing TFS web site

    Hi all, I have installed & configured Team Foundation Server 2013 & SharePoint Foundation 2013 in my environment. I am facing an issue whenever I try to open the TFS site like "https://nc1vwstfs.ranchi.com/tfs". I am getting "HTTP 500 Internal Server

  • Help with a store function that takes string array

    Hi All, I have a function that takes in two string arrays, status_array, and gender_array. You can see the partial code below. Somehow if the value for the string array is null, the code doesn't execute properly. It should return all employees, but i

  • Photos Don't fill the paper HP Printer

    I want to print a 4.6  Print  using a HP c310e Printer.  All I get is this: Apparent there is no way to set page orentation. All 4x6 prints should be landscape not portriat there is no way to adjust to fill the screen. iPhoto 9.5.1