Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ALV display using oops

Former Member
0 Likes
3,348

Hi Friends,

I want to display the report in ALV using oops.

My Customer wants output like reuse_alv_list_display.

please let me know if any one knows.

regrds,

vijay

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,347

Check examples : BCALV_GRID_01 to BCALV_GRID_11 in package SLIS.

regards,

Advait

6 REPLIES 6
Read only

Former Member
0 Likes
1,348

Check examples : BCALV_GRID_01 to BCALV_GRID_11 in package SLIS.

regards,

Advait

Read only

Former Member
0 Likes
1,347

Hi

you need to use the method set_table_for_first_display.

Like

call method w_alv1->set_table_for_first_display

exporting

is_layout = s_layout

is_variant = s_disvariant

i_save = 'U'

it_toolbar_excluding = lt_toolbar_excluding[]

changing

it_outtab = t_print_rep1

it_fieldcatalog = t_fieldcat[]

exceptions

invalid_parameter_combination = 1

program_error = 2

too_many_lines = 3

others = 4.

regards,

Ramya

Read only

Former Member
0 Likes
1,347

Hi Vijay,

Check out the ALV Sample program in oops.


*&---------------------------------------------------------------------*
*& Report  ZCC_OOPS_ALV_EDITABLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZCC_OOPS_ALV_EDITABLE.


tables sflight.
data: begin of gt_outtab occurs 0.     "with header line
        include structure sflight.
data: celltab type lvc_t_styl.
data: end of gt_outtab.
data: gt_fieldcat type lvc_t_fcat.
data: g_carrid like sflight-carrid,
      g_connid like sflight-connid.
data: gs_spfli type spfli.                                  "#EC NEEDED

data: g_custom_container type ref to cl_gui_custom_container.
data:  g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1'.
data: g_grid  type ref to cl_gui_alv_grid.
data: wa_outtab like gt_outtab.

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
class lcl_event_receiver definition.

*.............

  public section.

    types: begin of sflight_key.
    types:   carrid type s_carr_id.
    types:   connid type s_conn_id.
    types:   fldate type s_date.
    types: end of sflight_key.

    types: sflight_keys type standard table of sflight_key,
           sflight_table type standard table of sflight.

    methods:
      handle_data_changed
         for event data_changed of cl_gui_alv_grid
             importing er_data_changed.

    methods:
      get_inserted_rows
           exporting
              inserted_rows type sflight_keys.

    methods:
      get_deleted_rows
          exporting
              deleted_rows type sflight_table.

    methods:
       refresh_delta_tables.

    methods: set_table_is_initial.

    methods: set_table_is_not_initial.

    methods: table_is_initial
                returning value(initial) type char01.

*..............

  private section.

* §4.Define internal tables to remember inserted and deleted lines,
*    thus the delta between input made after the last saving.

    data: inserted_rows type sflight_keys,
          deleted_rows type standard table of sflight.


* This flag is set if any error occured in one of the
* following methods:
    data: error_in_data type c.

* This flag signals that no records were read for the flight
* table initially:
    data: initial_table type c.
** Methods to modularize event handler method HANDLE_DATA_CHANGED:
*
    methods:
      check_double_entries
         importing
            pr_data_changed type ref to cl_alv_changed_data_protocol.

    methods:
      update_delta_tables
         importing
            pr_data_changed type ref to cl_alv_changed_data_protocol.

    methods:
      perform_semantic_checks
         importing
            pr_data_changed type ref to cl_alv_changed_data_protocol.

    methods:
      get_cell_values
           importing
             row_id          type int4
             pr_data_changed type ref to cl_alv_changed_data_protocol
           exporting
             key             type sflight_key.



endclass.                    "lcl_event_receiver DEFINITION
**---------------------------------------------------------
class lcl_event_receiver implementation.
  method handle_data_changed.
*
*    data: ls_good type lvc_s_modi,
*          l_price type s_price,
*          ls_new type lvc_s_moce.
*
*    error_in_data = space.
*
** check if there exist double entries
*    call method check_double_entries( er_data_changed ).
*
** remember new or deleted lines for saving
*    call method update_delta_tables( er_data_changed ).
*
** check mt_good_cells semantically
*    call method perform_semantic_checks( er_data_changed ).
*
*    if error_in_data = 'X'.
*      call method er_data_changed->display_protocol.
*    endif.

  endmethod.                    "handle_data_changed

*-----------------------------------------------------------------------
  method check_double_entries.
    data: lt_good_cells type lvc_t_modi,
          ls_good type lvc_s_modi,
          ls_key type sflight_key,
          ls_sflight type sflight,
          l_flightdate like gt_outtab-fldate,
          l_del_row type lvc_s_moce,
          ls_outtab like line of gt_outtab,
          l_reentered type c.



* §5.Check if there exist already other records with equal key fields.

*.............................................
* Check if the user has entered two new lines where the key fields
* are equal.
*.............................................
* Since CARRID and CONNID are read only, the check is restrained
* to field FLDATE.
*
* Algorithm: Copy all entries in MT_GOOD_CELLS to a dummy table.
*            During the copying procedure check if there exists
*            already a line with the same Flight date.
*
*    loop at pr_data_changed->mt_good_cells into ls_good.
*      case ls_good-fieldname.
*        when 'FLDATE'.
*
*          call method pr_data_changed->get_cell_value
*                      exporting
*                            i_row_id = ls_good-row_id
*                            i_fieldname = ls_good-fieldname
*                      importing e_value = l_flightdate.
*
*          read table lt_good_cells with key
*                            value = l_flightdate
*                            transporting no fields.
*          if sy-subrc = 0.
** There exists already a line with the same flight date!
*            call method pr_data_changed->add_protocol_entry
*                         exporting
*              i_msgid = '0K' i_msgno = '000'  i_msgty = 'E'
*              i_msgv1 = text-m01
*              i_fieldname = ls_good-fieldname
*              i_row_id = ls_good-row_id.
*
*            error_in_data = 'X'.
*          else.
*            ls_good-value = l_flightdate.
*            append ls_good to lt_good_cells.
*          endif.
*      endcase.
*
*    endloop.
*
**.........................
** Check if any new entries already exist in gt_outtab.
** At this point, lt_good_cells contains only lines with
** FIELDNAME = 'FLDATE'.
**........................
*    loop at lt_good_cells into ls_good.
*      l_flightdate = ls_good-value.      "flightdate, see above
*      read table gt_outtab with key
*                    carrid = g_carrid
*                    connid = g_connid
*                    fldate = l_flightdate
*                    transporting no fields.
*
*      if sy-subrc = 0.
** Check if this entry was deleted before, i.e. it is in the table
** of deleted rows. If so, the entry does not exist twice. The user
** has deleted a line and then reentered it.
*        l_reentered = space.
*
*        loop at pr_data_changed->mt_deleted_rows into l_del_row.
*          read table gt_outtab into ls_outtab index l_del_row-row_id.
*          if sy-subrc ne 0.
*            message i000(0k) with text-e01."Fehler beim Löschen
*          elseif
*                    ls_outtab-carrid eq g_carrid
*                and ls_outtab-connid eq g_connid
*                and ls_outtab-fldate eq ls_good-value.
*            l_reentered = 'X'.
*          endif.
*        endloop.
*
*        if l_reentered ne 'X'.
*          call method pr_data_changed->add_protocol_entry
*                         exporting
*              i_msgid = '0K' i_msgno = '000'  i_msgty = 'E'
*              i_msgv1 = text-m01
*              i_fieldname = ls_good-fieldname
*              i_row_id = ls_good-row_id.
*
*          error_in_data = 'X'.
*        endif.
*      endif.
*    endloop.
*
** In this demo report you may prevent the selection
** of data by setting parameter 'p_ds'.
** If this is done, the next check is required:
*    if me->table_is_initial( ) eq 'X'.
*      call method get_cell_values
*           exporting row_id          = 1
*                     pr_data_changed = pr_data_changed
*           importing key             = ls_key.
*
*      select single * from sflight into ls_sflight
*                where carrid = ls_key-carrid
*                  and connid = ls_key-connid
*                  and fldate = ls_key-fldate.
*
*      if sy-subrc = 0.
*        call method pr_data_changed->add_protocol_entry
*                       exporting
*            i_msgid = '0K' i_msgno = '000'  i_msgty = 'E'
*            i_msgv1 = text-m01
*            i_fieldname = 'FLDATE'
*            i_row_id = 1.
*
*        error_in_data = 'X'.
*      endif.
** flag initial_table is reset in method 'update_delta_tables'
*    endif.

  endmethod.                    "check_double_entries
*-------------------------------------------------------
  method update_delta_tables.
*    data: l_ins_row type lvc_s_moce,
*          l_del_row type lvc_s_moce,
*          ls_key type sflight_key,
*          ls_sflight type sflight,
*          ls_outtab like line of gt_outtab.
*
** §6.Use protocol attributes MT_DELETED_ROWS and MT_INSERTED_ROWS
**    to remember which lines where deleted or inserted. Save this
**    information in your internal tables.
*
**..........
** deleted rows
**.............
*    loop at pr_data_changed->mt_deleted_rows into l_del_row.
*      read table gt_outtab into ls_outtab index l_del_row-row_id.
*      if sy-subrc ne 0.
*        message i000(0k) with text-e01."Fehler beim Löschen
*      else.
*        move-corresponding ls_outtab to ls_sflight.
** It should no be possible that the same line is deleted twice,
** so we just add the new key line to 'deleted_rows'.
*        append ls_sflight to deleted_rows.
** If this line was inserted just before it is deleted:
*        delete me->inserted_rows
*             where carrid = ls_outtab-carrid
*             and   connid = ls_outtab-connid
*             and   fldate = ls_outtab-fldate.
*      endif.
*    endloop.
*
**..........
** inserted rows
** At this point ALV has not added new lines
** to gt_outtab, so you can not access their values
** by reading gt_outtab.
** Table MT_GOOD_CELLS holds new values that can be
** referenced using the ROW_ID.
**..........
*    if me->table_is_initial( ) eq 'X'.
** No flights were selected initially. This is the first new line.
*      call method get_cell_values
*            exporting row_id          = 1
*                      pr_data_changed = pr_data_changed
*            importing key             = ls_key.
*
*      append ls_key to inserted_rows.
*      call method me->set_table_is_not_initial.
*    endif.
*
*    loop at pr_data_changed->mt_inserted_rows into l_ins_row.
*      call method get_cell_values
*              exporting row_id          = l_ins_row-row_id
*                        pr_data_changed = pr_data_changed
*              importing key             = ls_key.
**      READ TABLE gt_outtab INTO ls_outtab INDEX l_ins_row-row_id.
*
** Just insert the new row regardless if the input is wrong
*      append ls_key to inserted_rows.
*    endloop.
*
  endmethod.                    "update_delta_tables
*---------------------------------------------------------
  method get_cell_values.
* get values of key cells of row ROW_ID

** CARRIER
*    call method pr_data_changed->get_cell_value
*          exporting
*                 i_row_id    = row_id
*                 i_fieldname = 'CARRID'
*               importing
*                 e_value = key-carrid.
*
*    if sy-subrc ne 0.
*      message i000(0k) with text-e02.  "Fehler beim Einfügen
*    endif.
** CONNID
*    call method pr_data_changed->get_cell_value
*          exporting
*                 i_row_id    = row_id
*                 i_fieldname = 'CONNID'
*               importing
*                 e_value = key-connid.
*
*    if sy-subrc ne 0.
*      message i000(0k) with text-e02.  "Fehler beim Einfügen
*    endif.
*
** FLDATE
*    call method pr_data_changed->get_cell_value
*          exporting
*                 i_row_id    = row_id
*                 i_fieldname = 'FLDATE'
*               importing
*                 e_value = key-fldate.
*
*    if sy-subrc ne 0.
*      message i000(0k) with text-e02.  "Fehler beim Einfügen
*    endif.



  endmethod.                    "get_cell_values

*---------------------------------------------------------
  method perform_semantic_checks.
*    data: ls_good type lvc_s_modi,
*          l_planetype type s_planetye,
*          l_seatsmax type s_seatsmax.
*
*    loop at pr_data_changed->mt_good_cells into ls_good.
*      case ls_good-fieldname.
*        when 'PLANETYPE'.
*          call method pr_data_changed->get_cell_value
*             exporting
*               i_row_id = ls_good-row_id
*               i_fieldname = ls_good-fieldname
*             importing
*               e_value = l_planetype.
*
*          select single seatsmax from saplane into l_seatsmax
*                        where planetype = l_planetype.
*
*          if sy-subrc ne 0.
*            call method pr_data_changed->add_protocol_entry
*                            exporting
*                 i_msgid = '0K' i_msgno = '000'  i_msgty = 'E'
*                 i_msgv1 = text-m02
*                 i_fieldname = ls_good-fieldname
*                 i_row_id = ls_good-row_id.
*
*            error_in_data = 'X'.
*          else.
*
*
*            call method pr_data_changed->modify_cell
*              exporting i_row_id    = ls_good-row_id
*                        i_fieldname = 'SEATSMAX'
*                        i_value     = l_seatsmax.
*          endif.
*      endcase.
*    endloop.
  endmethod.                    "perform_semantic_checks

*------------------------------------------------------

  method get_inserted_rows.
*    inserted_rows = me->inserted_rows.
  endmethod.                    "get_inserted_rows
*------------------------------------------------------

  method get_deleted_rows.
*    deleted_rows = me->deleted_rows.
  endmethod.                    "get_deleted_rows
*------------------------------------------------------
  method refresh_delta_tables.
*    clear me->inserted_rows[].
*    clear me->deleted_rows[].
  endmethod.                    "refresh_delta_tables
*------------------------------------------------------
  method set_table_is_initial.
*    initial_table = 'X'.
  endmethod.                    "set_table_is_initial
*------------------------------------------------------
  method set_table_is_not_initial.
*    initial_table = space.
  endmethod.                    "set_table_is_not_initial
*------------------------------------------------------
  method table_is_initial.
*    if initial_table = 'X'.
*      initial = 'X'.
*    else.
*      initial = space.
*    endif.
  endmethod.                    "table_is_initial


endclass.                    "lcl_event_receiver IMPLEMENTATION


data: g_verifier type ref to lcl_event_receiver.
data: g_max type i value 100.

data: gs_layout type lvc_s_layo.
data: ok_code like sy-ucomm,
      save_ok like sy-ucomm.

parameters: p_ds type c as checkbox.   "delete selection

select-options s_carrid for sflight-carrid
                            no intervals no-extension default 'LH'.
select-options s_connid for sflight-connid
                           no intervals no-extension default '0400'.

start-of-selection.

  g_carrid = s_carrid-low.
  g_connid = s_connid-low.

* first check airline and connection
  select single * from spfli into gs_spfli
                     where carrid = g_carrid
                     and connid = g_connid.

  call screen 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module status_0100 output.
  set pf-status 'MAIN100'.
  set titlebar 'MAIN100'.
  if g_custom_container is initial.
    perform create_and_init_alv changing gt_outtab[]
                                         gt_fieldcat.
  endif.
endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  create_and_init_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_OUTTAB[]  text
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
form create_and_init_alv changing pt_outtab like gt_outtab[]
                                  pt_fieldcat type lvc_t_fcat.
  data: lt_exclude type ui_functions.

  create object g_custom_container
         exporting container_name = g_container.
  create object g_grid
         exporting i_parent = g_custom_container.
* Create Objekt to verify input values.
* (This object is already needed in form SELECT_DATA).
  create object g_verifier.
*  SET HANDLER g_verifier->handle_data_changed FOR g_grid.
  perform select_data changing pt_outtab[].
  perform build_fieldcat changing pt_fieldcat.
  perform exclude_tb_functions changing lt_exclude.
  gs_layout-stylefname = 'CELLTAB'.

  call method g_grid->set_table_for_first_display
    exporting
      it_toolbar_excluding = lt_exclude
      is_layout            = gs_layout
    changing
      it_fieldcatalog      = pt_fieldcat
      it_outtab            = pt_outtab[].

* Set editable cells to ready for input initially
  call method g_grid->set_ready_for_input
    exporting
      i_ready_for_input = 1.

endform.                    " create_and_init_alv

*&---------------------------------------------------------------------*
*&      Form  select_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_OUTTAB  text
*----------------------------------------------------------------------*
form select_data changing pt_outtab like gt_outtab[].
  data: lt_sflight type table of sflight,
        ls_sflight type sflight,
        ls_outtab like line of gt_outtab,
        l_index type i,
        ls_spfli type spfli,                                "#EC NEEDED
        lt_celltab type lvc_t_styl.



* Check parameter 'p_ds'=>optionally select no data
  if p_ds is initial.
* Select data from sflight
    select * from sflight into table lt_sflight up to g_max rows
                     where carrid = g_carrid
                       and connid = g_connid.
  endif.

  if sy-subrc ne 0 or not p_ds is initial.
* no flights were found!
* We provide some default values for the first line that is entered:
    ls_outtab-carrid = g_carrid.
    ls_outtab-connid = g_connid.
    case g_carrid.
      when 'LH'.
        ls_outtab-currency = 'DEM'.
      when others.
        ls_outtab-currency = 'US'.
    endcase.
    ls_outtab-seatsocc = 0.
    ls_outtab-paymentsum = 0.

* set fields FLDATE, PRICE and PLANETYPE to editable
    perform fill_celltab using 'RW'
                         changing lt_celltab.
    insert lines of lt_celltab into table ls_outtab-celltab.
    append ls_outtab to pt_outtab.

* Tell Verify-Objekt that the table was initial
    call method g_verifier->set_table_is_initial.
  else.
    call method g_verifier->set_table_is_not_initial.
* move corresponding fields from lt_sflight to gt_outtab
    loop at lt_sflight into ls_sflight.
      move-corresponding ls_sflight to ls_outtab.
      append ls_outtab to pt_outtab.
    endloop.

* §3.Set all cells of the table non-editable by using the style table.

    loop at pt_outtab into ls_outtab.
      l_index = sy-tabix.
      refresh lt_celltab.
      perform fill_celltab using 'RO'
                        changing lt_celltab.
* Copy your celltab to the celltab of the current row of gt_outtab.
      insert lines of lt_celltab into table ls_outtab-celltab.
      modify pt_outtab from ls_outtab index l_index.
    endloop.
  endif.

endform.                               " select_data
*&---------------------------------------------------------------------*
*&      Form  fill_celltab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VALUE(P_MODE)  text
*      -->PT_CELLTAB     text
*----------------------------------------------------------------------*
form fill_celltab using value(p_mode)
                  changing pt_celltab type lvc_t_styl.
  data: ls_celltab type lvc_s_styl,
        l_mode type raw4.
* This forms sets the style of columns 'PRICE', FLDATE and PLANETYPE
* editable

  if p_mode eq 'RW'.
    l_mode = cl_gui_alv_grid=>mc_style_enabled.
  else.                                "p_mode eq 'RO'
    l_mode = cl_gui_alv_grid=>mc_style_disabled.
  endif.

  ls_celltab-fieldname = 'FLDATE'.
  ls_celltab-style = l_mode.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'PRICE'.
  ls_celltab-style = l_mode.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'PLANETYPE'.
  ls_celltab-style = l_mode.
  insert ls_celltab into table pt_celltab.

endform.                               " FILL_CELLTAB
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
form build_fieldcat changing pt_fieldcat type lvc_t_fcat.

  data ls_fcat type lvc_s_fcat.

  call function 'LVC_FIELDCATALOG_MERGE'
    exporting
      i_structure_name = 'SFLIGHT'
    changing
      ct_fieldcat      = pt_fieldcat.

  loop at pt_fieldcat into ls_fcat.
    if    ls_fcat-fieldname eq 'PRICE'
       or ls_fcat-fieldname eq 'PLANETYPE'
       or ls_fcat-fieldname eq 'FLDATE'.

* §1.Set status of columns FLDATA, PRICE and PLANETYPE to editable.
*    Since all cells are set to non-editable (see step 3) the cells
*    of this columns will only be editable for new lines.

      ls_fcat-edit = 'X'.

* Field 'checktable' is set to avoid shortdumps that are caused
* by inconsistend data in check tables. You may comment this out
* when the test data of the flight model is consistent in your system.
      ls_fcat-checktable = '!'.        "do not check foreign keys

      modify pt_fieldcat from ls_fcat.
    elseif ls_fcat-fieldname = 'CARRID'
       or ls_fcat-fieldname = 'CONNID'
       or ls_fcat-fieldname = 'CURRENCY'.

* §2.Use field AUTO_VALUE of the fieldcatalog to preset values when new
*    lines are added.

      ls_fcat-auto_value = 'X'.
      ls_fcat-checktable = '!'.   "do not check foreign key relations

      modify pt_fieldcat from ls_fcat.
    endif.

  endloop.

endform.                    "build_fieldcat
*&---------------------------------------------------------------------*
*&      Form  exclude_tb_functions
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LT_EXCLUDE  text
*----------------------------------------------------------------------*
*---------------------------------------------
form exclude_tb_functions changing pt_exclude type ui_functions.
*
  data ls_exclude type ui_func.

  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
  append ls_exclude to pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
  append ls_exclude to pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  append ls_exclude to pt_exclude.

endform.                               " EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module user_command_0100 input.
  save_ok = sy-ucomm.
  clear ok_code.
  case save_ok.
    when 'SAVE'.
*      perform save_data.
    when 'BACK'.
* §10.Unlock your database table.
*      perform unlock_sflight.
      leave to screen 0.
    when 'EXIT'.
      perform exit_program.
    when 'ADD'.
      perform add_line_item.
    when others.
*     do nothing
  endcase.
endmodule.                 " USER_COMMAND_0100  INPUT
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
form exit_program.
  leave program.
endform.                    "exit_program
*&---------------------------------------------------------------------*
*&      Form  ADD_LINE_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form add_line_item .
data: lt_rows type lvc_t_row.
data: wa_rows type lvc_t_row with header line.
data: tabix type sy-tabix.
*&Find the  row ( index ) number
 call method g_grid->get_selected_rows
          importing et_index_rows = lt_rows.
 call method cl_gui_cfw=>flush.
 read table lt_rows into wa_rows index 1.

 tabix = wa_rows-index .

insert gt_outtab  index tabix.
*REFRESH_TABLE_DISPLAY

call method g_grid->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.

endform.                    " ADD_LINE_ITEM

Thanks,

Chidanand

Read only

Former Member
0 Likes
1,347

Hi Vijay,

You can find a sample code for ALV using OOPS at this link.

[http://saptechnical.com/Tutorials/ALV/Interactive/oops.htm]

Regards,

Amit.

Read only

Former Member
0 Likes
1,347

Hi,

U can use SALV....this is the best for reporting.....


DATA: gr_table      TYPE REF TO cl_salv_table,
      gr_functions  TYPE REF TO cl_salv_functions,
      gr_layout     TYPE REF TO cl_salv_layout,
      gr_column     TYPE REF TO cl_salv_column_table,
      gr_columns    TYPE REF TO cl_salv_columns_table,
      gr_display    TYPE REF TO cl_salv_display_settings,
      gr_selections TYPE REF TO cl_salv_selections,
      gr_agg        TYPE REF TO cl_salv_aggregations,
      key           TYPE salv_s_layout_key VALUE sy-repid.

"Required------------------------------------------------
*&--Display the ALV
    cl_salv_table=>factory( IMPORTING r_salv_table = gr_table CHANGING t_table = it_mseg_mat ).

"Optional------------------------------------------------
*---Setting the ALV toolbar
    gr_functions = gr_table->get_functions( ).
    gr_functions->set_all( abap_true ).
*---Setting the Layout Save property
    gr_layout = gr_table->get_layout( ).
    gr_layout->set_key( key ).
    gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
*---Setting the list header
    gr_display = gr_table->get_display_settings( ).
    gr_display->set_list_header( header ).

"Optional------------------------------------------------
*---Setting the Columns/Layout
    gr_columns = gr_table->get_columns( ).
    gr_columns->set_key_fixation( abap_true ).
    gr_columns->set_color_column( 'COLOR' ).
*---Setting the key columns
    gr_column ?= gr_columns->get_column( 'MBLNR' ).
    gr_column->set_key( if_salv_c_bool_sap=>true ).
*---Setting the Selection mode
    gr_selections = gr_table->get_selections( ).
    gr_selections->set_selection_mode( 1 ).
*---Setting the Aggregate/Sum columns
    gr_agg = gr_table->get_aggregations( ).
    gr_agg->add_aggregation( 'MENGE' ).
    gr_agg->add_aggregation( 'DMBTR' ).

"Required------------------------------------------------
*---Displaying the ALV
    gr_table->display( ).

Search SCN for SALV....

regards

Sukriti...

Read only

Former Member
0 Likes
1,347

Use this sample code....

&----


*& REPORT ysample

*&

&----


report ysample.

*CLASS cl_gui_alv_grid DEFINITION LOAD.

types : begin of ty_output,

locid type /sapapo/locid,

locno type /sapapo/locno,

tzone type tznzone,

adrnummer type ad_addrnum,

end of ty_output.

data : t_output type table of ty_output,

l_output like line of t_output,

t_output1 type table of ty_output,

l_output1 like line of t_output1.

data : ref_container type ref to cl_gui_custom_container,

ref_alv type ref to cl_gui_alv_grid,

ref_container1 type ref to cl_gui_custom_container,

ref_alv1 type ref to cl_gui_alv_grid.

data : w_fcat type lvc_s_fcat,

w_layout type lvc_s_layo,

i_fcat type lvc_t_fcat,

i_fcat1 type lvc_t_fcat.

data : g_variant type disvariant,

g_save type flag,

i_sort type lvc_t_sort ,

w_sort type lvc_s_sort.

----


  • CLASS lcl_toolbar_event_receiver DEFINITION

----


*

----


class lcl_toolbar_event_receiver definition.

public section.

methods: on_double_click

for event double_click of cl_gui_alv_grid

importing e_row

e_column

es_row_no.

endclass. "lcl_toolbar_event_receiver DEFINITION

----


  • CLASS lcl_toolbar_event_receiver IMPLEMENTATION

----


*

----


class lcl_toolbar_event_receiver implementation.

method on_double_click.

read table t_output into l_output index e_row.

if sy-subrc = 0.

l_output1-locid = l_output-locid.

append l_output1 to t_output1.

clear l_output1.

endif.

call screen 200 starting at 10 5 .

endmethod. "on_double_click

endclass. "lcl_toolbar_event_receiver IMPLEMENTATION

data : event_receiver type ref to lcl_toolbar_event_receiver.

start-of-selection.

select locid locno tzone adrnummer

from /sapapo/loc

into table t_output.

end-of-selection.

call screen 100.

&----


*& Form fcat

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form fcat .

  • CLEAR w_fcat .

  • w_fcat-col_pos = 1.

  • w_fcat-fieldname = 'LOCID'.

  • w_fcat-coltext = 'LOCATIONID'.

  • w_fcat-ref_table = 'T_OUTPUT'.

  • APPEND w_fcat TO i_fcat.

clear w_fcat .

w_fcat-col_pos = 2.

w_fcat-fieldname = 'LOCNO'.

w_fcat-coltext = 'LOCATION'.

w_fcat-ref_table = 'T_OUTPUT'.

append w_fcat to i_fcat.

clear w_fcat .

w_fcat-col_pos = 3.

w_fcat-fieldname = 'TZONE'.

w_fcat-coltext = 'TIME-ZONE'.

w_fcat-ref_table = 'T_OUTPUT'.

append w_fcat to i_fcat.

clear w_fcat .

w_fcat-col_pos = 4.

w_fcat-fieldname = 'ADRNUMMER'.

w_fcat-coltext = 'ADDR-NO'.

w_fcat-ref_table = 'T_OUTPUT'.

append w_fcat to i_fcat.

endform. " fcat

&----


*& Form flayout

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form flayout .

w_layout-zebra = 'X'.

w_layout-cwidth_opt = 'X'.

w_layout-grid_title = 'Sample Program using ABAP Objects'.

endform. " flayout

&----


*& Form sort

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form sort .

w_sort-fieldname = 'LOCNO'.

  • w_sort-subtot = 'X'.

append w_sort to i_sort.

clear w_sort.

endform. " sort

&----


*& Form fcat1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form fcat1 .

clear w_fcat .

w_fcat-col_pos = 1.

w_fcat-fieldname = 'LOCID'.

w_fcat-coltext = 'LOCATIONID'.

w_fcat-ref_table = 'T_OUTPUT'.

append w_fcat to i_fcat1.

endform. "fcat1

&----


*& Module STATUS_0100 OUTPUT

&----


  • text

----


module status_0100 output.

set pf-status 'SAMPLE-TT'.

set titlebar 'TT'.

if ref_container is initial.

create object ref_container

exporting

container_name = 'CONTROL1'

exceptions

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5

others = 6.

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 ref_alv

exporting

i_parent = ref_container

exceptions

error_cntl_create = 1

error_cntl_init = 2

error_cntl_link = 3

error_dp_create = 4

others = 5.

if sy-subrc <> 0.

message id sy-msgid type sy-msgty number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

endif.

perform fcat.

perform flayout.

perform sort.

g_variant = sy-repid.

g_save = 'A'.

call method ref_alv->set_table_for_first_display

exporting

is_layout = w_layout

is_variant = g_variant

i_save = g_save

changing

it_outtab = t_output

it_fieldcatalog = i_fcat

it_sort = i_sort

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.

  • call method cl_gui_control=>set_focus exporting control = ref_container.

create object event_receiver.

set handler event_receiver->on_double_click for ref_alv.

else.

call method ref_alv->refresh_table_display.

endif.

endmodule. " STATUS_0100 OUTPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


module user_command_0100 input.

case sy-ucomm.

when 'EXIT' or 'BACK' .

call method ref_alv->free.

leave program.

when 'CANC'.

call method ref_container->free.

  • IF NOT ref_container1 IS INITIAL.

  • CALL METHOD ref_container1->free.

  • ENDIF.

call method cl_gui_cfw=>flush.

endcase.

endmodule. " USER_COMMAND_0100 INPUT

&----


*& Module STATUS_0200 OUTPUT

&----


  • text

----


module status_0200 output.

set pf-status 'SAMPLE-TT'.

set titlebar 'TT'.

if ref_container1 is initial.

create object ref_container1

exporting

container_name = 'CONTROL2'

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.

  • add your handling, for example

call function 'POPUP_TO_INFORM'

exporting

titel = sy-repid

txt2 = sy-subrc

txt1 = 'The control could not be created'(510).

endif.

create object ref_alv1

exporting

i_parent = ref_container1

exceptions

error_cntl_create = 1

error_cntl_init = 2

error_cntl_link = 3

error_dp_create = 4

others = 5.

if sy-subrc <> 0.

message id sy-msgid type sy-msgty number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

endif.

perform fcat1.

perform flayout.

g_variant = sy-repid.

g_save = 'A'.

call method ref_alv1->set_table_for_first_display

exporting

is_layout = w_layout

is_variant = g_variant

i_save = g_save

changing

it_outtab = t_output1

it_fieldcatalog = i_fcat1

  • it_sort = i_sort1

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 ref_alv1->refresh_table_display.

endif.

endmodule. " STATUS_0200 OUTPUT

&----


*& Module USER_COMMAND_0200 INPUT

&----


  • text

----


module user_command_0200 input.

case sy-ucomm.

when 'EXIT' or 'BACK' .

  • CALL METHOD ref_alv1->free.

when 'CANC'.

*call method ref_container->free.

  • IF NOT ref_container1 IS INITIAL.

  • CALL METHOD ref_container1->free.

  • ENDIF.

  • CALL METHOD cl_gui_cfw=>flush.

endcase.

clear t_output1[].

leave to screen 0.

endmodule. " USER_COMMAND_0200 INPUT

      • CREATE 2 SCREENS 100 & 200 with custom controls in them

Regards,

SAPient