Symptom:Falls Abwesenheiten durch einen Arbeitsplatzwechsel gesplittet werden, so wird für jeden Teil der Abwesenheit ein Erstattungsantrag ausgegeben.
Dies ist nicht korrekt.
Für die gesamte Abwesenheit darf nur ein einziger Antrag auf Erstattung erstellt werden.
Weitere Begriffe Ursache und VoraussetzungenProgrammfehler.
Abwesenheiten, die durch den o.a. Sachverhalt geteilt wurden, müssen wieder zusammengefaßt werden.
LösungBitte ändern Sie die mit "<<<=========" besonders gekennzeichneten Programmzeilen und fügen Sie die neuen Routinen am Ende des Members RPCEFCA0 ein.
Betroff. Member RPCEFZA0
...
...
CURRKY LIKE P0015-WAERS "Waehrung
VALUE 'ATS',
CNTR3_MAX LIKE AB-CNTR3 "Laender-Split Nr. 3 < <<========
VALUE 'FF',
...
...
DATM TYPE D, "Datum
DATE TYPE D. "Datum
...
...
DATA: BEGIN OF OLD_AB. "Kopfzeile von AB <<<========
INCLUDE STRUCTURE PC20I. "<<<========
DATA: END OF OLD_AB. "<<<========
Betroff. Member: RPCEFCA0
Routine : COMPUTE_ABSENCE
FORM COMPUTE_ABSENCE.
* vor der eigentlichen Verarbeitung muessen noch diverse Variablen
* pro Abrechnungsperiode initialisiert werden
PERFORM RESET_PER_PERIOD.
* unrechtmaessig geteilte Abwesenheiten muessen vorab wieder zu-
* sammengefuegt werden
PERFORM MARK_DUPL_AB. "<<<========
* pro Abwesenheit muss nun festgestellt werden, ob es sich um eine
* erstattungsfaehige Abwesenheit handelt
LOOP AT AB.
* sind ueberhaupt die entsprechenden Lohnarten vorhanden?
PERFORM CHECK_AMOUNT USING AB-ABZNR FOUND REF_BETRG.
* CHECK: FOUND = TRUE. "alles OK? <<<========
CHECK: NOT REF_BETRG IS INITIAL AND"Betrag vorhanden? <<<========
AB-CNTR3 <> CNTR3_MAX. "Abwesenheit? <<<========
* vor der eigentlichen Verarbeitung einer Abwesenheit muessen be-
...
...
ENDFORM.
Betroff. Member: RPCEFCA0
Routine : CHECK_AMOUNT
FORM CHECK_AMOUNT USING $ABZNR $FOUND $BETRG.
* assume - keine Lohnarten vorhanden
CLEAR: $FOUND. "<<<========
* $BETRG. "<<<========
* falls eine neue Abwesenheit vorliegt, soll Betrag initialisiert
* werden (d.h. ungerechtfertigt geteilte Abwesenheiten werden
* wieder kumuliert)
PERFORM COMP_AB_OLD_AB USING CHAR. "<<<========
IF CHAR <> TRUE. "neue Abwesenheit? <<<========
CLEAR: $BETRG. "reset Betrag <<<========
ENDIF. "<<<========
OLD_AB = AB. "Daten uebernehmen <<<========
LOOP AT RT "Ergebnistabelle
WHERE ABZNR = $ABZNR. "AB-Split-Kennzeichen
...
...
ENDFORM.
Betroff. Member: RPCEFCA0
Routine : MARK_DUPL_AB (Gesamte Routine ist NEU!!!)
*---------------------------------------------------------------------*
* FORM MARK_DUPL_AB *
*---------------------------------------------------------------------*
* Geteilte Abwesenheiten muessen u.U. wieder zusammengefasst werden. *
*---------------------------------------------------------------------*
FORM MARK_DUPL_AB.
DESCRIBE TABLE AB LINES TABL_RECS. "Abwesenheiten vorhanden?
CHECK: TABL_RECS > 0. "Verarbeitung bei mindestens 1
TABL_INDX = 1. "erster Tabelleneintrag
READ TABLE AB INDEX TABL_INDX. "mit erstem Eintrag beginnen
OLD_AB = AB. "in OLD-Struktur und
WHILE TABL_INDX < TABL_RECS. "Vergleiche durchfuehren
TABL_INDX = TABL_INDX + 1. "Index erhoehen
READ TABLE AB INDEX TABL_INDX. "vorhergehender Eintrag
* unrechtmaessige Splittung der Abwesenheit feststellen
PERFORM COMP_AB_OLD_AB USING CHAR.
IF CHAR = TRUE. "sind Abwesenheiten gleich?
PERFORM CORRECT_AB USING TABL_INDX. "Beginn-Datum/Markierung
ENDIF.
OLD_AB = AB. "Daten uebernehmen (f. Vergl.)
ENDWHILE.
CLEAR: OLD_AB. "reset Kopfzeile
ENDFORM.
Betroff. Member: RPCEFCA0
Routine : COMP_AB_OLD_AB (Gesamte Routine ist NEU!!!)
*---------------------------------------------------------------------*
* FORM COMP_AB_OLD_AB *
*---------------------------------------------------------------------*
* Feststellen, ob Abwesenheit unrechtmaessig (wg. Arbeitsplatz- *
* wechsel) gesplittet wurde. *
*---------------------------------------------------------------------*
* $CHAR -- Output-Parameter *
* gibt an, ob zwei Abwesenheiten (eine in Tab. AB, *
* die andere in OLD_AB) gleich sind - d.h. Split er- *
* folgte wegen Arbeitsplatzwechsel *
* es gilt: TRUE -- Gleichheit der Abwesenheiten *
* FALSE -- sonst *
*---------------------------------------------------------------------*
FORM COMP_AB_OLD_AB USING $CHAR.
* assume Ungleichheit
$CHAR = FALSE.
CHECK: AB-OBEGD = OLD_AB-OBEGD AND "urspruengl. Beginn?
AB-OENDD = OLD_AB-OENDD AND "urspruengl. Ende?
AB-KLBEW = OLD_AB-KLBEW. "Bewertungsklasse?
$CHAR = TRUE. "Abwesenheiten sind gleich!
ENDFORM.
Betroff. Member: RPCEFCA0
Routine : CORRECT_AB (gesamte Routine ist NEU!!!!)
*---------------------------------------------------------------------*
* FORM CORRECT_AB *
*---------------------------------------------------------------------*
* Datumsangaben der Abwesenheit korrigieren, damit werden geteilte *
* Abwesenheiten besonders markiert und koennen somit entsprechend *
* verarbeitet werden. *
*---------------------------------------------------------------------*
* $INDX -- Input-Parameter *
* Tabellen-Index *
*---------------------------------------------------------------------*
FORM CORRECT_AB USING VALUE($INDX).
* aktuellen Tabelleneintrag bearbeiten
AB-BEGDA = OLD_AB-BEGDA. "Beginn der Abwesenheit
AB-APZNR = OLD_AB-APZNR. "WPBP-Zuordnung
MODIFY AB INDEX $INDX. "Aenderung durchfuehren
OLD_AB = AB. "Daten uebernehmen (Vergleich)
$INDX = $INDX - 1. "Index vermindern
* vorhergehenden Tabelleneintrag bearbeiten
READ TABLE AB INDEX $INDX. "vorhergehenden Eintrag bearb.
AB-CNTR3 = CNTR3_MAX. "Abwesenheit markieren
MODIFY AB INDEX $INDX. "Aenderungen uebernehmen
AB = OLD_AB. "reset Kopfzeile
ENDFORM.