Transportabgleich

Bei Transportaufträgen ist es schwierig, die Übersicht zu behalten. Da passiert es schnell, dass durch einen alten Transportauftrag ein jüngerer Sourcecode wieder überschrieben wird. Dieses Programm soll die Übersicht ein wenig einfacher machen. Das Programm zeigt sogar, welche Transporte noch vorher transportiert, bzw. welche nachträglich wieder eingespielt werden müssen um die Transportreihenfolge beizubehalten.

Dieses Programm listet alle noch nicht vollständig transportierten Transportaufträge eines oder mehrerer Benutzer auf.

Anhand eines Hakens oder eines Kreuzes wird angezeigt, ob der Auftrag bereits im Konsolidierungssystem ist und/ oder im Produktivsystem.

Positionieren Sie den Cursor auf einen Auftrag, um zu prüfen, ob vor dem Transport andere Aufträge importiert werden müssen, oder ob Aufträge nachtransportiert werden müssen.

Das Programm funktioniert nur für ABAP-Programme!
Dictionary-Objekte, Dynpros etc. werden nicht unterstützt!

Vorbereitungen

folgendes müssen sie nach dem einfügen des Quelltextes in den Editor machen:

1. Ersetzen Sie in der Parameters-Anweisung die Defaultwerte für Ihre Systeme.

2. Legen sie den PF-Status “LISTE” an:

(+) Listfunktionen einmischen!
Funktion CHCK       Vor        ICON_NEXT_STEP
Funktion CHCKR     Nach      ICON_PREVIOUS_STEP
Funktion REFR       Refresh   ICON_REFRESH

Quelltext

REPORT ZZTRANSCHECK LINE-SIZE 170 NO STANDARD PAGE HEADING.

INCLUDE <icon>.

TABLES: E070V, E070, E071, *E071.

DATA: zicon_okay(4)      VALUE icon_okay,
      zicon_activate(4)  VALUE icon_activate,
      zicon_transport(4) VALUE icon_transport,
      zicon_cancel(4)    VALUE icon_cancel.

TYPES: BEGIN OF ts,
         date    LIKE sy-datum,
         time    LIKE sy-uzeit,
       END OF ts.
DATA: current_ts TYPE ts,
      CHECK_TS   TYPE TS,
      P_RUECK    TYPE C,
      WT_E071    LIKE E071  OCCURS 0 WITH HEADER LINE,
      WT_E071K   LIKE E071K OCCURS 0 WITH HEADER LINE,
      WT_E070V   LIKE E070V OCCURS 0 WITH HEADER LINE,
      T071       LIKE E071  OCCURS 0 WITH HEADER LINE,
      X071       LIKE E071  OCCURS 0 WITH HEADER LINE,
      TARSYS_PROD(3),
      TARSYS_KONS(3),
      ICON_KONS(4),
      ICON_PROD(4),
      KONS_VORHANDEN,
      PROD_VORHANDEN,

      BEGIN OF t_e071_checked OCCURS 0,
        trkorr  LIKE e070v-trkorr,
        as4user LIKE e070v-as4user,
        as4date LIKE e070v-as4date,
        as4time LIKE e070v-as4time,
        KONS,
        PROD,
      END OF t_e071_checked,
      vorhanden,
      xaktiv(40),
      DEST(20),
      korr LIKE e070-trkorr,
      aktuelle_zeile LIKE sy-index,
      xhotspot(8),
      we_de LIKE  trpari-w_e07t,
      merk_user(12),
      LISTE_KONS LIKE ABAPLIST OCCURS 0 WITH HEADER LINE,
      LISTE_PROD LIKE ABAPLIST OCCURS 0 WITH HEADER LINE,
      liste_hrd LIKE abaplist OCCURS 0 WITH HEADER LINE,
      liste     LIKE abaplist OCCURS 0 WITH HEADER LINE,
      v VALUE '|'.

*>>> Eigentümer der Transportaufträge
SELECT-OPTIONS: s_user   FOR sy-uname  DEFAULT sy-uname,
*>>> Auftragsnummer
                s_trkorr FOR korr.
*>>> Aufträge selektieren ab Datum
PARAMETERS:     p_datvon LIKE sy-datum DEFAULT sy-datum,
*>>> Sofort prüfen
                p_check  AS CHECKBOX   DEFAULT space,
*>>> Nur nicht vollständig transportierte anzeigen
                P_TRANS  AS CHECKBOX   DEFAULT 'X'.
SELECTION-SCREEN ULINE.
*>>> Konsolidierungssystem
PARAMETERS:     P_SYKONS(3) DEFAULT 'Q01',
*>>> Produktivsystem
                P_SYPROD(3) DEFAULT 'P01'.

INITIALIZATION.
  p_datvon = sy-datum - 30.

TOP-OF-PAGE.
  PERFORM top_of_page.

TOP-OF-PAGE DURING LINE-SELECTION.
  CHECK sy-lsind = 0.
  PERFORM top_of_page.

START-OF-SELECTION.

  TARSYS_KONS = P_SYKONS.
  TARSYS_PROD = P_SYPROD.

*>>> PF-Status:
*>>> (+) Listfunktionen einmischen!
*>>> CHCK       Vor       ICON_NEXT_STEP
*>>> CHCKR      Nach      ICON_PREVIOUS_STEP
*>>> REFR       Refresh   ICON_REFRESH

  SET PF-STATUS 'LISTE'.
  PERFORM ausgabe.

AT USER-COMMAND.
  CASE sy-ucomm.

    WHEN 'REFR'.
*** Liste aktualisieren
      sy-lsind = 0.
      aktuelle_zeile = sy-staro.
      PERFORM ausgabe.

    WHEN 'CHCK'.
*** Vorwärtsprüfung: Vorher zu transportierende Aufträge
      CHECK e070v NE space.
      p_rueck = space.
      PERFORM check_objekte.

    WHEN 'CHCKR'.
*** Rückwärtsprüfung: Nachzutransportierende Aufträge
      CHECK e070v NE space.
      p_rueck = 'X'.
      PERFORM check_objekte.
  ENDCASE.
  CLEAR e070v.

AT LINE-SELECTION.
  CLEAR xhotspot.
  GET CURSOR FIELD xhotspot.
  CASE sy-ucomm.
    WHEN 'PICK'.
      IF e070v-trkorr NE space.
*** Stückliste des Auftrags anzeigen
        CALL FUNCTION 'TR_EDITOR_COMM'
             EXPORTING
                  wi_dequeue   = 'X'
                  wi_read_only = 'X'
                  wi_trkorr    = e070v-trkorr.
      ENDIF.
  ENDCASE.

*---------------------------------------------------------------------*
*       FORM AUSGABE                                                  *
*---------------------------------------------------------------------*
FORM ausgabe.

  CLEAR merk_user.
  SELECT * FROM  e070v INTO TABLE wt_e070v
          WHERE trkorr     in s_trkorr
            AND trfunction IN ('K', 'W')
            AND trstatus    = 'R'
            AND TARSYSTEM   = TARSYS_KONS
            AND as4user    IN s_user
            AND as4date    GE p_datvon
            AND langu       = sy-langu
          ORDER BY as4user as4date as4time trkorr.
  LOOP AT wt_e070v.
    IF wt_e070v-as4user <> merk_user.
      merk_user = wt_e070v-as4user.
      WRITE: / 'Für den Benutzer', wt_e070v-as4user COLOR 4,
               'sind folgende Aufträge freigegeben:',
             / sy-uline(126).
    ENDIF.
    e070v = wt_e070v.
    PERFORM LIES_E070 USING TARSYS_PROD
                   CHANGING PROD_VORHANDEN.
    PERFORM LIES_E070 USING TARSYS_KONS
                   CHANGING KONS_VORHANDEN.
    if p_trans = 'X'.
      CHECK KONS_VORHANDEN = SPACE OR PROD_VORHANDEN = SPACE.
    endif.
    WRITE: /4 E070V-TRKORR(10), V.
    HIDE e070v-trkorr.
    CASE e070v-trfunction.
      WHEN 'R'. WRITE: 'Reparatur  ', v.
      WHEN 'K'. WRITE: 'Änd.Auftrag', v.
      WHEN 'W'. WRITE: 'Customizing', v.
      WHEN OTHERS. WRITE: e070v-trfunction, v.
    ENDCASE.

    PERFORM WRITE_STATUS USING TARSYS_KONS.
    PERFORM WRITE_STATUS USING TARSYS_PROD.

    WRITE:  e070v-as4date, v,
            e070v-as4time, v,
            e070v-as4text(60), v.
    IF e070v-strkorr NE space.
      WRITE: 'Transportiert mit:', e070v-strkorr.
    ENDIF.

    IF p_check = 'X' and
     ( KONS_VORHANDEN = SPACE OR PROD_VORHANDEN = SPACE ).
      PERFORM check_objekte.
    ENDIF.

  ENDLOOP.
  SCROLL LIST TO FIRST PAGE LINE aktuelle_zeile INDEX 1.
  CLEAR e070v-trkorr.

ENDFORM.

*---------------------------------------------------------------------*
*       FORM LIES_E070                                                *
*---------------------------------------------------------------------*
FORM lies_e070 USING dest CHANGING vorhanden.

  CLEAR korr.
*-- Wenn Customizingaufgaben an einen anderen Transportauftrag
*   gehängt werden, so steht dieser in E070-STRKORR
*   Wenn STRKORR gefüllt ist, dann diesen Auftrag zum Lesen nehmen
  IF e070v-strkorr = space.
    korr = e070v-trkorr.
  ELSE.
    korr = e070v-strkorr.
  ENDIF.
  PERFORM read_tr USING dest korr vorhanden.

ENDFORM.


*---------------------------------------------------------------------*
*       FORM TOP_OF_PAGE                                              *
*---------------------------------------------------------------------*
FORM top_of_page.

  WRITE: / sy-uline(126),
         /6  'Korrektur',
          20 'Typ',
          31 'KONS',
          36 'PROD',
        / sy-uline(126).

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  WRITE_STATUS
*&---------------------------------------------------------------------*
FORM write_status USING status.

  CASE status.
    WHEN TARSYS_KONS.
      CASE KONS_VORHANDEN.
        WHEN 'X'. ICON_KONS = ZICON_OKAY.
        WHEN 'A'. ICON_KONS = ZICON_ACTIVATE.
        WHEN 'W'. ICON_KONS = ZICON_TRANSPORT.
        WHEN ' '. ICON_KONS = ZICON_CANCEL.
      ENDCASE.
      IF ICON_KONS = ZICON_CANCEL.
        WRITE: ICON_KONS AS ICON NO-GAP, 34 '|'.
      ELSE.
        WRITE: ICON_KONS AS ICON NO-GAP, 34 '|'.
      ENDIF.
      CASE PROD_VORHANDEN.
        WHEN 'X'. ICON_PROD = ZICON_OKAY.
        WHEN 'A'. ICON_PROD = ZICON_ACTIVATE.
        WHEN 'W'. ICON_PROD = ZICON_TRANSPORT.
        WHEN ' '. ICON_PROD = ZICON_CANCEL.
      ENDCASE.
      IF ICON_PROD = ZICON_CANCEL.
        WRITE: ICON_PROD AS ICON HOTSPOT ON NO-GAP, 39 '|'.
      ELSE.
        WRITE: ICON_PROD AS ICON NO-GAP, 39 '|'.
      ENDIF.
  ENDCASE.

ENDFORM.                               " WRITE_STATUS

*&---------------------------------------------------------------------*
*&      Form  CHECK_OBJEKTE
*&---------------------------------------------------------------------*
FORM check_objekte.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
            TEXT = e070v-trkorr.

  SELECT * FROM e071 INTO TABLE x071
                     WHERE trkorr = e070v-trkorr.
  LOOP AT x071.
    e071 = x071.
     *e071 = e071.
    SELECT * FROM e071 INTO TABLE t071
                       WHERE pgmid    = *e071-pgmid
                         AND object   = *e071-object
                         AND obj_name = *e071-obj_name
                         AND trkorr NE e071-trkorr.
    SELECT SINGLE * FROM e070  WHERE trkorr = x071-trkorr.
    current_ts-date = e070-as4date.
    current_ts-time = e070-as4time.
    REFRESH t_e071_checked.
    LOOP AT t071.
      SELECT SINGLE * FROM e070v WHERE trkorr = t071-trkorr.
      check_ts-date = e070v-as4date.
      check_ts-time = e070v-as4time.
      if p_rueck = space.
        CHECK check_ts < current_ts.
      else.
        check check_ts > current_ts.
      endif.
      CHECK e070v-trfunction = 'K'.
*-- Konsolidierung vorhanden? --*
      PERFORM READ_TR
        USING TARSYS_KONS T071-TRKORR T_E071_CHECKED-KONS.
*-- Produktiv vorhanden? --*
      PERFORM READ_TR
        USING TARSYS_PROD T071-TRKORR T_E071_CHECKED-PROD.
*-- Sätze merken
      t_e071_checked-trkorr  = e070v-trkorr.
      t_e071_checked-as4user = e070v-as4user.
      t_e071_checked-as4date = e070v-as4date.
      t_e071_checked-as4time = e070v-as4time.
      IF T_E071_CHECKED-KONS = SPACE OR
         T_E071_CHECKED-PROD = SPACE.
        APPEND t_e071_checked.
      ENDIF.
    ENDLOOP.

    CHECK NOT t_e071_checked[] IS INITIAL.
*-- Ausgabe
    WRITE: /5 e071-pgmid    COLOR COL_TOTAL,
              e071-object   COLOR COL_TOTAL,
              e071-obj_name COLOR COL_TOTAL,
              e071-objfunc  COLOR COL_TOTAL,
              e071-lockflag COLOR COL_TOTAL,
              e071-gennum   COLOR COL_TOTAL.

    SORT t_e071_checked BY as4date DESCENDING as4time DESCENDING.
    LOOP AT t_e071_checked.
      SELECT SINGLE * FROM e070v WHERE trkorr = t_e071_checked-trkorr.
      WRITE: /10 t_e071_checked-trkorr,
                 t_e071_checked-as4user,
                 t_e071_checked-as4date,
                 t_e071_checked-as4time.
      IF T_E071_CHECKED-KONS = 'X'.
        WRITE 'KONS' COLOR 5.
      ELSE.
        WRITE 'KONS' COLOR 6.
      ENDIF.
      IF T_E071_CHECKED-PROD = 'X'.
        WRITE 'PROD' COLOR 5.
      ELSE.
        WRITE 'PROD' COLOR 6.
      ENDIF.
      WRITE e070v-as4text INTENSIFIED OFF.
      HIDE e070v.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                               " CHECK_OBJEKTE

*---------------------------------------------------------------------*
*       FORM READ_TR                                                  *
*---------------------------------------------------------------------*
FORM READ_TR USING DEST TYPE ANY
                   tr LIKE korr
                   vorhanden_flag.

  CALL FUNCTION 'TR_READ_COMM'
       DESTINATION dest
       EXPORTING
            wi_dialog             = ' '
            wi_sel_e070           = 'X'
            wi_trkorr             = tr
       IMPORTING
            we_e070               = e070
            we_e07t_doesnt_exist  = we_de
       TABLES
            wt_e071               = wt_e071
            wt_e071k              = wt_e071k
       EXCEPTIONS
            not_exist_e070        = 1
            no_authorization      = 2
            OTHERS                = 3.
  IF sy-subrc = 0.
    vorhanden_flag = 'X'.
  ELSE.
    vorhanden_flag = space.
  ENDIF.

ENDFORM.                               "read_tr

 

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)