Im ersten Schritt wird die Rechnung, die ersetzt werden soll, im
DB Grid ausgewählt. Dann wird ein Button geklickt. Dort wird sich die ausgewählte Rechnungsnummer gemerkt. Anschließend wird die neue Rechnung angelegt und die gemerkte Rechnungsnummer in deren Feld ERSETZTRGNR geschrieben.
.. wird die neue Rechnung angelegt..
ist das ein spezieller Vorgang (meinetwegen Button "ersatzrechnung") oder identisch mit Standardrechnungen? Geschieht das gleich mit Kundenzuordnung?
.. und die gemerkte Nummer in deren Feld ERSETZ..
Ist das Bestandteil des Vorgangs neue Rechnung oder eine separate Opteration / Button oder Handarbeit?
So wie es beschrieben ist, finde ich vor allem die "Merken"Stelle kritisch.
Irgendwann drückt der MA "merken" und irgendwann später wird das gemerkte wieder ausgespukt. Ist das für den MA transparent (also wird die Merkung visualisiert)? Ist das wasserdicht? Kann auch eine Nummer 2x "ausgespukt" werden bzw. solange, bis der Mitarbeiter mal wieder daran denkt, die richtige Nummer merken zu lassen?
Das passiert alles unterbrechungsfrei in einem Vorgang. (Es gibt ja das selbe Problem mit den Notizen und da wird sich nichts "gemerkt"). Statt gemerkt hätte ich schreiben sollen: Wird in einer Variable zwischengespeichert. Hier nochmal der Code auszug von weiter oben mit der Ergängung wo die ERSETZTRGNR her kommt:
Delphi-Quellcode:
procedure AktuelleRechnungErsetzen;
var
ErsetztRgNr: String;
begin
ErsetztRgNr := Rechnungen.FieldByName('RgNr').asString; //<-- hier steht das DBGrid auf der Rechung, die ersetzt werden soll
//hier wird eine neue Rechnung eingefügt und auch schon im Grid angezeigt und selektiert.
if InsertAtBegin then
begin
Rechnungen.First;
Rechnungen.Insert;
end
else
Rechnungen.Append;
Rechnungen.FieldByName('RgNr').asString := GetNewRgNr;
Rechnungen.FieldByName('KdNr').asString := Kunden.FieldByName('KdNr').asString;
Rechnungen.FieldByName('Datum').asDateTime := Date;
Rechnungen.FieldByName('RgNr').asString := ErsetztRgNr //<-- hier die RgNr, von der Rg, die ersetzt werden soll, in die neue Rg einfügen
...usw für alle Felder
Die Rechnung die ersetzt werden sollte, war die ganze Zeit im Grid sichtbar. Und ist momentan auch da. Wie gesagt: Wenn sie irgendwie gelöscht worden wäre und dann irgendwie wieder neu ins System gelangt sein sollte, hätte sie jetzt eine andere RgNr und ich würde sie nicht mehr sehen (durch den Generator). Order irre ich mich da? Und
select * from Rechnungen where RgNr = 5
hat sie mir auch zum Zeitpunkt des Fehler auf dem betroffenen Client angezeigt.