rsrefill годится для манданто-зависимых текстов.
А для манданто-независимых руки дошли написать маленькую утилиту.
Code:
REPORT zlang_tab_copy.
DATA: dfies_tab TYPE TABLE OF dfies WITH HEADER LINE
, ltfill_tab TYPE TABLE OF ltfill WITH HEADER LINE
, dd01l_tab TYPE TABLE OF dd01l WITH HEADER LINE
, x030l_wa TYPE x030l
, c_datatype LIKE dd01l-datatype VALUE 'LANG'
, b
, eref TYPE REF TO cx_root
, etext TYPE string.
*************************************************
PARAMETERS: lang_fr TYPE sy-langu DEFAULT 'R'
, lang_to TYPE sy-langu DEFAULT 'E'
, test TYPE xfeld DEFAULT 'X'
.
SELECT-OPTIONS: stabname FOR ltfill_tab-tabname.
*************************************************
REFRESH ltfill_tab.
SELECT dd02l~tabname dd02l~contflag
FROM dd02l
INNER JOIN dd09l
ON dd09l~tabname = dd02l~tabname
AND dd09l~as4local = dd02l~as4local
AND dd09l~uebersetz = 'X'
INTO TABLE ltfill_tab
WHERE dd02l~as4local = 'A'
AND dd02l~clidep = ''
AND dd02l~tabclass IN ('TRANSP', 'POOL', 'CLUSTER')
AND dd02l~tabname IN stabname.
* AND CONTFLAG IN ('C' , 'E' , 'S' , 'G').
SORT ltfill_tab BY tabname.
SELECT * FROM dd01l INTO TABLE dd01l_tab
WHERE datatype = c_datatype.
DATA: keytab TYPE TABLE OF fieldname WITH HEADER LINE
, dyn_where TYPE string
, dtr TYPE REF TO data
, dr_new TYPE REF TO data
, dtr_new TYPE REF TO data
.
FIELD-SYMBOLS: <t> TYPE SORTED TABLE
, <tnew> TYPE SORTED TABLE
, <l> TYPE ANY
, <lnew> TYPE ANY
, <s> TYPE langu
.
LOOP AT ltfill_tab.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = ltfill_tab-tabname
IMPORTING
x030l_wa = x030l_wa
TABLES
dfies_tab = dfies_tab
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
DELETE ltfill_tab.
CONTINUE.
ENDIF.
GET BIT 7 OF x030l_wa-flag5 INTO b.
IF b = 1. "table contains a STRING or XSTRING field
DELETE ltfill_tab.
CONTINUE.
ENDIF.
REFRESH keytab.
LOOP AT dfies_tab.
IF dfies_tab-keyflag = 'X'.
keytab = dfies_tab-fieldname.
APPEND keytab.
ENDIF.
IF ltfill_tab-langfname IS INITIAL.
READ TABLE dd01l_tab WITH KEY domname = dfies_tab-domname.
IF sy-subrc = 0.
MOVE dfies_tab-fieldname TO ltfill_tab-langfname.
MOVE dfies_tab-offset TO ltfill_tab-langoffset.
ENDIF.
ENDIF.
ENDLOOP.
MOVE x030l_wa-tablen TO ltfill_tab-tablen.
MOVE x030l_wa-keylen TO ltfill_tab-keylen.
IF ltfill_tab-langfname IS INITIAL.
DELETE ltfill_tab.
CONTINUE.
ELSE.
MODIFY ltfill_tab.
ENDIF.
CREATE DATA dtr TYPE SORTED TABLE OF (ltfill_tab-tabname) WITH UNIQUE KEY (keytab).
CREATE DATA dtr_new TYPE SORTED TABLE OF (ltfill_tab-tabname) WITH UNIQUE KEY (keytab).
CREATE DATA dr_new TYPE (ltfill_tab-tabname).
ASSIGN dtr->* TO <t>.
ASSIGN dtr_new->* TO <tnew>.
ASSIGN dr_new->* TO <lnew>.
CONCATENATE ltfill_tab-langfname ` in ('` lang_fr `', '` lang_to `')` INTO dyn_where.
IF ltfill_tab-tabname = 'D020T'.
CONCATENATE dyn_where ` and DYNR <> '1000'` INTO dyn_where.
ENDIF.
SELECT *
INTO TABLE <t>
FROM (ltfill_tab-tabname)
WHERE (dyn_where).
IF sy-subrc = 0.
LOOP AT <t> ASSIGNING <l>.
ASSIGN COMPONENT ltfill_tab-langfname OF STRUCTURE <l> TO <s>.
IF <s> = lang_fr.
<lnew> = <l>.
ASSIGN COMPONENT ltfill_tab-langfname OF STRUCTURE <lnew> TO <s>.
<s> = lang_to.
READ TABLE <t> FROM <lnew> TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
APPEND <lnew> TO <tnew>.
ENDIF.
" ELSEIF <s> = lang_to.
ENDIF.
ENDLOOP.
IF <tnew> IS INITIAL.
DELETE ltfill_tab.
CONTINUE.
ELSE.
ltfill_tab-entries = LINES( <tnew> ).
MODIFY ltfill_tab.
TRY.
IF test = ''.
INSERT (ltfill_tab-tabname) FROM TABLE <tnew>.
COMMIT WORK.
ENDIF.
CATCH cx_root INTO eref.
REFRESH <tnew>.
etext = eref->get_text( ).
WRITE: / ltfill_tab-tabname, ` `, etext.
ENDTRY.
REFRESH <tnew>.
ENDIF.
ELSE.
DELETE ltfill_tab.
CONTINUE.
ENDIF.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_structure_name = 'LTFILL'
TABLES
t_outtab = ltfill_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.