2006 Feb 06 4:55 PM
Hi all,
I am new to ALV's. Though many say ALV's are easy I find it difficult to understand them reading theory or comprehending the codes in BCALV* in se38. Can any one forward me the sample ALV codes which you have developed so that I can go through the code and understand the concepts of ALV. I promise to award points to each and every answer.I can even give my mail id.
Regards,
Varun.
2006 Feb 06 5:14 PM
Hi Varun,
I've attached TWO Files.. which i found very good for beginners..
You'll be getting them soon..
Do inform me incase you dint receive them properly..
I'll resend them
regards
satesh
Message was edited by: Satesh R
Hi all,
I am new to ALV's. Though many say ALV's are easy I find it difficult to understand them reading theory or comprehending the codes in BCALV* in se38. Can any one forward me the sample ALV codes which you have developed so that I can go through the code and understand the concepts of ALV. I promise to award points to each and every answer.I can even give my mail id.
Regards,
Varun.
2006 Feb 06 4:58 PM
Hi Varun,
Just check this URL..You will find simple examples.
<a href="http://www.sap-basis-abap.com/sapabap01.htm">ALV program</a>
2006 Feb 06 4:58 PM
Here is a very basis example of using the CL_GUI_ALV_GRID in a screen.
REPORT ZRICH_0006.
TABLES: MARA.
TYPE-POOLS: SLIS, ICON.
* Internal Tables
DATA: BEGIN OF IALV OCCURS 0,
MATNR TYPE MARA-MATNR,
MAKTX TYPE MAKT-MAKTX,
END OF IALV .
* Miscellanous Variables
DATA: INDEX_ROWS TYPE LVC_T_ROW,
INDEX LIKE LINE OF INDEX_ROWS.
***********************************************************************
* CLASS cl_event_receiver DEFINITION
***********************************************************************
CLASS CL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN.
PRIVATE SECTION.
ENDCLASS.
***********************************************************************
* CLASS CL_EVENT_RECEIVER IMPLEMENTATION
***********************************************************************
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_DOUBLE_CLICK.
* Do Nothing
ENDMETHOD.
ENDCLASS.
DATA: ALV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
EVENT_RECEIVER TYPE REF TO CL_EVENT_RECEIVER,
ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
ROW_TABLE TYPE LVC_T_ROW WITH HEADER LINE,
OK_CODE LIKE SY-UCOMM,
LAYOUT TYPE LVC_S_LAYO,
FIELDCAT TYPE LVC_T_FCAT.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
START-OF-SELECTION.
PERFORM GET_DATA.
IF IALV[] IS INITIAL.
MESSAGE S429(MO).
EXIT.
ENDIF.
CALL SCREEN 100.
************************************************************************
* Module status_0100 OUTPUT
************************************************************************
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
************************************************************************
* Module ALV_0100 OUTPUT
************************************************************************
MODULE ALV_0100 OUTPUT.
DATA: VARIANT TYPE DISVARIANT.
DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
VARIANT-REPORT = SY-REPID.
VARIANT-USERNAME = SY-UNAME.
* Create Controls
CREATE OBJECT ALV_CONTAINER
EXPORTING CONTAINER_NAME = 'ALV_CONTAINER'.
* create Event Receiver
CREATE OBJECT EVENT_RECEIVER.
CREATE OBJECT ALV_GRID
EXPORTING I_PARENT = ALV_CONTAINER.
* Populate Field Catalog
PERFORM GET_FIELDCATALOG.
* Optionally restrict generic functions to 'change only'.
* (The user shall not be able to add new lines).
PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
* Set selection mode to "D" -- Multiple Lines
LAYOUT-SEL_MODE = 'D'.
CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = LAYOUT
IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
IS_VARIANT = VARIANT
I_SAVE = 'A'
I_STRUCTURE_NAME = 'IALV'
CHANGING
IT_OUTTAB = IALV[]
IT_FIELDCATALOG = FIELDCAT[].
* handler for ALV grid
SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR ALV_GRID.
ENDMODULE.
************************************************************************
* Module USER_COMMAND_0100 INPUT
************************************************************************
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'CANC'.
PERFORM FREE_CONTAINERS.
IF SY-SUBRC = 0.
SET SCREEN 0.
LEAVE SCREEN.
ELSE.
LEAVE PROGRAM.
ENDIF.
WHEN 'EXIT'.
PERFORM FREE_CONTAINERS.
LEAVE PROGRAM.
WHEN 'CONTINUE'.
* Retrieve selected rows from ALV grid
PERFORM GET_SELECTED_ROWS.
* Do something with those selected rows here
LOOP AT INDEX_ROWS INTO INDEX.
READ TABLE IALV INDEX INDEX-INDEX.
IF SY-SUBRC = 0.
* Insert code here
ENDIF.
ENDLOOP.
PERFORM FREE_CONTAINERS.
LEAVE TO SCREEN 100.
ENDCASE.
ENDMODULE.
*********************************************************************
* FORM GET_DATA.
*********************************************************************
FORM GET_DATA.
SELECT MARA~MATNR MAKT~MAKTX
INTO CORRESPONDING FIELDS OF TABLE IALV
FROM MARA
INNER JOIN MAKT
ON MARA~MATNR = MAKT~MATNR
WHERE MARA~MATNR IN S_MATNR
AND MAKT~SPRAS = SY-LANGU.
SORT IALV ASCENDING BY MATNR.
ENDFORM.
************************************************************************
* Form GET_SELECTED_ROWS
************************************************************************
FORM GET_SELECTED_ROWS.
* Get Selected rows from alv grid
CLEAR INDEX_ROWS. REFRESH INDEX_ROWS.
CALL METHOD ALV_GRID->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = INDEX_ROWS.
ENDFORM.
************************************************************************
* Form FREE_CONTAINERS
************************************************************************
FORM FREE_CONTAINERS.
IF NOT ALV_CONTAINER IS INITIAL.
CALL METHOD ALV_CONTAINER->FREE.
CLEAR: ALV_CONTAINER.
FREE : ALV_CONTAINER.
ENDIF.
ENDFORM.
************************************************************************
* Form Get_Fieldcatalog - Set Up Columns/Headers
************************************************************************
FORM GET_FIELDCATALOG.
DATA: LS_FCAT TYPE LVC_S_FCAT.
DATA: COLUMNNO(3) TYPE N VALUE '0'.
REFRESH: FIELDCAT.
CLEAR: LS_FCAT.
LS_FCAT-REPTEXT = 'Material Number'.
LS_FCAT-COLTEXT = 'Material Number'.
LS_FCAT-FIELDNAME = 'MATNR'.
LS_FCAT-REF_TABLE = 'IALV'.
LS_FCAT-OUTPUTLEN = '18'.
LS_FCAT-COL_POS = 1.
APPEND LS_FCAT TO FIELDCAT.
CLEAR: LS_FCAT.
LS_FCAT-REPTEXT = 'Material Description'.
LS_FCAT-COLTEXT = 'Material Description'.
LS_FCAT-FIELDNAME = 'MAKTX'.
LS_FCAT-REF_TABLE = 'IALV'.
LS_FCAT-OUTPUTLEN = '40'.
LS_FCAT-COL_POS = 2.
APPEND LS_FCAT TO FIELDCAT.
ENDFORM.
***********************************************************************
* Form EXCLUDE_TB_FUNCTIONS
***********************************************************************
FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
* Only allow to change data not to create new entries (exclude
* generic functions).
DATA LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
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_MOVE_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
ENDFORM.
REgards,
Rich Heilman
2006 Feb 06 4:59 PM
hi varun,
give your ID i'll forward you a detailed document on the same
regards
satesh
2006 Feb 06 5:01 PM
2006 Feb 06 5:04 PM
Hi Varun,
I have already send some ALV examples to your e-mail ID.
Lanka
2006 Feb 06 5:14 PM
Hi Varun,
I've attached TWO Files.. which i found very good for beginners..
You'll be getting them soon..
Do inform me incase you dint receive them properly..
I'll resend them
regards
satesh
Message was edited by: Satesh R
2006 Feb 06 5:19 PM
Hi varun ,
As every one says ALV's are very easy , simplified flexible way of displaying outputs.
1) the first and foremost thing that have to be thought is , collect the data to be dispalayed in an Internal table.
2) pass this Internal Table to a ALV Function Module.
thats it your ALV is at your Hands
eg: struct name "str1" ALV
-
s.no name rollno sub1 sub2 sub3
-
-
-
-
-
-
-
It has many parts to it.
The main function module Involved in this is
"REUSE_ALV_GRID_DISPLAY"
in EXPORTING pass
<u>i_structure_name =</u> the name of the structure that which the report should look like for the final ALV display for example it can be "str1" as mentioned above.
and set the field
under TABLES,
t_outtab = The final internal table where the data is available.
The above is the simplest alv.
there is also another part to the above Function Module , i.e Field Catalog . thatis you can mention the order in which the fields to be displayed as in .
the alV can also be modified like this
eg: struct name "str1" ALV
-
name sub1 rollno sub3 sub2 s.no
-
-
-
-
-
-
-
so you can do many things like you can add the totals of particular Column with out actually hard coding it. subtotals and many.
I would send all the example codes with the documentation once if you can give your personal email id.
DO REWARD ME POINTS IF THIS OF HELP TO YOU.
Regards,
Kishore Kumar Yerra.
2006 Feb 06 5:21 PM
Hi,
Check my previous reply. I have already posted my mail id.
Regards,
Varun.
2006 Feb 06 5:23 PM
Hi Varun,
The URL i gave contains simple examples & documentation for other ABAP stuff too which can be helpful.
2006 Feb 07 6:27 AM
Hi varun,
this is the simple example for grid display which i have done when i first trained in ALv.
tables:vbrk,vbrp,lips,kna1,vbap.
type-pools:slis.
data:g_fieldcat type slis_t_fieldcat_alv.
data:g_repid like sy-repid.
g_repid = sy-repid.
data:begin of itab occurs 0,
vbeln like vbrp-vbeln,
ernam1 like vbrk-ernam,
erdat1 like vbrk-erdat,
netwr like vbrk-netwr,
kunrg like vbrk-kunrg,
fkdat like vbrk-fkdat,
vbeln1 like vbrp-vbeln,
lmeng like vbrp-lmeng,
netwr1 like vbrp-netwr,
prctr like vbrp-prctr,
mwsbp like vbrp-mwsbp,
werks like vbrp-werks,
vkbur like vbrp-vkbur,
aubel like vbrp-aubel,
vgbel like vbrp-vgbel,
netpr like vbap-netpr,
vbeln2 like vbrk-vbeln,
name1 like kna1-name1,
land1 like kna1-land1,
ort02 like kna1-ort02,
%stax type i,
basic type i,
vb like lips-vbeln,
posnr like lips-posnr,
erzet type lips-erzet,
erdat type lips-erdat,
matnr like lips-matnr,
end of itab.
data:begin of it_vbrk occurs 0,
vbeln like vbrk-vbeln,
kunrg like vbrk-vbeln,
netwr like vbrk-netwr,
erdat like vbrk-erdat,
ernam like vbrk-ernam,
fkdat like vbrk-fkdat,
posnr like vbrp-posnr,
name1 like kna1-name1,
name2 like kna1-name2,
land1 like kna1-land1,
ort02 like kna1-ort02,
end of it_vbrk.
data:begin of it_kna1 occurs 0,
kunnr like kna1-kunnr,
name1 like kna1-name1,
name2 like kna1-name2,
land1 like kna1-land1,
ort02 like kna1-ort02,
end of it_kna1.
data:begin of it_lips occurs 0,
vbeln like lips-vbeln,
matnr like lips-matnr,
erzet like lips-erzet,
erdat like lips-erdat,
posnr like lips-posnr,
vgbel like lips-vgbel,
end of it_lips.
data:itab1 type slis_tabname.
itab1 = 'itab'.
selection-screen:begin of block b11 with frame title text-000.
select-options:s_vkbur for vbrp-vkbur,
s_fkdat for vbrk-fkdat,
s_vbeln for vbrk-vbeln,
s_werks for vbrp-werks,
s_aubel for vbrp-aubel.
selection-screen:end of block b11.
select vbeln ernam erdat netwr kunrg fkdat
from vbrk
into corresponding
fields of table it_vbrk
where vbeln in s_vbeln
and fkdat in s_fkdat.
select vvbeln vlmeng v~netwr
vprctr vmwsbp v~werks
vvkbur vaubel li~erzet
limatnr lierdat
liposnr livgbel
li~erzet from vbrp as v
inner join lips as li on
livgbel = vaubel
into corresponding fields of
table itab for all entries in it_vbrk
where v~vbeln = it_vbrk-vbeln
and v~werks in s_werks
and v~vkbur in s_vkbur
and v~aubel in s_aubel.
select kunnr name1 land1 ort02
from kna1 into corresponding
fields of table it_kna1
for all entries in it_vbrk
where kunnr = it_vbrk-kunrg.
select vbeln matnr erzet erdat posnr vgbel from lips
into corresponding fields
of table it_lips
for all entries in itab
where vgbel = itab-aubel.
perform fill_fieldcat using g_fieldcat.
data:vtabix like sy-tabix,
utabix like sy-tabix.
loop at it_vbrk.
utabix = sy-tabix.
read table it_kna1 with key it_vbrk-kunrg.
if sy-subrc = 0.
it_vbrk-name1 = it_kna1-name1.
it_vbrk-land1 = it_kna1-land1.
it_vbrk-ort02 = it_kna1-ort02.
endif.
modify it_vbrk index utabix.
endloop.
loop at itab.
vtabix = sy-tabix.
read table it_vbrk with key itab-vbeln.
if sy-subrc = 0.
itab-vbeln2 = it_vbrk-vbeln.
itab-netwr1 = itab-netwr.
itab-netwr = it_vbrk-netwr.
itab-erdat1 = it_vbrk-erdat.
itab-ernam1 = it_vbrk-ernam.
itab-fkdat = it_vbrk-fkdat.
itab-kunrg = it_vbrk-kunrg.
itab-name1 = it_vbrk-name1.
itab-land1 = it_vbrk-land1.
itab-ort02 = it_vbrk-ort02.
itab-basic = itab-netwr - itab-mwsbp.
if itab-lmeng = 0.
itab-netpr = itab-netwr1.
else.
itab-netpr = itab-netwr1 / itab-lmeng.
endif.
if itab-netwr = 0.
itab-%stax = 0.
else.
itab-%stax = ( itab-mwsbp / itab-netwr ) * 100.
endif.
read table it_lips with key
matnr = itab-matnr
erzet = itab-erzet
erdat = itab-erdat
posnr = itab-posnr
vgbel = itab-aubel.
itab-vb = it_lips-vbeln.
modify itab index vtabix.
endif.
endloop.
perform grid_display.
form fill_fieldcat using g1_fieldcat type slis_t_fieldcat_alv.
data:s_g_fieldcat type slis_fieldcat_alv.
data:col type i value 1.
s_g_fieldcat-fieldname = 'VBELN2'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBRK'.
s_g_fieldcat-seltext_m = 'BILLING DOCUMENT'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'FKDAT'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBRK'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'AUBEL'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'vbrP'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'VB'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'lips'.
s_g_fieldcat-seltext_m = 'DELIVERY DOCUMENT'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'POSNR'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'lips'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'WERKS'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'vbrp'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'KUNRG'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBRK'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'ERDAT1'.
s_g_fieldcat-seltext_m = 'created date'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'vbrk'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'NAME1'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'KNA1'.
s_g_fieldcat-seltext_m = 'NAME OF CUSTOMER'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'LAND1'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'KNA1'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'ORT02'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'KNA1'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'MATNR'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBrp'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'LMENG'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'vbrp'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'NETPR'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBAP'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'NETWR1'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBRP'.
s_g_fieldcat-seltext_m = 'PRICE'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'NETWR'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'VBRK'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'MWSBP'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'vbrp'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = '%STAX'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-col_pos = col.
s_g_fieldcat-seltext_m = '%SALESTAX'.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'BASIC'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-seltext_m = 'BASIC SALARY'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
s_g_fieldcat-fieldname = 'PRCTR'.
s_g_fieldcat-tabname = itab.
s_g_fieldcat-ref_tabname = 'vbrp'.
s_g_fieldcat-col_pos = col.
col = col + 1.
append s_g_fieldcat to g1_fieldcat.
clear s_g_fieldcat.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = g_repid
i_internal_tabname = itab1
changing
ct_fieldcat = g1_fieldcat.
endform.
form grid_display.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = 'G_REPID'
it_fieldcat = g_fieldcat[]
tables
t_outtab = itab
exceptions
program_error = 1
others = 2
.
endform.
cheers,
Sunil kumar reddy.