You are on page 1of 5

*&---------------------------------------------------------------------*

*& report zalvtest1 *


*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

report zalvtest1 .

type-pools: slis.
data: v_temp type p decimals 2.
data: v_f1_sum type i,
v_f2_sum type i.
data: begin of struct_customer,
customer like kna1-kunnr,
field1 type i,
field2 type i,
field3 type i,
end of struct_customer.

data: i_layout type slis_layout_alv,


i_fieldtab type slis_t_fieldcat_alv,
i_heading type slis_t_listheader,
i_events type slis_t_event.

data: rs_sort type slis_t_sortinfo_alv.

data: v_cust type kna1-kunnr.


data: begin of itab occurs 0,
customer like kna1-kunnr,
field1 type i,
field2 type i,
field3 type i,
end of itab.
data: begin of itab1 occurs 0,
customer like kna1-kunnr,
field1 type i,
field2 type i,
field3 type i,
end of itab1.
data: formname_top_of_page type slis_formname value 'top_of_page'.
data: formname_subtotal_text type slis_formname value 'subtotal_text'.
data: formname_end_of_page type slis_formname value 'end_of_page'.
data: formname_end_of_list type slis_formname value 'end_of_list'.

data: formname_after_line_output type slis_formname value 'line_output'.

start-of-selection.

perform fill_itab.
perform fill_cat.
perform set_sort.
perform fill_event.
perform display_data.
end-of-selection.

*&---------------------------------------------------------------------*
*& form fill_itab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fill_itab .
data: l_ctr type i.

itab-customer = 1.itab-field1 = 1.itab-field2 = 2.append itab.


clear itab.

itab-customer = 2.itab-field1 = 3.itab-field2 = 4.append itab.


clear itab.

itab-customer = 3.itab-field1 = 2.itab-field2 = 5.append itab.


clear itab.

itab-customer = 4.itab-field1 = 1.itab-field2 = 10.append itab.


clear itab.

loop at itab.
v_temp = itab-field1 / itab-field2.
itab-field3 = v_temp * 100.
modify itab.
v_f1_sum = v_f1_sum + itab-field1.
v_f2_sum = v_f2_sum + itab-field2.

endloop.

endform. " fill_itab


*&---------------------------------------------------------------------*
*& form fill_cat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fill_cat .

data: l_fieldcat type slis_fieldcat_alv.


clear l_fieldcat.
l_fieldcat-col_pos = 1.
l_fieldcat-tabname = 'itab'.
l_fieldcat-fieldname = 'customer'.
l_fieldcat-ref_tabname = 'kna1'.
l_fieldcat-ref_fieldname = 'kunnr'.
l_fieldcat-key = 'x'.
append l_fieldcat to i_fieldtab.

clear l_fieldcat.

clear l_fieldcat.
l_fieldcat-col_pos = 3.
l_fieldcat-tabname = 'itab'.
l_fieldcat-fieldname = 'field1'.
* l_fieldcat-do_sum = 'x'.
l_fieldcat-no_zero = 'x'.
l_fieldcat-seltext_l ='value1'.
l_fieldcat-seltext_m ='value1'.
l_fieldcat-seltext_s ='value1'.

* l_fieldcat-key = 'x'.
append l_fieldcat to i_fieldtab.

clear l_fieldcat.
l_fieldcat-col_pos = 4.
l_fieldcat-tabname = 'itab'.
l_fieldcat-fieldname = 'field2'.

* l_fieldcat-do_sum = 'x'.
l_fieldcat-no_zero = 'x'.
l_fieldcat-seltext_l ='value2'.
l_fieldcat-seltext_m ='value2'.
l_fieldcat-seltext_s ='value2'.

* l_fieldcat-key = 'x'.
append l_fieldcat to i_fieldtab.

clear l_fieldcat.
l_fieldcat-col_pos = 5.
l_fieldcat-tabname = 'itab'.
l_fieldcat-fieldname = 'field3'.

* l_fieldcat-do_sum = 'x'.
l_fieldcat-no_zero = 'x'.
l_fieldcat-seltext_l ='value3'.
l_fieldcat-seltext_m ='value3'.
l_fieldcat-seltext_s ='value3'.
append l_fieldcat to i_fieldtab.

endform. " fill_cat


*&---------------------------------------------------------------------*
*& form display_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form display_data .
call function 'reuse_alv_list_display'
exporting
i_callback_program = 'zalvtest2'
is_layout = i_layout
it_fieldcat = i_fieldtab
i_default = 'x'
i_save = ' '
it_events = i_events[]
tables
t_outtab = itab
* exceptions
* program_error = 1
* others = 2
.
if sy-subrc <> 0.
* message id sy-msgid type sy-msgty number sy-msgno
* with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

endform. " display_data


*&---------------------------------------------------------------------*
*& form set_sort
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form set_sort .
i_layout-zebra = 'x'.

data: ls_sort type slis_sortinfo_alv.

clear ls_sort.
ls_sort-spos = 1.
ls_sort-fieldname = 'customer'.
ls_sort-tabname = 'itab'.
ls_sort-up = 'x'.
append ls_sort to rs_sort.

endform. " set_sort


*&---------------------------------------------------------------------*
*& form fill_event
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fill_event .

data: l_i_event type slis_alv_event.

call function 'reuse_alv_events_get'


exporting
i_list_type = 0
importing
et_events = i_events.

read table i_events with key name = slis_ev_after_line_output


into l_i_event.

if sy-subrc = 0.
move formname_after_line_output to l_i_event-form.
modify i_events from l_i_event index sy-tabix.
endif.

endform. " fill_event


*&---------------------------------------------------------------------*
*& form after_line_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form line_output using rs_lineinfo type slis_lineinfo.
data: l_tabix like sy-tabix.
data: l_tabix1 like sy-tabix.
data: str_kunnr like struct_customer.

check rs_lineinfo-tabindex ne 0.
l_tabix = rs_lineinfo-tabindex.
read table itab index l_tabix.
l_tabix1 = rs_lineinfo-tabindex + 1.

struct_customer-customer = itab-customer.

read table itab into str_kunnr index l_tabix1 transporting customer.


if sy-subrc <> 0.

v_temp = ( v_f1_sum / v_f2_sum ) * 100.

uline at (45).

skip.

uline at (45).

write: / sy-vline , 'total',


12 sy-vline , (9) v_f1_sum,
23 sy-vline , (9) v_f2_sum,
34 sy-vline , (9) v_temp decimals 0,
45 sy-vline.

*uline at (46).

endif.

endform. " after_line_output

You might also like