03-25-2009 7:22 AM
Hi Experts,
I need to develop a report in which the input parmater is material no. and i need to get its
corresponding Purchase order text.
I am using the function module READ_TEXT with text Id as 'BEST', text name as Material no
and Text Object as 'MATERIAL'.I get the output in table t_line.
I am using the following code to display this text in 1 line.
LOOP AT T_TLINE INTO WA_TLINE.
concatenate WA_DISPLAY-POTXT WA_TLINE-TDLINE into WA_DISPLAY-POTXT.
ENDLOOP.
where wa_display is the output that will be displayed in ALV.
Now my problem is that though i have declared wa_display-potxt of size CHAR3000, it takes only
upto 256 chars and hence the rest of the text is not displayed in the alv.
How do i deisplay all the text in alv against the Material no.
Thanks in advance
03-25-2009 8:00 AM
03-25-2009 9:36 AM
i am not able to understand how exactly to pass the internal table to the FM.
Still not able to find any solution.
Edited by: priti suryawanshi on Mar 25, 2009 10:41 AM
03-25-2009 9:44 AM
hi,
to read material PO text
goto me22n -
> text----->item_text->doubleclick->goto->header
Text Name PO Numer+PO Item ( concatnate EKPO-EBELN EKPO-EBELP )
Language EN
Text ID F01
Text Object EKPO
CREATE INCLUDE TEXT IN SAMRTFORM AND PASS THIS .
OTHERWISE USE 'READ_TEXT' FUNCTION MODULE
03-25-2009 9:54 AM
Dear Monika,
I dont want the display in smartform but in ALV . It is a report and it has only the limit of 256 characters.
Now how do i display the text more than 256 characters,
Thanks.
03-25-2009 10:00 AM
Hi priti,
Recently one of my collegue did your requirement, they want to display more that 1000 chars. if you are using a structure the go for String, for table LCHAR will suits for ur requirement.
Regards
Arani Bhaskar
03-25-2009 10:03 AM
Hi Arani,
Can u please provide a sample code including the data declaration, so that i can display the material no and its corresponding material text.
03-25-2009 10:13 AM
Hi,
R u able to use structure to display that Text, if so do let me know.
Regards
Arani Bhaskar
03-25-2009 10:30 AM
Yes i can declare the internal table as.
TYPES : BEGIN OF T_DETAILS.
include structure YMMTEXT.
MATNR TYPE MARA-MATNR, "Material No.
MAKTX TYPE MAKT-MAKTX, "MAterial Text
POTXT(3000), " TYPE MAKT-MAKTX, "Material PO text
types: END OF T_DETAILS.
so that potxt field is declared as char 3000.
03-25-2009 10:36 AM
Declare potxt field as STRING
Check this code..
REPORT ZQMRFUJVENDRAT .
TABLES: LFA1,QALS,TQ32,QASE.
*** Type declearation
TYPES: BEGIN OF STR,
LIFNR LIKE LFA1-LIFNR,
PRUEFLOS LIKE QALS-PRUEFLOS,
ENSTEHDAT LIKE QALS-ENSTEHDAT,
MONTH TYPE T247-KTX,
ERSTELLDAT type QDATUMERST,
RATING LIKE QASE-ORIGINAL_INPUT,
NAME1 LIKE LFA1-NAME1,
ISSUES TYPE STRING,
RECOMMENDATION TYPE STRING,
END OF STR.
TYPES: BEGIN OF S_QALS,
PRUEFLOS LIKE QALS-PRUEFLOS,
ART LIKE QALS-ART,
HERKUNFT LIKE QALS-HERKUNFT,
SELLIFNR LIKE QALS-SELLIFNR,
ENSTEHDAT LIKE QALS-ENSTEHDAT,
ORIGINAL_INPUT LIKE QASE-ORIGINAL_INPUT,
ERSTELLDAT type QDATUMERST,
END OF S_QALS.
TYPES: BEGIN OF S_QASE,
PRUEFLOS LIKE QALS-PRUEFLOS,
MERKNR LIKE QASE-MERKNR,
ORIGINAL_INPUT LIKE QASE-ORIGINAL_INPUT,
ERSTELLDAT type QDATUMERST,
END OF S_QASE.
TYPES: BEGIN OF S_LFA1,
LIFNR LIKE LFA1-LIFNR,
NAME1 LIKE LFA1-NAME1,
END OF S_LFA1.
*** Data declearation
DATA: BEGIN OF TY_TXT,
TEXT(120) TYPE C,
END OF TY_TXT.
***Internal tables
DATA: I_OUT TYPE TABLE OF STR,
I_FINAL TYPE TABLE OF STR,
I_QALS TYPE TABLE OF S_QALS,
I_QASE TYPE TABLE OF S_QASE,
I_LFA1 TYPE TABLE OF S_LFA1,
I_SORT TYPE LVC_T_SORT,
I_TXT LIKE TABLE OF TY_TXT,
I_TEXT TYPE TABLE OF TLINE WITH HEADER LINE.
***Work area
DATA: WA_QALS LIKE LINE OF I_QALS,
WA_QASE LIKE LINE OF I_QASE,
WA_LFA1 LIKE LINE OF I_LFA1,
WA_OUT LIKE LINE OF I_OUT,
WA_FIN LIKE LINE OF I_FINAL.
DATA: WA_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
WA_GRID TYPE REF TO CL_GUI_ALV_GRID,
WA_L_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
WA_L_CONTAINER_LEFT TYPE REF TO CL_GUI_CONTAINER,
WA_L_CONTAINER_RIGHT TYPE REF TO CL_GUI_CONTAINER,
WA_LAYOUT TYPE LVC_S_LAYO,
WA_FLD_CATALOG TYPE LVC_T_FCAT.
***Variables
DATA: V_MONTH(2) TYPE C,
V_YEAR(4) TYPE C,
V_T247 LIKE T247,
V_MTH LIKE T247-MNR,
V_ID TYPE THEAD-TDID,
V_LANG TYPE THEAD-TDSPRAS,
V_NAME TYPE THEAD-TDNAME,
V_OBJECT TYPE THEAD-TDOBJECT,
V_IND TYPE SY-TABIX,
V_LIN TYPE I,
V_CNT TYPE I.
DATA: OK_CODE TYPE SY-UCOMM,
SAVE_CODE TYPE SY-UCOMM.
CLEAR: V_MONTH,
V_YEAR,
V_T247,
V_MTH,
V_IND.
***Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: VENDOR FOR LFA1-LIFNR OBLIGATORY,
CREATION FOR QALS-ENSTEHDAT OBLIGATORY.
PARAMETERS: ART LIKE QALS-ART DEFAULT 'DOL' OBLIGATORY,
WERK LIKE QALS-WERK OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.
***Initialization
INITIALIZATION.
SELECT SINGLE PARVA FROM USR05 INTO WERK
WHERE BNAME = SY-UNAME
AND PARID = 'WRK'.
***Selection screen validation
AT SELECTION-SCREEN ON ART.
SELECT SINGLE * FROM TQ32 WHERE HERKUNFT = '07' AND
ART = ART.
IF SY-SUBRC NE 0.
MESSAGE E368(00) WITH TEXT-002.
ENDIF.
START-OF-SELECTION.
*-- Creating Layout -----------------------------------------*
PERFORM CREATE_LAYOUT CHANGING WA_LAYOUT.
*-- Creating FieldCatalog ------------------------------------*
PERFORM BUILD_CATALOG CHANGING WA_FLD_CATALOG.
REFRESH I_QALS[].
**Select inspection lot data
SELECT PRUEFLOS ART HERKUNFT SELLIFNR ENSTEHDAT FROM QALS INTO TABLE I_QALS
WHERE HERKUNFT = '07'
AND WERK = WERK
AND ENSTEHDAT IN CREATION
AND ART = ART
AND SELLIFNR IN VENDOR.
IF NOT I_QALS[] IS INITIAL.
REFRESH I_QASE[].
** Get rating got the vendors
SELECT PRUEFLOS MERKNR ORIGINAL_INPUT ERSTELLDAT FROM QASE INTO TABLE I_QASE
FOR ALL ENTRIES IN I_QALS
WHERE PRUEFLOS = I_QALS-PRUEFLOS.
REFRESH I_LFA1[].
** Vendor details
SELECT LIFNR NAME1 FROM LFA1 INTO TABLE I_LFA1 FOR ALL ENTRIES IN I_QALS
WHERE LIFNR = I_QALS-SELLIFNR.
ENDIF.
SORT I_QASE BY PRUEFLOS.
SORT I_QALS BY PRUEFLOS.
CLEAR WA_QALS.
LOOP AT I_QALS INTO WA_QALS.
CLEAR WA_QASE.
READ TABLE I_QASE INTO WA_QASE WITH KEY PRUEFLOS = WA_QALS-PRUEFLOS
BINARY SEARCH
TRANSPORTING ORIGINAL_INPUT ERSTELLDAT.
.
IF SY-SUBRC = 0.
WA_QALS-ORIGINAL_INPUT = WA_QASE-ORIGINAL_INPUT.
WA_QALS-ERSTELLDAT = WA_QASE-ERSTELLDAT.
MODIFY I_QALS FROM WA_QALS.
ENDIF.
ENDLOOP.
SORT I_LFA1 BY LIFNR.
CLEAR WA_QALS.
LOOP AT I_QALS INTO WA_QALS.
WA_OUT-LIFNR = WA_QALS-SELLIFNR.
WA_OUT-RATING = WA_QALS-ORIGINAL_INPUT.
WA_OUT-ENSTEHDAT = WA_QALS-ENSTEHDAT.
WA_OUT-ERSTELLDAT = WA_QALS-ERSTELLDAT.
CLEAR WA_LFA1.
READ TABLE I_LFA1 INTO WA_LFA1 WITH KEY LIFNR = WA_QALS-SELLIFNR
BINARY SEARCH.
IF SY-SUBRC = 0.
WA_OUT-NAME1 = WA_LFA1-NAME1.
ENDIF.
** Get calmonth for the date
CALL FUNCTION 'CACS_DATE_GET_YEAR_MONTH'
EXPORTING
I_DATE = WA_QALS-ENSTEHDAT
IMPORTING
E_MONTH = V_MONTH
E_YEAR = V_YEAR.
IF NOT V_MONTH IS INITIAL.
V_MTH = V_MONTH.
** Read calmonth text
CALL FUNCTION 'IDWT_READ_MONTH_TEXT'
EXPORTING
LANGU = SY-LANGU
MONTH = V_MTH
IMPORTING
T247 = V_T247.
ENDIF.
WA_OUT-MONTH = V_T247-KTX.
WA_OUT-PRUEFLOS = WA_QALS-PRUEFLOS.
** append data output table
APPEND WA_OUT TO I_OUT.
CLEAR WA_OUT.
CLEAR: V_MONTH,
V_YEAR,
V_T247,
V_MTH.
ENDLOOP.
DELETE I_OUT WHERE RATING IS INITIAL.
REFRESH I_FINAL[].
LOOP AT I_OUT INTO WA_OUT.
REFRESH I_TXT[].
CLEAR:TY_TXT,
V_ID,
V_LANG,
V_NAME,
V_OBJECT.
CLEAR QASE.
** Read short text
SELECT SINGLE * FROM QASE WHERE PRUEFLOS = WA_OUT-PRUEFLOS.
IF SY-SUBRC = 0.
IF QASE-PRLTEXTKZ = 'X'.
CLEAR:
V_ID,
V_LANG,
V_NAME,
V_OBJECT.
V_LANG = 'EN'.
V_ID = 'QESP'.
V_OBJECT = 'QEEESTUECK'.
CONCATENATE WA_OUT-PRUEFLOS '0000000100100000000001' INTO V_NAME.
**Read long text for issues
REFRESH I_TEXT.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = V_ID
LANGUAGE = V_LANG
NAME = V_NAME
OBJECT = V_OBJECT
TABLES
LINES = I_TEXT
EXCEPTIONS
OTHERS = 8.
IF SY-SUBRC <> 0.
ENDIF.
LOOP AT I_TEXT.
MOVE I_TEXT-TDLINE TO WA_OUT-ISSUES.
APPEND WA_OUT TO I_FINAL.
ENDLOOP.
ELSEIF QASE-PRUEFBEMKT IS NOT INITIAL.
MOVE QASE-PRUEFBEMKT TO WA_OUT-ISSUES.
APPEND WA_OUT TO I_FINAL.
ENDIF.
ENDIF.
CLEAR:
V_ID,
V_LANG,
V_NAME,
V_OBJECT.
V_LANG = 'EN'.
V_ID = 'QAVE'.
V_OBJECT = 'QPRUEFLOS'.
CONCATENATE SY-MANDT WA_OUT-PRUEFLOS 'L' INTO V_NAME.
**Read long text for recommendations
REFRESH I_TEXT.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = V_ID
LANGUAGE = V_LANG
NAME = V_NAME
OBJECT = V_OBJECT
TABLES
LINES = I_TEXT
EXCEPTIONS
OTHERS = 8.
IF SY-SUBRC <> 0.
ENDIF.
READ TABLE I_FINAL WITH KEY LIFNR = WA_OUT-LIFNR
PRUEFLOS = WA_OUT-PRUEFLOS
TRANSPORTING NO FIELDS.
V_IND = SY-TABIX.
LOOP AT I_TEXT.
MOVE I_TEXT-TDLINE TO WA_OUT-RECOMMENDATION.
APPEND WA_OUT TO I_FINAL ."INDEX V_CNT.
ENDLOOP.
ENDLOOP.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Form CREATE_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_W_LAYOUT text
*----------------------------------------------------------------------*
FORM CREATE_LAYOUT CHANGING P_W_LAYOUT TYPE LVC_S_LAYO.
WA_LAYOUT-GRID_TITLE = TEXT-003.
WA_LAYOUT-DETAILTITL = TEXT-004.
WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-CWIDTH_OPT = 'X'.
ENDFORM. " CREATE_LAYOUT
*&---------------------------------------------------------------------*
*& Form BUILD_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_W_FLD_CATLOG text
*----------------------------------------------------------------------*
FORM BUILD_CATALOG CHANGING P_W_FLD_CATALOG TYPE LVC_T_FCAT.
DATA: WL_CATALOG TYPE LVC_S_FCAT.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'LIFNR'.
WL_CATALOG-REF_TABLE = 'LFA1'.
WL_CATALOG-REF_FIELD = 'LIFNR '.
WL_CATALOG-JUST = 'L'.
WL_CATALOG-FIX_COLUMN = 'X'.
WL_CATALOG-COL_POS = 1.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'MONTH'.
WL_CATALOG-REF_TABLE = 'T247'.
WL_CATALOG-REF_FIELD = 'KTX'.
WL_CATALOG-JUST = 'C'.
WL_CATALOG-FIX_COLUMN = 'X'.
WL_CATALOG-COLTEXT = 'Month'.
WL_CATALOG-COL_POS = 4.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'RATING'.
WL_CATALOG-REF_TABLE = 'QASE'.
WL_CATALOG-REF_FIELD = 'ORIGINAL_INPUT'.
WL_CATALOG-JUST = 'C'.
WL_CATALOG-FIX_COLUMN = 'X'.
WL_CATALOG-COLTEXT = 'Rating'.
WL_CATALOG-COL_POS = 5.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'NAME1'.
WL_CATALOG-REF_TABLE = 'LFA1'.
WL_CATALOG-REF_FIELD = 'NAME1'.
WL_CATALOG-JUST = 'L'.
WL_CATALOG-FIX_COLUMN = 'X'.
WL_CATALOG-COLTEXT = 'Vendor name'.
WL_CATALOG-COL_POS = 2.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'ISSUES'.
WL_CATALOG-INTTYPE = 'C'.
WL_CATALOG-JUST = 'L'.
WL_CATALOG-COLTEXT = 'Issues'.
WL_CATALOG-COL_POS = 6.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'RECOMMENDATION'.
WL_CATALOG-INTTYPE = 'C'.
WL_CATALOG-JUST = 'L'.
WL_CATALOG-COLTEXT = 'Recommendation'.
WL_CATALOG-COL_POS = 7.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'PRUEFLOS'.
WL_CATALOG-REF_TABLE = 'QALS'.
WL_CATALOG-REF_FIELD = 'PRUEFLOS'.
WL_CATALOG-COLTEXT = 'Attachments'.
WL_CATALOG-HOTSPOT = 'X'.
WL_CATALOG-EMPHASIZE = 'C571'.
WL_CATALOG-COL_POS = 8.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
CLEAR WL_CATALOG.
WL_CATALOG-FIELDNAME = 'ERSTELLDAT'.
WL_CATALOG-REF_TABLE = 'QASE'.
WL_CATALOG-REF_FIELD = 'ERSTELLDAT'.
WL_CATALOG-JUST = 'C'.
WL_CATALOG-FIX_COLUMN = 'X'.
WL_CATALOG-COLTEXT = 'Audit Date'.
WL_CATALOG-COL_POS = 3.
APPEND WL_CATALOG TO WA_FLD_CATALOG.
ENDFORM. " BUILD_CATALOG
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STAT'.
SET TITLEBAR 'TITL'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
SAVE_CODE = OK_CODE.
CASE SAVE_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL' OR 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
CLEAR: OK_CODE,
SAVE_CODE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module CREATE_OBJ OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CREATE_OBJ OUTPUT.
*--Registering handler methods to handle
IF WA_CONTAINER IS INITIAL.
CREATE OBJECT WA_CONTAINER
EXPORTING CONTAINER_NAME = 'CUS_CON'.
CREATE OBJECT WA_GRID
EXPORTING I_PARENT = WA_CONTAINER
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
ELSE.
CALL METHOD WA_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDMODULE. " CREATE_OBJ OUTPUT
*&---------------------------------------------------------------------*
*& Module TRANS_DATA OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE TRANS_DATA OUTPUT.
** Display data on the ALV grid
CALL METHOD WA_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'STR'
IS_LAYOUT = WA_LAYOUT
CHANGING
IT_SORT = I_SORT
IT_OUTTAB = I_FINAL
IT_FIELDCATALOG = WA_FLD_CATALOG.
ENDMODULE. " TRANS_DATA OUTPUT
04-10-2009 7:04 AM
04-10-2009 7:22 AM
Hi,
Simplest would be:
DATA: objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE.
REFRESH objtxt.
LOOP AT t_tline into wa_tline
objtxt-line = wa_tline--tdline.
APPEND objtxt.
CLEAR objtxt.
ENDLOOP.
& then use:
EDITOR-CALL FOR objtxt DISPLAY-MODE.
Please ensure that whenever user clicks on the material po text in ALV the above statement is performed. Thus have a FORM:
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield. "
CASE r_ucomm.
WHEN '&IC1'.
READ TABLE t_output INTO t_output_wa
INDEX rs_selfield-tabindex.
CHECK sy-subrc EQ 0.
CASE rs_selfield-fieldname.
WHEN 'YOUR VARIABLE FOR MATERIAL PO TEXT in ALV'.
PERFORM get_text USING t_output_wa-plnty
t_output_wa-plnnr.
EDITOR-CALL FOR objtxt DISPLAY-MODE.
ENDCASE.
ENDCASE.
ENDFORM.
*
While calling :
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_user_command = 'USER_COMMAND'
in addition to your other parameters.
I hope this helps,
Regards
Raju Chitale
04-10-2009 7:39 AM
Hi Raju,
Can u please elaborate on the perform GET_TEXT routine. And which is the field plnnr used??
In my requirement, i display material no,material desc, and material PO text.
TYPES : BEGIN OF T_DETAILS,
MATNR TYPE MARA-MATNR, "Material No.
MAKTX TYPE MAKT-MAKTX, "MAterial Text
POTXT(3000),
END OF T_DETAILS.
DATA : T_DISPLAY TYPE STANDARD TABLE OF T_DETAILS,
WA_DISPLAY TYPE T_DETAILS.
Can u please provide the code in this context.
04-10-2009 7:47 AM
Hi,
The contents of the routine GET_TEXT has been mentioned at the top of my reply. instead of defining potxt(3000) define it as potxt(255) since 'by default' we are going to display only the first line of the po text.
i.e.
TYPES : BEGIN OF T_DETAILS,
MATNR TYPE MARA-MATNR, "Material No.
MAKTX TYPE MAKT-MAKTX, "MAterial Text
POTXT(45),
END OF T_DETAILS
& then follow the remaining instructions of previous post.
Regards
Raju Chitale
04-10-2009 8:02 AM
But for this , i will have to double click on each material display in ALV, my requirement is when i display a range of materials, i should see the PO text in the ALV display itself without a double click
04-10-2009 8:07 AM
Hi,
Since there is no limitation for the material PO text, I do not think there is any other way to do it !
Regards
Raju Chitale
06-01-2009 10:49 AM
07-17-2013 10:35 AM
Hi , I am also facing the same problem.
Can you give me solution ?
Please mail the code at kadus.suraj@gmail.com
Thanks in advance......