Ausgabe der Änderungen auf Personalstamm

Getting started ... Alles für einen gelungenen Start.
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Ausgabe der Änderungen auf Personalstamm

Beitrag von jeyloeso (ForumUser / 29 / 6 / 0 ) »
Hallo Zusammen,

ich habe ein Programm zum Ausgabe der Änderungen der Mitarbeiteradressen. Das Programm wird nur dann ausgeführt, wenn die Adresse der Mitarbeiter geändert wird. Jetzt will ich aber auch die Namenänderungen ausgeben. Also, das Programm soll laufen, wenn sich Nachname nach der Heirat oder Scheiden ändert.Ich habe folgende Code geschrieben aber stimmt nicht ganz. Ich bitte um einen Blick und Hilfe.

Code: Alles auswählen.

* Selektion Daten zur Person

  SELECT pernr vorna nachn gbdat name2 aedtm FROM pa0002
    INTO (wa_empl-empnosap, wa_empl-firstname, wa_empl-lastname, l_gbdat, l_name2, a_change)
   WHERE begda <= sy-datum
     AND endda >= sy-datum.
    IF NOT l_gbdat IS INITIAL.
      CONCATENATE l_gbdat+0(4)  l_gbdat+4(2)  l_gbdat+6(2) INTO wa_empl-dbirth.
    ENDIF.
*    ****    Es wurde eine Namenänderung gefunden
    IF a_change BETWEEN l_gestern AND w_zidat-datum.
   
      SELECT pernr vorna nachn gbdat FROM pa0002
        INTO (wa_empl-empnosap, wa_empl-firstname, wa_empl-lastname, l_gbdat)
        WHERE pernr = wa_empl-empnosap
        AND   begda >= sy-datum
        AND   endda <= sy-datum
        AND  aedtm >= w_zidat-datum.
        ENDSELECT.
 ENDIF.
*        Selektion Anschriften zur Person
    CLEAR: change_adr.
    SELECT land1 pstlz ort01 stras endda  FROM pa0006
      INTO (wa_empl-country, wa_empl-zipcode, wa_empl-city, wa_empl-street1, l_dummy)
     WHERE pernr =  wa_empl-empnosap
       AND begda <= sy-datum
       AND endda >= sy-datum
       AND aedtm BETWEEN w_zidat-datum AND sy-datum "l_gestern
      ORDER BY endda ASCENDING.
    ENDSELECT.                 


*   Es wurde eine Adressänderung gefunden, die eine Änderung hat.
    IF sy-subrc EQ 0.
      CLEAR: l_eintritt, l_datum.
*     Selektion Ein-/Austritt
      SELECT begda FROM pa0000 INTO l_eintritt
                          WHERE pernr =  wa_empl-empnosap
                            AND massn IN ('01','12','19','20','32','52','63')
                            ORDER BY begda ASCENDING.

      ENDSELECT.
      IF NOT l_eintritt IS INITIAL.
        CONCATENATE l_eintritt '000000'  INTO wa_empl-timestampfrom.
      ENDIF.

      CLEAR : l_datum, l_dummy.
      SELECT begda endda FROM pa0000 INTO (l_datum, l_dummy)
                          WHERE pernr = wa_empl-empnosap
                            AND begda >=  l_eintritt
                            AND massn IN ('10','30','54','64')
                          ORDER BY endda ASCENDING.
      ENDSELECT.

      IF NOT l_datum IS INITIAL.
        CONCATENATE l_datum '000000'  INTO wa_empl-timestampto.
      ENDIF.

*     In Ausgabetabelle.
      PERFORM in_ausgabe_tabelle.

    ELSE.

*     Überprüfe auf Änderung Ein/Ausrittsdatum
      SELECT begda FROM pa0000 INTO l_datum
                          WHERE pernr = wa_empl-empnosap
                            AND aedtm BETWEEN  w_zidat-datum AND l_gestern
                            AND massn IN ('01','12','19','20','32','52','63','10','30','54','64').
      ENDSELECT.

      IF sy-subrc EQ 0.
        CLEAR: l_eintritt, l_datum.
        SELECT land1 pstlz ort01 stras endda FROM pa0006
          INTO (wa_empl-country, wa_empl-zipcode, wa_empl-city, wa_empl-street1, l_dummy)
         WHERE pernr = wa_empl-empnosap
           AND begda <= sy-datum
           AND endda >= sy-datum
         ORDER BY endda ASCENDING.
        ENDSELECT.
*       Selektion Ein-/Austritt
        SELECT begda FROM pa0000 INTO l_eintritt
                            WHERE pernr = wa_empl-empnosap
                              AND massn IN ('01','12','19','20','21','32','52','63')
                              ORDER BY begda ASCENDING.
        ENDSELECT.
        IF NOT l_eintritt IS INITIAL.
          CONCATENATE l_eintritt '000000'  INTO wa_empl-timestampfrom.
        ENDIF.

        CLEAR : l_datum, l_dummy.
        SELECT begda endda FROM pa0000 INTO (l_datum, l_dummy)
                            WHERE pernr =  wa_empl-empnosap
                              AND begda >=  l_eintritt
                              AND massn IN ('10','30','54','64')
                            ORDER BY endda ASCENDING.
        ENDSELECT.
        IF NOT l_datum IS INITIAL.
          CONCATENATE l_datum '000000'  INTO wa_empl-timestampto.
        ENDIF.

*       In Ausgabetabelle.
        PERFORM in_ausgabe_tabelle.
      ENDIF.
    ENDIF.
    CLEAR wa_empl.
  ENDSELECT.
ENDFORM.                    " DATEN_AUFBEREITEN
Schöne Grüße,
Jeyloeso

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Ausgabe der Änderungen auf Personalstamm

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
hi!

Ich glaub du vertust dich ein wenig mit den Datümern (= Mehrzahl von Datum ;) )
Bei deinem ersten SELECT ist nicht garantiert, dass du den aktuellsten Satz des Mitarbeiters hast.
Bei dem zweiten SELECT fragst du auf den FALSCHEN Zeitraum ab. Ich denke hier sollte eher nach AEDTM < A_CHANGE abgefragt werden.

Ein Vorschlag meinerseits:
Versuch zuerst ALLE Datensätze (INTO TABLE) aus PA0002 zu laden, die ein Änderungsdatum (AEDTM) in deinem gesuchten Zeitraum (BETWEEN w_zidat-datum AND sy-datum) haben. Diese Datensätze musst du nun "verdichten". Und zwar darf nur der aktuellste Satz je Mitarbeiter übrigbleiben. Also SORT mit PERNR und AEDTM absteigend. Dannach noch ein DELETE ADJACENT DUPLICATES mit PERNR.
Als Ergebnis hast du nun die aktuellste Version des Eintrages je Mitarbeiter.

Mit diesen Informationen suchst du dir dann je Mitarbeiter (via LOOP AT) die Vorgängerversion(en) wobei das AEDTM kleiner dem des aktuellen Datensatzes (aus dem LOOP) sein muss. Diese Daten dann wieder nach dem Änderungsdatum ABSTEIGEND sortieren um auf INDEX 1 die zuletzt gültige Version zu erhalten.
Dann brauchst du nur noch die Daten vergleichen und evtl. Änderungen aufzeigen.

Die Aufbereitung der Adressänderung sollte ähnlich funktionieren, dasselbe gilt auch für das Eintritts/Austrittsdatum.

Sorry, dass ich dir hier kein Coding posten (kann). Wir haben die Tabellen (vermutlich BW) nicht im Einsatz und daher kann ich nicht so einfach ein Programm aus dem Hut zaubern.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
jeyloeso

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Ausgabe der Änderungen auf Personalstamm

Beitrag von jeyloeso (ForumUser / 29 / 6 / 0 ) »
Hallo,

deinen Vorschlag habe ich versucht aber ich konnte immer noch nocht die richtige Ergebnisse bekommen.
Es kann sein, wenn Name geändert wird, wird auch die Adresse geändert oder Name wird nicht geändert aber die Adresse wird geändert oder Name wird geändert oder die Adresse wird nicht geändert.

Ich muss alle Fälle beachten.
:( :(
Bitte um Vorschläge und Hilfe.
Schöne Grüße

Re: Ausgabe der Änderungen auf Personalstamm

Beitrag von wreichelt (Top Expert / 1085 / 32 / 197 ) »
Hallo,
ja klar kann so etwas vorkommen, aber die Adresse ist ein eigener Infotyp genauso wie der Namen einen eigenen Infotyp hat.
Lese doch alle Infotypen Name bzw Adresse ein und ermittle über die Tabelle dann die Änderungen.

Gruß
Wolfgang

Seite 1 von 1

Vergleichbare Themen

8
Antw.
4652
Views
Buchung in FI mit Pers.Nr.+ Bankdaten aus Personalstamm
von Blueshape » 29.01.2007 16:26 • Verfasst in Financials
7
Antw.
6521
Views
Write-Ausgabe vor Alv-Grid Ausgabe
von L0w-RiDer » 14.08.2019 14:09 • Verfasst in ABAP® für Anfänger
1
Antw.
3710
Views
Protokollierung der Änderungen
von LeonBarthez » 06.08.2007 13:38 • Verfasst in Human Resources
3
Antw.
4053
Views
Änderungen der Datenbank
von SAP_ENTWICKLER » 07.12.2018 06:24 • Verfasst in ABAP® Core
1
Antw.
4300
Views
Änderungen in Infotypen
von mamba » 23.04.2007 14:02 • Verfasst in Human Resources

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Ermittlung der Arbeitstage (Mosid)
vor 2 Tagen von Radinator 11 / 45932
LSMW-Problem
vor einer Woche von DeathAndPain gelöst 6 / 3835
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor einer Woche von Sebastian82 gelöst 4 / 2318

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Ermittlung der Arbeitstage (Mosid)
vor 2 Tagen von Radinator 11 / 45932
LSMW-Problem
vor einer Woche von DeathAndPain gelöst 6 / 3835
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor einer Woche von Sebastian82 gelöst 4 / 2318