Eintragen einer Verknüpfung auf Knopfdruck
Hallo,
aus einer Auftragsbestätigung mache ich einen Lieferschein, auf Knopfdruck mit folgendem Code:
-----
let myAnswer := dialog("Neues Dokument", "Möchten Sie einen Lieferschein (LS) anlegen?", ["Ja", "Nein"]);
if myAnswer = "Ja" then
'Weitere Aktionen einblenden' := false;
duplicate(this);
angelegt := today();
Dokumenttyp := 2;
let lastNr := last((select Vorgang) order by 'LS-Nummer').'LS-Nummer';
let newNr := number(substr(lastNr, 2, 7)) + 1;
'LS-Nummer' := "LS" + format(newNr, "0000000");
Bereich := 2;
'Weitere Aktionen einblenden' := false;
Status := 3
end
---
Die Auftragsbestätigung wird also dupliziert. Im Datensatz Lieferschein findet sich dann eine Verknüpfung, in der ich gegenwärtig die Auftragsbestätigung eintrage, aus der dieser Lieferschein entstanden ist; und zwar manuell. Ziel ist eine Liste von verknüpften Datensätzen (Lieferschein, Rechnung etc) im Datensatz Auftragsbestätigung. Kann man diese manuelle Verknüpfung auch per Code machen, ggfls unter Ergänzung des o.g. Codes?
Wie stets bin ich für eure Hilfe sehr dankbar!
Viele Grüße, Heino
4 Antworten
-
Hat vielleicht jemand eine Idee, ist es überhaupt möglich, diese Verküpfungen zu automatisieren? Oder bin ich da auf dem Holzweg?
Viele Grüße, Heino
-
Hallo Heino, mit obigem Code dupllzierst du den Datensatz, änderst dann aber nicht die Kopie, sondern den Ausgangsdatensatz. Okay, im Ergebnis hast du auch eine Auftragsbestätigung und einen Lieferschein. Ich würde aber dennoch anders vorgehen, also die Auftragsbestätigung duplizieren und dann den neuen Datensatz zum Lieferschein machen. Mein Vorschlag:
let myAnswer := dialog("Neues Dokument", "Möchten Sie einen Lieferschein (LS) anlegen?", ["Ja", "Nein"]);
if myAnswer = "Ja" then
'Weitere Aktionen einblenden' := false;
let me := this;
let newLS := duplicate(this);
newLS.Vorgang := me;
newLS.(angelegt := today());
newLS.(Dokumenttyp := 2);
let lastNr := last((select Vorgang) order by 'LS-Nummer').'LS-Nummer';
let newNr := number(substr(lastNr, 2, 7)) + 1;
newLS.('LS-Nummer' := "LS" + format(newNr, "0000000"));
newLS.Bereich := 2;
newLS.('Weitere Aktionen einblenden' := false);
newLS.Status := 3;
openRecord(newLS)
end -
Lieber Copytexter,
da war ich ja mit meiner Lösung auf dem Holzweg, und ich habe es noch nicht einmal bemerkt... Dein Ansatz funktioniert perfekt, ich muss nur noch verstehen, wie Du das gemacht hast. Herzlichen Dank für Deine Hilfe und die Zeit, die Du aufgewandt hast!
Viele Grüße
Heino
-
Hallo Heino, ich habe deinen Code eigentlich nur so ergänzt, dass sich die Aktionen auf den per duplicate() neu erstellten Datensatz beziehen.
Beispiel: Der Ausgangsdatensatz mit der Auftragsbestätigung hat in der Tabelle die Nummer 33. Durch das duplicate() werden dessen Inhalte in einen neuen Datensatz kopiert, der bspw. die Nummer 38 hat. In diesem Moment gibt es also zwei inhaltlich identische Datensätze. Der interne Datensatz-Zeiger von Ninox befindet sich aber nach wie vor auf Nummer 33. Jede Aktion, die man ausführt, wie das "angelegt := today()", bezieht sich also auch auf diesen Datensatz.
Um statt dessen den neuen Datensatz anzusprechen, braucht man dessen Nummer bzw. ID. Dazu lässt man sie beim Duplizieren in eine Variable speichern: "let newLS := duplicate(this)". Wenn man dann sagt "newLS.angelegt := today()", bezieht sich die Aktion auf den neuen Datensatz mit der Nummer 38, nicht auf den aktuellen mit der Nummer 33.
Mit dem "openRecord(newLS)" wird dann nur noch dieser Datensatz zur Ansicht und weiteren Bearbeitung geöffnet. Ist im Grunde also ganz simpel.
Ich hoffe, die Erläuterung war halbwegs verständlich.
Content aside
- vor 4 JahrenZuletzt aktiv
- 4Antworten
- 704Ansichten