“ID erwartet” duplizieren von Untertabelle
Hallo,
ich versuche einen Eintrag mit seiner Untertabelle per Befehlschaltfläche zu duplizieren.
hier ist der Code:
let currRec := this.Nr;
duplicate(this);
for r in OrderItems do
let item := create(OrderItems);
end
Allerdings erhalte ich jetzt den Fehler: “ID Erwartet in der Zeile 5, Spalte 20”
Ich bin mir nicht sicher welche ID ich angeben soll oder wie die Syntax sein soll.
Ich freue mich über jeden Ansatz.
9 Antworten
-
Hallo Axel,
so allgemein: ich würde in der Tabelle OrderItems die Verknüpfung zu der Tabelle Orders (wenn sie so heißt) bei Komposition auf Ja stellen. Dann werden die Rechnungspositionen bei duplicate(this) auch mit dupliziert. Ansonsten:---
let currRec := this;
let newRec:=duplicate(this);
for r in OrderItems do
let newItem := create OrderItems;
newItem.Order:=newRec;
end
---
Leo
-
Hallo,
habe mein Problem gefunden. Es war eine verwirrend benannte Variable: OrderItems und “Order Items”
Danke für den Hinweis mit der Komposition! -
Hallo, hänge mich hier mal dran.
Ich habe eine Tabelle Tab1 mit einem verknüpften Feld Tab2.Schuljahr. Schuljahr ist ein Zahlfeld, die Einträge der Form 202122 für Schuljahr 2021/22. Es handelt sich dabei um eine Komposition. Ich möchte einen Datensatz duplizieren und dabei ein Schuljahr hochzählen. Mein Code:
let nextSJ := Tab2.Schuljahr + 101;
let d := duplicate(this);
d.Tab2.(Schuljahr := nextSJ);
popupRecord(d)
Ich erhalte aber das gleiche Schuljahr wie vom Ausgnagsrecord. Nehme an, das liegt an der Komposition (kann nicht geändert werden). Gibt es da einen Trick?
Grüße Maurice
-
Hallo Maurice, wenn Tab2 eine Untertabelle (= Komposition) von Tab1 ist, dann enthält sie potenziell mehrere Datensätze. Man müsste in dem Fall angeben, aus welchem dieser Datensätze der Werte 'Schuljahr' gelesen werden soll. Falls bei allen Datensätzen der Untertabelle dasselbe Schuljahr eingetragen ist, könnte man es so versuchen:
let nextSJ := first(Tab2).Schuljahr + 101;
let d := duplicate(this);
d.Tab2.(Schuljahr := nextSJ);
popupRecord(d)
-
Hallo planox,
es ist umgekehrt: Tab1 ist Untertabelle von Tab2. Ändere ich das Schuljahr über den aufgeführten Befehl, bezieht sich diese Änderung auch auf den Ursprungsdatensatz, siehe auch:
Ich habe keine Lösung gefunden, die die alten Einträge im Ursprungsdatensatz belässt und die Änderungen nur im neuen Datensatz vornimmt. Die Änderung war sogar fatal, da bei einer Komposition auch alle damit verbundenen DAtensatz geändert wurden. Das gab ein Riesendurcheinander.
-
Hm, ich bin mir immer noch nicht ganz sicher, ob ich es richtig verstanden habe. Tab2 und deren Untertabelle Tab1 enthalten beide jeweils ein Feld 'Schuljahr'? Aus einem Datensatz von Tab1 heraus soll dieser nun mittels einer Schaltfläche dupliziert und der Wert 'Schuljahr' mit dem aus Tab2 + 101 gefüllt werden? Falls ja, dann würde ich es so versuchen:
let nextSJ := Tab2.Schuljahr + 101;
let newSJ := duplicate(this);
newSJ.(Schuljahr := nextSJ);
closeRecord();
popupRecord(newSJ)
Die Variable 'd' habe ich nur in 'newSJ' geändert, weil aus einem einzigen Buchstaben bestehende Bezeichnungen u. U. Probleme bereiten können (ncht: müssen).
PS: Zum Entwickeln und Ausprobieren am besten immer mit einer Kopie der Produktiv-Datenbank arbeiten!
-
Off-Topic:
Da es hier häufiger zu Verständnisproblemen, was den Aufbau der DB zu einer konkreten Fragestellung kommt, ist es manchmal hilfreich eine Beispiel-DB zu dem Problem zur Verfügung zu stellen.
Hier nun ein kostenloser Schweizer Anbieter: https://www.swisstransfer.com/de
bei dem man die Beispiel-DB hochladen kann und den generierten DownloadLink für 14 Tage zur Verfügung stellt.
Der Link ist nach dieser Zeit nicht mehr gültig und auch das File wird gelöscht.Es werden keine Anmeldedaten oÄ verlangt.
-
Ergänzung/Korrektur:
30 Tage Gültigkeit Download-Link
Endgültiges löschen der Datei 2 Monate nach dem Ende der Verfügbarkeit. -
Hallo,
der Code von planox funktioniert nicht (er muss leicht ergänzt werden mit Tab2)
l
et nextSJ := Tab2.Schuljahr + 101;
let newSJ := duplicate(this);
newSJ.Tab2.(Schuljahr := nextSJ);
closeRecord();
popupRecord(newSJ)
Ich habe unter
https://nx1749.your-storageshare.de/s/RmYR9ywLTk4XNpj
für 7 Tage eine Beispiel-DB eingestellt. Dort unter Deputatsvergütungen findet man den entsprechenden Button.
Grüße Maurice
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 9Antworten
- 534Ansichten