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:03Na 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.
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:03Im übrigen wäre mal interessant, welchem Zweck Dein neuer Infotyp genau dienen soll.
Ich habe Zeitbindung 2 eingestellt.DeathAndPain hat geschrieben: ↑17.03.2020 18:03Du wirst ZBK 3 haben und ZBK 2 (oder gar 1) benötigen.
Syntaktisch müsste esMeines erachtens, wenn ich schreibe " MOD, 9201, P2001-BEGDA, P2001-ENDDA, /D " versucht der einen Datensatz zu finden, mit den neu eingegebenen BEGDA und ENDDA.
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:Wie kann ich denn auf die alten Datensätze zugreifen?
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.
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.Ich habe Zeitbindung 2 eingestellt.
Da diese exakt passt: Infotyp darf Lücken haben, keine Mehrfachbelegung
Absolut korrekt, habe es geändert da es zu Fehlern geführt hat, danke dafür.DeathAndPain hat geschrieben: ↑18.03.2020 13:05Syntaktisch 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.
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.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:
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.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.
Code: Alles auswählen.
TABLES: rp50d,
pspar.
FORM it2001_datum_ermitteln.
rp50d-date1 = pspar-begda.
rp50d-date2 = pspar-endda.
ENDFORM.
Ich danke dir! Und vielleicht konnte ich dir mit der Tabelle PSPAR sogar noch was neues sagen. :DThat's Dynamische Maßnahmen for you. 😊
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.Reicht es dann nicht einfach, INS zu nehmen?
Dann brauchst Du die ganze Form nicht, sondern kannst in der Dyn. Maßnahme gleichCode: Alles auswählen.
rp50d-date1 = pspar-begda. rp50d-date2 = pspar-endda.
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: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.