‎2005 Dec 28 4:55 AM
Hi all, if you refer back to my earlier post, i would like to know how to use ALV and if i would need to use a special transaction code to do it.
I have 3 columns that are named Description, Material PO Text and Item Text. The records retrieved for these columns would likely exceed the 40 character space that i have assigned in my original program when the report is generated. I was informed by my consultant that i should consider using ALVs to solve it.
Any advice, hints or resources you could let me know about, so i would know where to begin?
Thanks in advance
‎2005 Dec 28 4:57 AM
I posted an answer to your other post, but you created a new post.
ALV is ABAP List Viewer. This is functionality provided by SAP. There are two ways of coding an ALV for your report. You can use the function module way or the class/method way. Since you are new to ABAP, I will not confuse you with ABAP OO yet. Here is a sample program showing you how to code an ALV grid using the function module.
report zrich_0004
no standard page heading.
type-pools slis.
data: fieldcat type slis_t_fieldcat_alv.
data: begin of imara occurs 0,
matnr type mara-matnr,
maktx type makt-maktx,
end of imara.
* Selection Screen
selection-screen begin of block b1 with frame title text-001 .
select-options: s_matnr for imara-matnr .
selection-screen end of block b1.
start-of-selection.
perform get_data.
perform write_report.
************************************************************************
* Get_Data
************************************************************************
form get_data.
select mara~matnr makt~maktx
into corresponding fields of table imara
from mara
inner join makt
on mara~matnr = makt~matnr
where mara~matnr in s_matnr
and makt~spras = sy-langu.
endform.
************************************************************************
* WRITE_REPORT
************************************************************************
form write_report.
perform build_field_catalog.
* CALL ABAP LIST VIEWER (ALV)
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fieldcat
tables
t_outtab = imara.
endform.
************************************************************************
* BUILD_FIELD_CATALOG
************************************************************************
form build_field_catalog.
data: fc_tmp type slis_t_fieldcat_alv with header line.
clear: fieldcat. refresh: fieldcat.
clear: fc_tmp.
fc_tmp-reptext_ddic = 'Material Number'.
fc_tmp-fieldname = 'MATNR'.
fc_tmp-tabname = 'IMARA'.
fc_tmp-outputlen = '18'.
fc_tmp-col_pos = 2.
append fc_tmp to fieldcat.
clear: fc_tmp.
fc_tmp-reptext_ddic = 'Material'.
fc_tmp-fieldname = 'MAKTX'.
fc_tmp-tabname = 'IMARA'.
fc_tmp-outputlen = '40'.
fc_tmp-col_pos = 3.
append fc_tmp to fieldcat.
endform.
Regards,
Rich Heilman
‎2005 Dec 28 4:59 AM
‎2005 Dec 28 5:00 AM
hi,
visit http://www.sapdevelopment.co.uk/alvhome
to understand alv's.
and even you can see lot of programs in SLIS package.
vijay
‎2005 Dec 28 5:01 AM
Hi Bernard,
1. REUSE_ALV_LIST_DISPLAY
REUSE_ALV_FIELDCATALOG_MERGE
These are the two functions which are required
to display in ALV List or ALV Grid.
2. Just see the documentation on it.
Regards,
Amit M.
‎2005 Dec 28 5:05 AM
Here's another example of OO alv grid. Probably will not add any value, but an example none the less. It uses a dynpro screen 100. Create screen 100, uncomment the modules in the flow logic, add a custom container to the screen called ALV_CONTAINER.
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'.
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
‎2005 Dec 28 5:25 AM
Hi Bernard,
1. try this program (just copy paste)
While using ALV,
there are some things which are required,
optional etc.
I have kept the bare minimum coding.
along with comments.
2 The documentation on these both FMs
will definitely help u a lot.
REPORT abc .
*----
NECESSARY / MUST
TYPE-POOLS : slis.
DATA : alvfc TYPE slis_t_fieldcat_alv.
*----
ITAB DECLARATION
DATA : prg TYPE sy-repid.
DATA : BEGIN OF itab OCCURS 0.
INCLUDE STRUCTURE t001.
DATA : END OF itab.
*----
SELECT
SELECT * FROM t001
INTO TABLE itab..
prg = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = prg
i_internal_tabname = 'ITAB'
CHANGING
ct_fieldcat = alvfc
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
it_fieldcat = alvfc
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2
.
Regards,
Amit M.