Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How to pass language for invoice text to "read_text" FM

former_member208541
Participant
0 Kudos

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

3 REPLIES 3

raymond_giuseppi
Active Contributor
0 Kudos

You could look for text header(s) in table STXH, or use FM SELECT_TEXT.

Regards,

Raymond

Former Member
0 Kudos

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

roberto_vacca2
Active Contributor
0 Kudos

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