Mit dem nachfolgenden Report können Sie Recherche-Berichte (inkl. Formulare) von einem Ergebnisbereich in einen anderen kopieren, wobei diese natürlich strukturell kompatibel sein müssen. So ganz ausgereift ist die Sache noch nicht (siehe Abschnitt 'Einschränkungen' im Report-Header) aber besser als nix.
*&---------------------------------------------------------------------*
*& Report YRKE_COPY_REPORT
*& Version 0.1
*&---------------------------------------------------------------------*
*& Kopieren von Reports zwischen verschiedenen Ergebnisbereichen
*& Achtung: Ergebnisbereiche dürfen sich natürlich nur vom Namen her
*& unterscheiden. Wenn die Strukturen nicht kompatibel sind, macht die
*& Nummer hier absolut keinen Sinn!!!!
*&
*& Einschränkungen Version 0.1:
*& ----------------------------
*& - Formulartexte werden nicht mitkopiert --> manuell nachpflegen
*& - Formelprioritäten müssen im Formular manuell nachbearb. werden
*&---------------------------------------------------------------------*
REPORT yrke_copy_report.
TABLES: tkeb1, tka01.
DATA: i_tkeb1 TYPE TABLE OF tkeb1 WITH HEADER LINE.
DATA: l_tabname_wild LIKE tkeb1-tabname,
l_tabname LIKE tkeb1-tabname.
PARAMETERS: pa_serkr LIKE tka01-erkrs OBLIGATORY,
pa_terkr LIKE tka01-erkrs OBLIGATORY.
SELECT-OPTIONS: so_repid FOR tkeb1-repid.
PARAMETERS: pa_test AS CHECKBOX DEFAULT 'X'.
AT SELECTION-SCREEN.
IF pa_serkr = pa_terkr.
MESSAGE e600(fr) WITH 'Bitte Quell- und Zielergebnisbereich'
'unterschiedlich wählen'.
ENDIF.
START-OF-SELECTION.
* Selektion aller Berichte im Quell-Ergebnisbereich
CONCATENATE '___' pa_serkr INTO l_tabname_wild.
SELECT * FROM tkeb1 INTO TABLE i_tkeb1
WHERE applclass = 'KE'
AND subclass = '01'
AND tabname LIKE l_tabname_wild
AND repid IN so_repid.
LOOP AT i_tkeb1.
WRITE: / i_tkeb1-applclass,
i_tkeb1-subclass,
i_tkeb1-tabname,
i_tkeb1-repid,
i_tkeb1-form.
l_tabname = i_tkeb1-tabname.
* Zieltabellenname setzen
CALL FUNCTION 'RKE_COPY_CHANGE_TABNAME'
EXPORTING
i_tabname = l_tabname
i_source_erkrs = pa_serkr
i_target_erkrs = pa_terkr
IMPORTING
e_tabname = l_tabname
EXCEPTIONS
no_erkrs_in_tabname = 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.
* Im Echtlauf Kopierfunktion starten
IF pa_test IS INITIAL.
* Ggf. zuerst Formular kopieren
IF NOT i_tkeb1-form IS INITIAL.
CALL FUNCTION 'RKD_FORM_COPY'
EXPORTING
i_applclass = 'KE'
i_subclass = '01'
i_tabname = i_tkeb1-tabname
i_form = i_tkeb1-form
* I_AKTMDT = 'X'
i_tabname_new = l_tabname
* EXCEPTIONS
* FORM_EXISTS_ALREADY = 1
* FORM_IMPORT_IMPOSSIBLE = 2
* FORM_NOT_FOUND = 3
* OTHERS = 4
.
IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDIF.
* Bericht kopieren
CALL FUNCTION 'RKE_REPORT_COPY'
EXPORTING
repid = i_tkeb1-repid
erkrs = pa_serkr
applclass = i_tkeb1-applclass
subclass = i_tkeb1-subclass
tabname = i_tkeb1-tabname
dest_tabname = l_tabname
EXCEPTIONS
report_not_found = 1
unknown_error = 2
list_elements_not_copied = 3
old_report_version = 4.
CASE sy-subrc.
WHEN 0 OR 3.
MESSAGE i126(ke0c) WITH i_tkeb1-repid i_tkeb1-tabname.
* Bericht &1 (Tabelle &2) wurde kopiert
PERFORM write_msg_prot(sapmkecp) USING
'KE0C' 'I' '126'
i_tkeb1-repid i_tkeb1-tabname
space space.
WHEN 2.
PERFORM write_msg_prot(sapmkecp) USING
'KE/NC' 'E' '000'
i_tkeb1-repid 'SY-SUBRC' sy-subrc
space.
WHEN 4.
IF 0 = 1.
MESSAGE w129(ke0c) WITH i_tkeb1-repid i_tkeb1-tabname.
ENDIF.
* Bericht &1 (Tabelle &2) muss umgesetzt werden
PERFORM write_msg_prot(sapmkecp) USING
'KE0C' 'W' '129'
i_tkeb1-repid i_tkeb1-tabname
space space.
ENDCASE.
ENDIF.
ENDLOOP.