2011 Dec 14 7:51 AM
Hi sir/mam
i'm sreekar can any one help me on this please
"As I took a variable 'STR' with 255 length, But still ALV GRID DISPLAYS the same 132 characters, and
When I download the report into excel it is showing the 250 charactered text"
how can i print it in alv grid
FORM BUID_CATALOG .
DATA : COL_POS TYPE I.
COL_POS = COL_POS + 1.
*--DECLARING FIELDCATALOG FOR HEADER
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'EBELN'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Purch.doc.no.'(002).
LT_FCAT-REF_FIELDNAME = 'EBELN'.
LT_FCAT-REF_TABNAME = 'EKKO'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'BEDAT'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Po Date'(003).
LT_FCAT-REF_FIELDNAME = 'EBDAT'.
LT_FCAT-EDIT_MASK = '__.__.____'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'EKGRP'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Purch.Grp'(004).
LT_FCAT-REF_FIELDNAME = 'BKGRP'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'EKNAM'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Purch.Grp. Name'(005).
LT_FCAT-REF_FIELDNAME = 'EKNAM'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'LIFNR'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Vendor No.'(006).
LT_FCAT-REF_FIELDNAME = 'ELIFN'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'NAME1'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Vendor Name'(007).
LT_FCAT-REF_FIELDNAME = 'NAME1_GP'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'ZTERM'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Pay.Code'(008).
LT_FCAT-REF_FIELDNAME = 'ZTERM'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'TEXT1'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Own explanation'(009).
LT_FCAT-REF_FIELDNAME = 'DZTERM'.
LT_FCAT-OUTPUTLEN = '30'.
LT_FCAT-DDICTXT = 'L'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'WAERS'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Curr'(010).
LT_FCAT-REF_FIELDNAME = 'WAERS'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
LT_FCAT-COL_POS = COL_POS.
LT_FCAT-FIELDNAME = 'NETWR'.
LT_FCAT-TABNAME = 'LT_FINAL'.
LT_FCAT-SELTEXT_L = 'Net Value'(011).
LT_FCAT-REF_FIELDNAME = 'BWERT'.
APPEND LT_FCAT.
CLEAR LT_FCAT.
ENDFORM. " BUID_CATALOG
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BUFFER_ACTIVE = 'X'
I_BACKGROUND_ID = 'ALV_BACKGROUND'
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = LT_FCAT[]
I_SAVE = G_SAVE
IS_VARIANT = GS_VARIANT
IMPORTING
E_EXIT_CAUSED_BY_CALLER = G_EXIT_CAUSED_BY_CALLER
ES_EXIT_CAUSED_BY_USER = GS_EXIT_CAUSED_BY_USER
TABLES
T_OUTTAB = LT_FINAL[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC = 0.
IF G_EXIT_CAUSED_BY_CALLER = 'X'.
ELSE.
IF GS_EXIT_CAUSED_BY_USER-BACK = 'X'. "F3
EXIT.
ELSE.
IF GS_EXIT_CAUSED_BY_USER-EXIT = 'X'. "F15
LEAVE TO SCREEN 1000.
ELSE.
IF GS_EXIT_CAUSED_BY_USER-CANCEL = 'X'. "F12
LEAVE TO SCREEN 1000.
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDFORM. " DISPLAY_DATA
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'F15' "ls_thead-tdid PAYMENT TERMS
LANGUAGE = SY-LANGU "ls_thead-tdspras "CURRENT LANGUAGE 'E'
NAME = NAME "ls_thead-tdname PO NUMBER LW_EKKO-EBELN
OBJECT = 'EKKO' "ls_thead-tdobject TABLE NAME EKKO
IMPORTING
HEADER = HTEXT
TABLES
LINES = LTEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC = 0.
LOOP AT LTEXT.
IF LTEXT-TDLINE NE ''.
MOVE LTEXT-TDLINE TO WA_WORD-TEXT.
APPEND WA_WORD TO LT_SENTENCE.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT LT_SENTENCE INTO WA_WORD.
COUNT = COUNT + 1.
IF COUNT = 1.
STR = WA_WORD-TEXT.
LW_FINAL-TEXT1 = STR.
ELSEIF COUNT = 2 OR COUNT = 3 OR COUNT = 4 OR COUNT = 5 OR COUNT = 6 OR COUNT = 7 OR COUNT = 8.
CONCATENATE STR WA_WORD-TEXT INTO STR SEPARATED BY SPACE.
LW_FINAL-TEXT1 = STR.
ENDIF.
ENDLOOP.
2011 Dec 14 8:14 AM
Hi,
I think you ll have to use word wrap functionality for that particular column to achieve this functionality. As such i dont think a column in ALV can hold more than 132 characters.
You will have to use word wrap to extend this particular column over two lines so that the whole text is displayed.
Use function module 'RKD_WORD_WRAP' to split your field which has length more than 132 characters into two. In Reuse_alv_grid_display display only first line.
Use event AFTER_LINE_OUTPUT to display the second line. Hope this helps
Regards,
Arun
2011 Dec 14 8:14 AM
Hi,
I think you ll have to use word wrap functionality for that particular column to achieve this functionality. As such i dont think a column in ALV can hold more than 132 characters.
You will have to use word wrap to extend this particular column over two lines so that the whole text is displayed.
Use function module 'RKD_WORD_WRAP' to split your field which has length more than 132 characters into two. In Reuse_alv_grid_display display only first line.
Use event AFTER_LINE_OUTPUT to display the second line. Hope this helps
Regards,
Arun
2011 Dec 14 9:19 AM
can you provide an example of how to wrap the text i have like this please see the below code and correct if any errors
FORM GET_TEXT_LINES .
DATA :NAME TYPE THEAD-TDNAME.
NAME = LW_EKKO-EBELN.
V_TABIX = SY-TABIX.
*********************************************************************
CALLING FUNCTION READ_TEXT FOR PAYMENT TEXTS
*********************************************************************
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT "CLIENT ID 200/600/400
ID = 'F15' "ls_thead-tdid "PAYMENT TERMS TEXT ID 'F15'
LANGUAGE = SY-LANGU "ls_thead-tdspras "CURRENT LANGUAGE 'E'
NAME = NAME "ls_thead-tdname "PO NUMBER LW_EKKO-EBELN
OBJECT = 'EKKO' "ls_thead-tdobject "TABLE NAME EKKO
IMPORTING
HEADER = HTEXT "LS_THEAD
TABLES
LINES = LTEXT "LT_LINES[]
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC = 0.
LOOP AT LTEXT.
IF LTEXT-TDLINE NE ''.
MOVE LTEXT-TDLINE TO WA_WORD-TEXT.
APPEND WA_WORD TO LT_SENTENCE.
ENDIF.
ENDLOOP.
ENDIF.
Word Wrap the text in multiple lines
LOOP AT LT_SENTENCE INTO WA_WORD.
CALL FUNCTION 'RKD_WORD_WRAP'
EXPORTING
TEXTLINE = WA_WORD-TEXT
OUTPUTLEN = 100
TABLES
OUT_LINES = LT_SENTENCE
EXCEPTIONS
OUTPUTLEN_TOO_LARGE = 1
OTHERS = 2.
IF SY-SUBRC EQ 0.
IF not LT_SENTENCE IS INITIAL.
READ TABLE LT_SENTENCE INTO WA_WORD INDEX v_tabix.
LW_FINAL-TEXT1 = WA_WORD_TEXT.
MODIFY LT_FINAL FROM LW_FINAL INDEX V_TABIX.
ENDLOOP.
CLEAR: LT_SENTENCE.
ENDFORM. " GET_TEXT_LINES
&----
*& Form LAYOUT_INIT
&----
text
----
-->P_GS_LAYOUT text
----
FORM LAYOUT_INIT USING RS_LAYOUT TYPE SLIS_LAYOUT_ALV.
*"Build layout for list display
RS_LAYOUT-DETAIL_POPUP = 'X'.
ENDFORM. " LAYOUT_INIT
&----
*& Form EVENTTAB_BUILD
&----
text
----
-->P_GT_EVENTS[] text
----
FORM EVENTTAB_BUILD USING RT_EVENTS TYPE SLIS_T_EVENT.
*"Registration of events to happen during list display
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = RT_EVENTS.
READ TABLE RT_EVENTS WITH KEY NAME = SLIS_EV_AFTER_LINE_OUTPUT
INTO LS_EVENT.
IF SY-SUBRC = 0.
APPEND LS_EVENT TO RT_EVENTS.
ENDIF.
ENDFORM. " EVENTTAB_BUILD
&----
*& Form AFTER_LINE_OUTPUT
&----
text
----
--> p1 text
<-- p2 text
----
FORM AFTER_LINE_OUTPUT.
CLEAR :COUNT,LT_SENTENCE.
LOOP AT LT_SENTENCE INTO WA_WORD.
READ TABLE LT_SENTENCE INTO WA_WORD INDEX V_TABIX.
CHECK SY-SUBRC = 0.
CALL FUNCTION 'RKD_WORD_WRAP'
EXPORTING
TEXTLINE = WA_WORD-TEXT
OUTPUTLEN = 20
TABLES
OUT_LINES = LT_SENTENCE.
DESCRIBE TABLE LT_SENTENCE LINES V_TABIX.
CHECK V_TABIX > 1.
COUNT = COUNT + 1.
IF COUNT = 1.
STR = WA_WORD-TEXT.
LW_FINAL-TEXT1 = STR.
ELSEIF COUNT = 2 OR COUNT = 3 OR COUNT = 4 OR COUNT = 5 OR COUNT = 6 OR COUNT = 7 OR COUNT = 8.
CONCATENATE STR WA_WORD-TEXT INTO STR SEPARATED BY SPACE.
LW_FINAL-TEXT1 = STR.
ENDIF.
ENDLOOP.
ENDFORM. " AFTER_LINE_OUTPUT
2011 Dec 14 3:19 PM
I utilize function module RKD_WORD_WRAP and then insert the rows into the table to be displayed in the ALV, duplicating the "key" fields into the new text rows....Then call the ALV with cell merging on, sorted, etc.
presents one row with all values, then additional rows with only the additional text displayed.
2011 Dec 15 9:10 AM
Hi,
Breakpoint s suggestion is much simpler and i guess you should follow it.
Use RKD_WORD_WRAP to break long text into two or three lines. Then while filling the Internal table, duplicate the key fields for all subsequent lines
For eg , let fields be MATNR , PLANT and LONG TEXT. This is how the internal table should be populated
first row - 1000 100 abcdefgh
second row 1000 100 ijklmnopq
third row 1000 100 rstuvwxyz
Hope you got the drift. Then populate IT_SORT table and make use of Merge cells option also ( I think default is Merge , so maybe nothing needs to be done just check it up once. )
Once this is done , during actual display of ALV the report will be displayed as follows:
first row - 1000 100 abcdefgh
second row (blank) (blank) ijklmnopq
third row (blank) (blank) rstuvwxyz
Regards,
Arun
2011 Dec 28 8:53 AM
Thanks for the good ideas guys it really helped me to pitch my graph towards output but still there is a problem in that
i'm getting output of single line only and not the remaining lines, is it really possible to word wrap in alv grid.