Overblog
Folge diesem Blog Administration + Create my blog
SAPManDoo - SAP Resource

Der vorliegende Blog enthält von mir im Laufe meiner beruflichen Tätigkeit als SAP-Berater zusammengetragene Informationen / Beispiel-Codings zum Themenkreis SAP, speziell FI/CO.

CO-PA Berichte zwischen Ergebnisbereichen kopieren

Veröffentlicht am 27. September 2011 von sapmandoo in CO

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.

Kommentare