ZFI_SKB Korrekturprogramm von Created By Updated by

Korrekturprogramm.

Im Falle von der Verteilung per ALE von Sachkontenstämmen kommt es immer wieder zu Differenzen der verschiedenen Mandanten / Systeme.

Diese sind im TCode SCMP für ska1 und skb1 gut ersichtlich.

Nicht zuletzt auf Grund der Differenzen beim Erzeuger und Datum.

Aber es wird eine Vielzahl von Differenzen ausgegeben, obwohl die Stämme meist gleich sind, erzeugt durch dne Transport per ALE.

Ein Vergleich der Systeme ist daher schwer, eine spätere Übertragung auf Grund der Vielzahl der Felder nicht unbedingt anzuraten.

Viel besser ist es, die Differenzen gezielt auszugleichen.

Die Differenzen bestehen aus Erfasser und Erfassungsdatum und tatsächlicher Einstellungsdifferenz. Die ersten beiden sind nicht wesentlich, ein Transport in diesem Fall ist daher nicht notwendig.

Dieses Programm ändert beim Sachkonto p_saknr des Buchungskreises p_bukrs wahlweise Erzeuger p_erfnam mit p_erf und Datum p_erdat mit p_date, um beim Vergleich der Stämme über die System hinweg die tatsächlichen Unterschiede zu finden. Das Programm führt diese Änderung nur im Echtlauf p_echt durch.

Wahlweise kann auch ein Bereich p_ber von Sachkonten so_saknr geändert werden.

REPORT zbc_skb.
*Version 2

TABLES skb1.
"DATA gt_skb1 LIKE TABLE OF skb1.
DATA wa TYPE skb1.

PARAMETERS p_saknr TYPE skb1-saknr DEFAULT ''.
PARAMETERS p_bukrs TYPE skb1-bukrs DEFAULT '1000'.
PARAMETERS p_erdat TYPE skb1-erdat DEFAULT '20181231'.
PARAMETERS p_ernam TYPE skb1-ernam DEFAULT 'RFC_ALE'.
PARAMETERS p_date AS CHECKBOX DEFAULT 'X'.
PARAMETERS p_erf AS CHECKBOX DEFAULT 'X'.

PARAMETERS p_echt AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN SKIP.
PARAMETERS p_ber AS CHECKBOX DEFAULT ''.
SELECT-OPTIONS so_saknr FOR skb1-saknr DEFAULT '9900'.

LOAD-OF-PROGRAM.
  "p_saknr = ''.

INITIALIZATION.
  "p_saknr = ''.

AT SELECTION-SCREEN OUTPUT.
  "p_saknr = ''.

AT SELECTION-SCREEN ON p_saknr.
  "p_saknr = ''.

START-OF-SELECTION.
  IF p_ber IS INITIAL.
    SELECT SINGLE * FROM skb1 WHERE skb1~saknr = @p_saknr AND skb1~bukrs = @p_bukrs INTO @wa .
    IF sy-subrc = 0.
      WRITE: wa-saknr, wa-bukrs, wa-erdat, wa-ernam.
      IF p_date = 'X'.
        wa-erdat = p_erdat.
      ENDIF.
      IF p_erf = 'X'.
        wa-ernam = p_ernam.
      ENDIF.
      WRITE: wa-saknr, wa-bukrs, wa-erdat, wa-ernam.
      IF p_echt = 'X'.
        WRITE: ' Update'.
        UPDATE skb1 FROM @wa.
      ELSE.
        WRITE: ' Test'.
      ENDIF.
      WRITE: wa-saknr, wa-bukrs, wa-erdat, wa-ernam.
      NEW-LINE.
    ELSE.
      WRITE: 'No data found'.
    ENDIF.
    CLEAR p_saknr.

  ELSE.



    SELECT * FROM skb1 INTO TABLE @DATA(gt_skb1) WHERE skb1~saknr IN @so_saknr AND skb1~bukrs = @p_bukrs .

    DATA lv_counter TYPE integer.
    lv_counter = 0.
    IF sy-subrc = 0.
      LOOP AT gt_skb1 INTO wa.
        WRITE: wa-saknr, wa-bukrs, wa-erdat, wa-ernam.
        IF p_date = 'X'.
          wa-erdat = p_erdat.
        ENDIF.
        IF p_erf = 'X'.
          wa-ernam = p_ernam.
        ENDIF.
        WRITE: wa-saknr, wa-bukrs, wa-erdat, wa-ernam.
        IF p_echt = 'X'.
          UPDATE skb1 FROM @wa."where skb1~saknr = wa-saknr and skb1~bukrs = wa-bukrs.
          WRITE: ' Update'. WRITE: sy-dbcnt, lv_counter.
          lv_counter = lv_counter + sy-dbcnt.
        ELSE.
          lv_counter = lv_counter + 1.
          WRITE: ' Test'. WRITE: lv_counter.
        ENDIF.
        NEW-LINE.
      ENDLOOP.
      NEW-LINE.
      IF p_echt = 'X'.
        WRITE: ' Update of ', lv_counter , 'Lines'.
      ELSE.
        WRITE: ' Possible Update of ', lv_counter , 'Lines'.
      ENDIF.
    ELSE.
      WRITE: 'No data found'.
    ENDIF.
    CLEAR p_saknr.
  ENDIF.