09-07-2016 3:18 PM
Hello,
for invoice smartform, we need to print a text stored in invoice. Below is the screenshot. Pls advice which table stores the langauge for text in the invoice document. So that we can pick the language from that table/field and avoid hardcoding. Pls remember that one text can be created in many languages in the invoice document.
Pls see language as highlighted below. Lang is mandatory in READ _TEXT FM.
regards
sachin
09-07-2016 3:28 PM
You could look for text header(s) in table STXH, or use FM SELECT_TEXT.
Regards,
Raymond
09-07-2016 3:40 PM
Hi
The header data of all kind of standard text ara stored in table STXH, but the text usually should be printed in according to the language of the customer (or payer).
In generally it doesn't need to use the fm READ_TEXT in a smartfom, it can automatically be managed
Max
09-07-2016 4:00 PM
Hi.
This is a sample you could implement to avoid Language HardCoded:
FORM GET_TEXT_SEARCH USING P_OUTPUT
P_TDNAME
P_SPRAS.
DATA: BEGIN OF FT_STXL OCCURS 0,
TDNAME TYPE STXL-TDNAME,
CLUSTR TYPE STXL-CLUSTR,
CLUSTD TYPE STXL-CLUSTD,
END OF FT_STXL.
FIELD-SYMBOLS: <FSTXL> LIKE FT_STXL.
DATA: BEGIN OF FT_STXL_RAW OCCURS 0,
CLUSTR TYPE STXL-CLUSTR,
CLUSTD TYPE STXL-CLUSTD,
END OF FT_STXL_RAW,
W_STXL_RAW LIKE FT_STXL_RAW.
DATA: FT_TLINE TYPE STANDARD TABLE OF TLINE.
DATA: f_spras TYPE spras.
FIELD-SYMBOLS: <FTLINE> TYPE TLINE.
DATA: FT_STXH TYPE STANDARD TABLE OF STXH,
FW_STXH TYPE STXH.
CLEAR f_spras.
f_spras = P_SPRAS."Fixed First language to search
"Instead of hard coding languages' search, you can implement a recursive form:
SELECT TDNAME TDOBJECT TDID
FROM STXH
INTO CORRESPONDING FIELDS OF TABLE FT_STXH
WHERE TDNAME EQ P_TDNAME AND "P_TDNAME is you object text name
TDOBJECT EQ 'KNB1' AND "object name for objectinstead of KNB1 .. it depends on object you're looking for..see your long text properties
TDSPRAS EQ f_spras AND
TDID EQ '0090'. "search occurences in table for your object
IF sy-subrc NE 0.
f_spras = 'E'.
SELECT TDNAME TDOBJECT TDID TDSPRAS
FROM STXH
INTO CORRESPONDING FIELDS OF TABLE FT_STXH
WHERE TDNAME EQ P_TDNAME AND
TDOBJECT EQ 'KNB1' AND
TDSPRAS EQ f_spras AND
TDID EQ '0090'.
IF sy-subrc NE 0.
f_spras = 'I'.
SELECT TDNAME TDOBJECT TDID TDSPRAS
FROM STXH
INTO CORRESPONDING FIELDS OF TABLE FT_STXH
WHERE TDNAME EQ P_TDNAME AND
TDOBJECT EQ 'KNB1' AND
TDSPRAS EQ f_spras AND
TDID EQ '0090'.
IF sy-subrc NE 0.
SELECT TDNAME TDOBJECT TDID TDSPRAS
FROM STXH
INTO CORRESPONDING FIELDS OF TABLE FT_STXH UP TO 1 ROWS
WHERE TDNAME EQ P_TDNAME AND
TDOBJECT EQ 'KNB1' AND
TDID EQ '0090'.
IF sy-subrc EQ 0.
READ TABLE FT_STXH INTO FW_STXH INDEX 1.
IF sy-subrc EQ 0.
f_spras = fw_stxh-tdspras.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CHECK NOT FT_STXH[] IS INITIAL.
* select compressed text lines in blocks of 3000 (adjustable)
SELECT TDNAME CLUSTR CLUSTD
INTO TABLE FT_STXL
FROM STXL
PACKAGE SIZE 3000
FOR ALL ENTRIES IN FT_STXH "WITH APPLICATION DATA AND TDNAME
WHERE RELID = 'TX' "standard text
AND TDOBJECT = FT_STXH-TDOBJECT
AND TDNAME = FT_STXH-TDNAME
AND TDID = FT_STXH-TDID
AND TDSPRAS = f_spras.
LOOP AT FT_STXL ASSIGNING <FSTXL>.
* decompress text
CLEAR: FT_STXL_RAW[], FT_TLINE[].
W_STXL_RAW-CLUSTR = <FSTXL>-CLUSTR.
W_STXL_RAW-CLUSTD = <FSTXL>-CLUSTD.
APPEND W_STXL_RAW TO FT_STXL_RAW.
IMPORT TLINE = FT_TLINE FROM INTERNAL TABLE FT_STXL_RAW.
* access text lines for further processing
LOOP AT FT_TLINE ASSIGNING <FTLINE>.
P_OUTPUT = <FTLINE>-TDLINE.
EXIT. "If you need more lines , continue...
ENDLOOP.
ENDLOOP.
FREE FT_STXL.
ENDSELECT.
ENDFORM.
Hope to help
Bye