Programm zur Statusänderung

Jeder, der mit IDOC’s zu tun hatte, hat sich doch sicher schon mal die Frage gestellt, was kann ich tun, wenn ich einen IDOC habe, den ich löschen will, dies aber nicht tun kann, weil er im Workflow nicht auftaucht.Damit man auch solche IDOC’s sauber aus dem System entfernen kann hat René einen kleinen Report entwickelt. Der Report ändert den Status von IDOC’s.


Das Auswahlbild des Programms

Info

Inzwischen kann auch der – damals noch nicht vorhandene – Report RC1_IDOC_SET_STATUS verwendet werden.

Achtung:
Vor Gebrauch unbedingt den Hinweis 1481960 beachten, sonst kann es zu bösen Überraschungen kommen!

Coding

REPORT zbc_idoc_status_change LINE-SIZE 220.
************************************************************************
* R/3 Reportkopf
************************************************************************
* Programmname : ZBC_IDOC_STATUS_CHANGE
* Kurztext : IDOC-Status neu setzen
* Erstellungsdatum: 11.11.2003 – 12.11.2003
* Ersteller: Kokrhoun
* gemäß Vorgabe: -/-
*
************************************************************************
* Funktionale Beschreibung:
* Dieser Report dient dazu das man den Status eines IDOC’s nach belieben
* verändern kann. Man kann damit auch IDOC’s beliebig oft wieder aus
* einem Status zurückholen.
*
************************************************************************
* Deklarationsteil *
************************************************************************


TYPES:
  BEGIN OF itab,
    docnum LIKE edidc-docnum,
    mestyp LIKE edidc-mestyp,
    status LIKE edidc-status,
    rcvprn LIKE edidc-rcvprn,
    credat LIKE edidc-credat,
  END OF itab.

DATA:
  it_itab TYPE TABLE OF itab,
  wa_itab LIKE LINE OF it_itab,
  lines   TYPE i VALUE ‘0’,
  zaehler TYPE i VALUE ‘0’.

************************************************************************
* Auswahlscreen *
************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
PARAMETERS:     v_status LIKE edidc-status OBLIGATORY.
SELECT-OPTIONS: v_mestyp FOR wa_itab-mestyp OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
SELECT-OPTIONS: v_docnum FOR wa_itab-docnum,
                v_credat FOR wa_itab-credat,
                v_rcvprn FOR wa_itab-rcvprn NO INTERVALS 
                                            NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-s03.
PARAMETERS:     n_status LIKE edidc-status OBLIGATORY, 
                v_updat AS CHECKBOX DEFAULT ‘X’.
SELECTION-SCREEN END OF BLOCK b3.

************************************************************************
* Verarbeitungsteil *
************************************************************************
START-OF-SELECTION.

  CLEAR it_itab.
  CLEAR wa_itab.
* Auslesen der Daten 
  SELECT docnum mestyp status rcvprn credat 
    INTO TABLE it_itab 
    FROM edidc 
   WHERE status = v_status 
     AND rcvprn in v_rcvprn 
     AND credat IN v_credat 
     AND docnum IN v_docnum 
     AND mestyp IN v_mestyp. 
  DESCRIBE TABLE it_itab LINES sy-tfill.

* Bei gefundenen Daten erfolgt die Verarbeitung 
  CHECK sy-tfill GT 0. 
  SORT it_itab BY docnum ASCENDING. 
  LOOP AT it_itab INTO wa_itab. 
    WRITE:/ wa_itab-docnum, 
         20 wa_itab-mestyp, 
         30 wa_itab-credat, 
         41 wa_itab-status, 
         46 n_status. 
    lines = lines + 1. 
  ENDLOOP.

* Update ja oder nein
  IF v_updat = ‘X’.
    CLEAR wa_itab.
    DESCRIBE TABLE it_itab LINES sy-tfill.
    LOOP AT it_itab INTO wa_itab.
      UPDATE edidc 
         SET status = n_status
       WHERE docnum = wa_itab-docnum
         AND mestyp = wa_itab-mestyp
         AND rcvprn = wa_itab-rcvprn
         AND credat = wa_itab-credat
         AND status = wa_itab-status.
      zaehler = zaehler + 1.
* Nach 500 Sätzen erfolgt ein Commit auf der DB
      IF zaehler = ‘500’.
        COMMIT WORK.
        zaehler = 0.
      ENDIF.
      CLEAR wa_itab.
    ENDLOOP.
    WRITE:/ ‘Es wurden: ‘, lines, ‘verändert.’.
  ELSE.
    WRITE:/ ‘Es würden: ‘, lines, ‘verändert.’.
  ENDIF.

END-OF-SELECTION.

Enno Wulff