Dynamische Maßnahme

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

Dynamische Maßnahme

Beitrag von NLengner (ForumUser / 31 / 6 / 2 ) » 17.03.2020 15:19
Hallo Zusammen!

Ich hoffe es kann mir jemand helfen, ich habe einen neuen Infotyp (9201) erstellt. Wenn ich eine Abwesenheit(2001er) erstelle wird über eine Dynamische Maßnahme (Verdeckt) auch ein Datensatz im 9201er erstellt.
Wenn ich diesen Datensatz aus dem 2001er lösche, wird er auch aus dem 9201er dieser Datensatz gelöscht (auch verdeckte Dynamische Maßnahme), soweit so gut. Wie bekomme ich es allerdings hin, dass ich den 2001er Datensatz bearbeite (Änderung vom Datum zum Beispiel) und dieser im 9201er auch Bearbeitet wird?

Ich habe eine Dynamische Maßnahme erstellt (siehe Anhang), es wird im 9201er ein korrekter Satz erstellt, ABER der alte Satz bleibt im 9201er bestehen. Somit habe ich einen aktiven und einen veralteten Datensatz im Infotyp 9201 stehen.

Hinweis: ich nutze zum erstellen/löschen/bearbeiten der Datensätze immer pa30

Viele Grüße
NLengner :)


Re: Dynamische Maßnahme

Beitrag von DeathAndPain (Top Expert / 1329 / 144 / 313 ) » 17.03.2020 18:03
Na ja, nur MOD ist ein bisschen wenig, denn wenn Du einen bestehenden Datensatz ändern willst, dann musst Du dem System schon auch sagen, welchen genau Du meinst. Insofern würde ich an Deiner Stelle versuchen, hinter dem MOD, 9201 noch die Objekt-ID sowie Beginn- und Endedatum anzugeben.

Im übrigen wäre mal interessant, welchem Zweck Dein neuer Infotyp genau dienen soll. Für mich klingt das nämlich so, als ob es von Deinem neuen Infotypen immer nur einen pro Zeit geben soll und Du bei der Erstellung des Infotyps die Zeitbindungsklasse falsch gewählt hast. Du wirst ZBK 3 haben und ZBK 2 (oder gar 1) benötigen. Wenn die ZBK stimmt, dann verdrängt ein neuer Infotypsatz automatisch einen in dem Zeitraum bereits bestehenden.

Re: Dynamische Maßnahme

Beitrag von NLengner (ForumUser / 31 / 6 / 2 ) » 18.03.2020 07:59
DeathAndPain hat geschrieben:
17.03.2020 18:03
Na ja, nur MOD ist ein bisschen wenig, denn wenn Du einen bestehenden Datensatz ändern willst, dann musst Du dem System schon auch sagen, welchen genau Du meinst. Insofern würde ich an Deiner Stelle versuchen, hinter dem MOD, 9201 noch die Objekt-ID sowie Beginn- und Endedatum anzugeben.
Wie kann ich denn auf die alten Datensätze zugreifen? Meines erachtens, wenn ich schreibe " MOD, 9201, P2001-BEGDA, P2001-ENDDA, /D " versucht der einen Datensatz zu finden, mit den neu eingegebenen BEGDA und ENDDA.
DeathAndPain hat geschrieben:
17.03.2020 18:03
Im übrigen wäre mal interessant, welchem Zweck Dein neuer Infotyp genau dienen soll.
Als Schnittstelle, für unser Workday (eigene Entwicklung), das wäre zu umfangreich es genau zu erklären.
DeathAndPain hat geschrieben:
17.03.2020 18:03
Du wirst ZBK 3 haben und ZBK 2 (oder gar 1) benötigen.
Ich habe Zeitbindung 2 eingestellt.
Da diese exakt passt: Infotyp darf Lücken haben, keine Mehrfachbelegung

VG

Re: Dynamische Maßnahme

Beitrag von DeathAndPain (Top Expert / 1329 / 144 / 313 ) » 18.03.2020 13:05
Meines erachtens, wenn ich schreibe " MOD, 9201, P2001-BEGDA, P2001-ENDDA, /D " versucht der einen Datensatz zu finden, mit den neu eingegebenen BEGDA und ENDDA.
Syntaktisch müsste es

MOD, 9201, (P2001-BEGDA), (P2001-ENDDA), /D

lauten, da Du die Datümer ja indirekt angibst. Aber natürlich passt das nur, wenn der Gültigkeitszeitraum des IT 2001 deckungsgleich mit dem Deines 9201 ist.
Wie kann ich denn auf die alten Datensätze zugreifen?
Eigentlich hätte ich erwartet, dass er den erstbesten nimmt, wenn Du nur MOD ohne Datumsangabe angibst. Aber wenn das nicht funktioniert, dann wirst Du die Datümer vorher über eine Subroutine einlesen müssen. Das sieht dann in etwa so aus:

F IT2001_DATUM_ERMITTELN(ZHR_IT2001_DYN_MASSN)
I MOD, 9201, (RP50D-DATE1), (RP50D-DATE2), /D

Dazu legst Du in der SE38 ein Programm namens "ZHR_IT2001_DYN_MASSN" vom Typ "Subroutinenpool" (bitte nicht "Report", das funktioniert zwar auch, ist aber Pfusch) an und packst dort die FORM rein. Unter der Maßgabe, dass es nur einen einzigen IT 9201-Datensatz für die Personalnummer gibt, sähe das so aus:

Code: Alles auswählen.

TABLES: RP50D, P2001.

FORM ZHR_IT2001_DYN_MASSN.
  SELECT SINGLE BEGDA ENDDA INTO (RP50D-DATE1,RP50D-DATE2) FROM PA9201
   WHERE PERNR = P2001-PERNR.
ENDFORM.
Wenn es mehrere PA9201-Sätze gibt (was gerade bei Deiner Zeitbindung 2 ja durchaus denkbar ist), dann müsstest Du die WHERE-Bedingung erweitern, um den richtigen zu erwischen.

That's Dynamische Maßnahmen for you. 😊
Ich habe Zeitbindung 2 eingestellt.
Da diese exakt passt: Infotyp darf Lücken haben, keine Mehrfachbelegung
Reicht es dann nicht einfach, INS zu nehmen? Du erzeugst also einen neuen Datensatz mit dem entsprechenden Gültigkeitszeitraum und änderst Werte nach Bedarf. Dann sieht man auch noch, was vorher dringestanden hat, und die Gültigkeitszeiträume in Deinem IT 9201 bekommen einen Sinn. Überlappende Zweitsätze kann es dann ja schon aus technischen Gründen nicht geben. Dein IT 9201 ist zu jedem Zeitpunkt eindeutig.

Re: Dynamische Maßnahme

Beitrag von NLengner (ForumUser / 31 / 6 / 2 ) » 27.03.2020 09:13
DeathAndPain hat geschrieben:
18.03.2020 13:05
Syntaktisch müsste es

MOD, 9201, (P2001-BEGDA), (P2001-ENDDA), /D

lauten, da Du die Datümer ja indirekt angibst. Aber natürlich passt das nur, wenn der Gültigkeitszeitraum des IT 2001 deckungsgleich mit dem Deines 9201 ist.
Absolut korrekt, habe es geändert da es zu Fehlern geführt hat, danke dafür.
Eigentlich hätte ich erwartet, dass er den erstbesten nimmt, wenn Du nur MOD ohne Datumsangabe angibst. Aber wenn das nicht funktioniert, dann wirst Du die Datümer vorher über eine Subroutine einlesen müssen. Das sieht dann in etwa so aus:

F IT2001_DATUM_ERMITTELN(ZHR_IT2001_DYN_MASSN)
I MOD, 9201, (RP50D-DATE1), (RP50D-DATE2), /D

Dazu legst Du in der SE38 ein Programm namens "ZHR_IT2001_DYN_MASSN" vom Typ "Subroutinenpool" an und packst dort die FORM rein. Unter der Maßgabe, dass es nur einen einzigen IT 9201-Datensatz für die Personalnummer gibt, sähe das so aus:

Code: Alles auswählen.

TABLES: RP50D, P2001.

FORM ZHR_IT2001_DYN_MASSN.
  SELECT SINGLE BEGDA ENDDA INTO (RP50D-DATE1,RP50D-DATE2) FROM PA9201
   WHERE PERNR = P2001-PERNR.
ENDFORM.
Wenn es mehrere PA9201-Sätze gibt (was gerade bei Deiner Zeitbindung 2 ja durchaus denkbar ist), dann müsstest Du die WHERE-Bedingung erweitern, um den richtigen zu erwischen.
Habe ich so gemacht bis auf das SELECT. Denn ich habe mich noch weiter umschauen müssen, da ich definitiv mal mehr als nur ein Satz haben werde.
Wenn man PSPAR mit hinzufügt bekommt man die Werte des vorherigen Satzes und man kann diese an RP50D übergeben. sieht dann so aus:

Code: Alles auswählen.

TABLES: rp50d,
        pspar.
FORM it2001_datum_ermitteln.

  rp50d-date1 = pspar-begda.
  rp50d-date2 = pspar-endda.

ENDFORM.
That's Dynamische Maßnahmen for you. 😊
Ich danke dir! Und vielleicht konnte ich dir mit der Tabelle PSPAR sogar noch was neues sagen. :D
Reicht es dann nicht einfach, INS zu nehmen?
Nein da in dem Datensatz ein wichtiger Flag ist, der verändert werden muss, sobald der Datensatz irgendwie Modifiziert wird in der PA30, und für eine Ausgabetabelle ist.

VG

Re: Dynamische Maßnahme

Beitrag von DeathAndPain (Top Expert / 1329 / 144 / 313 ) » 31.03.2020 17:40

Code: Alles auswählen.

  rp50d-date1 = pspar-begda.
  rp50d-date2 = pspar-endda.
Dann brauchst Du die ganze Form nicht, sondern kannst in der Dyn. Maßnahme gleich

MOD,9201,(PSPAR-BEGDA),(PSPAR-ENDDA),/D

schreiben. Das haut aber nur hin, wenn Dein bereits bestehender IT 9201 genau das Beginn- und Endedatum aus PSPAR hat. Ich denke ohnehin, dass PSPAR-BEGDA = P2001-BEGDA und PSPAR-ENDDA = P2001-ENDDA sein wird, so dass Du im Vergleich zur vorherigen Variante nichts gewonnen hast.

Du brauchst ein klares Konzept, was für Sätze in Deinem IT 9201 stehen werden und vor allem, wie ihre Gültigkeitszeiträume beschaffen sein werden. Dann kannst Du auch einen SELECT formulieren, um den richtigen davon zu finden. Was Du da machst, wird nach meiner Überzeugung nicht funktionieren.
Nein da in dem Datensatz ein wichtiger Flag ist, der verändert werden muss, sobald der Datensatz irgendwie Modifiziert wird in der PA30, und für eine Ausgabetabelle ist.
Ja, das wird mit INS bei Zeitbindung 2 dann ja auch. Aber halt erst mit dem Beginndatum, zu dem der IT 2001 in der PA30 modifiziert worden ist. Hinterher kannst Du im IT 9201 dann z.B. sehen:

Satz 01.01.2019-18.09.2019 Flag nicht gesetzt: der IT 2001 wurde nicht manipuliert
Satz 19.09.2019-31.12.9999 Flag gesetzt: der IT 2001 wurde ab dem 19.09.2019 manipuliert


Nur so macht es ja überhaupt Sinn, in Deinem IT 9201 mit Zeiträumen zu arbeiten. Wenn Du das nicht haben willst, dann solltest Du Zeitbindung 1 machen und alle IT 9201 vom Beginn des ersten IT 0 bis zum 31.12.9999 gehen lassen. Dann hast Du effektiv einen zeitraumlosen Infotyp, so wie es z.B. auch beim IT 0709 (zentrale Personalnummer) der Fall ist.

Wenn Du im IT 9201 Zeiträume hast, dann sollten die auch eine Bedeutung haben.

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Aktuelle Forenbeiträge

Massenpflege Customer
vor 4 Stunden von Steffen gelöst 2 / 3063
Klasse CL_O2_DUMMY_CLASS
vor 6 Stunden von JohnLocklay 1 / 31
Fehler bei CATCH-Abfangung
vor 6 Stunden von STDIN gelöst 5 / 375
Eclipse: ungültiges Sperr-Handle
vor 6 Stunden von deejey 2 / 24