‎2008 Mar 17 1:06 PM
Hello ppl,
I need a good and complete example of ALV, which follows good amount of standard conventions.
the details of fields and tables are as follows:-
table: KNA1
fields: KUNNR (Customer Number 1)
ORT01 (City)
PSTLZ (Postal Code)
REGIO (Region (State, Province, County)
table: KNB1
fields:BUKRS(Company Code)
ZTERM(Terms of payment key)
table: KNVP
fields:VKORG(Sales Organization)
VTWEG(Distribution Channel)
SPART(Division)
KUNN2(Customer number of business partner)
LIFNR(Account Number of Vendor or Creditor)
‎2008 Mar 17 1:25 PM
‎2008 Mar 17 1:25 PM
‎2008 Mar 17 2:06 PM
Hello Faisal
Have a look at my sample reports ZUS_SDN_TWO_ALV_GRIDS and ZUS_SDN_THREE_ALV_GRIDS in threads:
Regards
Uwe
‎2008 Mar 17 2:51 PM
Hi friend! You can take as a sample the standard program BCALV_GRID_01. Take a look on it's code, it'll surely help you!
program bcalvc_print.
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
* Purpose:
* ~~~~~~~~
* This program illustrates how the events for print processing
* - PRINT_TOP_OF_PAGE
* - PRINT_END_OF_PAGE
* - PRINT_TOP_OF_LIST
* - PRINT_END_OF_LIST
*
* are handled. The corresponding handler methods control the
* appearance of the list printed.
*-----------------------------------------------------------------
* To check program behavior
* ~~~~~~~~~~~~~~~~~~~~~~~~~
* Print the list shown (It has got only three pages).
* Remark: If you choose "Druckansicht" (preview?!) before printing,
* the output for event PRINT_END_OF_PAGE is left out due
* to scrolling.
* Create a spool entry and preview your printout by calling
* TA sp01 to reduce paper output please.
*-----------------------------------------------------------------
* Essential steps (Search for '§')
* ~~~~~~~~~~~~~~~
* 1. Define a (local) class for event handling
* 2. Define a method for each print event you need.
* 3. Implement your event handler methods. Use WRITE to provide output.
* 4. Link used print events and event handler methods.
* 5. In case of PRINT_END_OF_PAGE, you must set 'reservelns' to
* the number of reserved lines at the end of a page.
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*********
* Predefine a local class for event handling to allow the
* declaration of a reference variable.
class lcl_event_receiver definition deferred.
*
*********
data: ok_code like sy-ucomm,
g_max type i value 100,
gt_sflight type table of sflight,
g_repid like sy-repid,
gs_print type lvc_s_prnt,
gs_layout type lvc_s_layo,
mycontainer type scrfname value 'BCALVC_EVENT1_CONT1',
* reference to custom container: neccessary to bind ALV Control
custom_container type ref to cl_gui_custom_container,
grid1 type ref to cl_gui_alv_grid,
event_receiver type ref to lcl_event_receiver.
* § Step 1. Define a (local) class for event handling
****************************************************************
* LOCAL CLASSES: Definition
****************************************************************
*===============================================================
* class c_event_receiver: local class to handle print events...
* - PRINT_TOP_OF_PAGE (page header)
* - PRINT_END_OF_PAGE (page footer)
* - PRINT_TOP_OF_LIST (list header)
* - PRINT_END_OF_LIST (list footer)
*
* Definition:
* ~~~~~~~~~~~
class lcl_event_receiver definition.
public section.
* § 2. Define a method for each print event you need.
methods:
handle_top_of_page
for event print_top_of_page of cl_gui_alv_grid,
handle_end_of_page
for event print_end_of_page of cl_gui_alv_grid,
handle_top_of_list
for event print_top_of_list of cl_gui_alv_grid,
handle_end_of_list
for event print_end_of_list of cl_gui_alv_grid.
private section.
data: pagenum type i.
endclass.
*
* c_event_receiver (Definition)
*===============================================================
****************************************************************
* LOCAL CLASSES: Implementation
****************************************************************
*===============================================================
* class c_event_receiver (Implementation)
*
class lcl_event_receiver implementation.
*§ 3. Implement your event handler methods. Use WRITE to provide output.
method handle_top_of_page.
data: tablename(30) type c.
perform get_tablename changing tablename.
write: /,'Event: PRINT_TOP_OF_PAGE'(001),
'Table: '(002),tablename.
endmethod. "handle_top_of_page
*-------------------------------------------
method handle_end_of_page.
data: tablename(30) type c.
perform get_tablename changing tablename.
add 1 to pagenum.
write: /,'Event: PRINT_END_OF_PAGE'(003),
text-002,tablename,
'Number of pages so far: '(004), pagenum.
endmethod. "handle_end_of_page
*-------------------------------------------
method handle_top_of_list.
data: tablename(30) type c.
clear pagenum.
perform get_tablename changing tablename.
write: /,'Event: PRINT_TOP_OF_LIST'(005),
text-002,tablename.
endmethod. "handle_top_of_list
*-------------------------------------------
method handle_end_of_list.
data: tablename(30) type c.
perform get_tablename changing tablename.
write: /,'Event: PRINT_END_OF_LIST'(006),
text-002,tablename.
endmethod. "handle_end_of_list
*-------------------------------------------
endclass.
*
* c_event_receiver (Implementation)
*===================================================================
start-of-selection.
select * from sflight into table gt_sflight up to g_max rows.
*
end-of-selection.
g_repid = sy-repid.
call screen 100.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
module pbo output.
set pf-status 'MAIN100'.
set titlebar 'MAIN100'.
if custom_container is initial.
* create a custom container control for our ALV Control
create object custom_container
exporting
container_name = mycontainer
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
if sy-subrc ne 0.
* add your handling, for example
call function 'POPUP_TO_INFORM'
exporting
titel = g_repid
txt2 = sy-subrc
txt1 = 'The control could not be created'(010).
endif.
* create an instance of alv control
create object grid1
exporting i_parent = custom_container.
*
* Set a titlebar for the grid control
*
gs_layout-grid_title = 'Flights'(100).
* § 5. In case of PRINT_END_OF_PAGE, you must set 'reservelns' to
* the number of reserved lines at the end of a page.
*
* reserve two lines for the PRINT_END_OF_PAGE event
*
gs_print-reservelns = 2.
********
* ->Create Object to receive events and link them to handler methods.
* When the ALV Control raises the event for the specified instance
* the corresponding method is automatically called.
*
********
* § 4. Link used print events and event handler methods.
create object event_receiver.
set handler event_receiver->handle_top_of_list for grid1.
set handler event_receiver->handle_top_of_page for grid1.
set handler event_receiver->handle_end_of_list for grid1.
set handler event_receiver->handle_end_of_page for grid1.
*
call method grid1->set_table_for_first_display
exporting i_structure_name = 'SFLIGHT'
is_print = gs_print
is_layout = gs_layout
changing it_outtab = gt_sflight.
endif.
* Controls are not integrated into the TAB-Order
* Call "set_focus" if you want to make sure that 'the cursor'
* is active in your control.
call method cl_gui_control=>set_focus exporting control = grid1.
* Control Framework flushes at the end of PBO automatically!
endmodule.
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
module pai input.
case ok_code.
when 'EXIT'.
perform exit_program.
endcase.
clear ok_code.
endmodule.
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
form exit_program.
call method 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.
*&---------------------------------------------------------------------*
*& Form GET_TABLENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_TABLENAME text
*----------------------------------------------------------------------*
form get_tablename changing p_tablename.
data: lt_fieldcat type standard table of lvc_s_fcat,
ls_fieldcat type lvc_s_fcat.
call method grid1->get_frontend_fieldcatalog
importing et_fieldcatalog = lt_fieldcat.
call method cl_gui_cfw=>flush.
if sy-subrc <> 0.
p_tablename = 'No tablename in fieldcatalog!'(008).
call function 'POPUP_TO_INFORM'
exporting
titel = g_repid
txt2 = p_tablename
txt1 = 'Error in Flush'(011).
else.
read table lt_fieldcat index 1 into ls_fieldcat.
p_tablename = ls_fieldcat-ref_table.
endif.
endform. " GET_TABLENAME
‎2008 Mar 17 3:40 PM