Wiederherstellen Auftragsarchiv

13. April 2010 11:30

Hallo,

ich bin NAV-Entwickler-Neuling (komme eigentlich aus der GP / AX-Schiene) und hoffe auf Verständnis, wenn die eine oder andere Frage von mir ein wenig nach "dummi" klingt, aber ich über noch ;-)...

Vielleicht kann mir ja jemand bei folgendem Problem helfen:
Im Form 5159 (Verkaufsauftragsarchiv) gibt es einen Button "Wiederherstellen", der wohl dazu dient einen Auftrag aus dem Archiv wieder "zurück zu holen".
Das Problem liegt darin, dass grundsätzlich IMMER beim Klick auf diesen Button die Meldung:
"Der Verkaufskopf existiert nicht. Identifizierende Felder und Wert......"

Ich habe das dann mal analysiert:
Der OnPush-Trigger des Buttons "Wiederherstellen" enthält nur die Code-Zeile:
"ArchiveManagement.RestoreSalesDocument(Rec);"

Es wird also die Funktion "RestoreSalesDocument" aus der CU 5063 aufgerufen und dorthin der aktuelle Datensatz übergeben.

Die Funktion "RestoreSalesDocument" der CodeUnit beginnt so:

SalesHeader.GET(SalesHeaderArchive."Document Type",SalesHeaderArchive."No.");
SalesHeader.TESTFIELD(Status, SalesHeader.Status::Open);
IF SalesHeader."Document Type" = SalesHeader."Document Type"::Order THEN BEGIN
SalesShptHeader.RESET;
SalesShptHeader.SETCURRENTKEY("Order No.");
SalesShptHeader.SETRANGE("Order No.", SalesHeader."No.");
.
.
.
.


Durch debuggen fand ich heraus, dass der Fehler bereits in der ersten Zeile entsteht, also wenn versucht wird, das Dokument in der SalesHeader zu finden.

Nun habe ich als erstes einige Verständnisprobleme (kenne die Prozesse in der Applikation noch nicht so gut):
1. Welchen Sinn macht es nach einem Dokument in der SalesHeader zu suchen, das bereits im Archiv ist?
2. Was genau soll beim Wiederherstellen passieren? Wird ein Dokument aus dem Archiv zurückkopiert oder zurückgeschoben?
3. Welche Systematiken werden berücksichtigt, wenn ein Dokument "reanimiert" wird? (Nummernvergabe, Bezüge zu anderen Dokumenten, FiBu etc.)

Weiterhin habe ich durch debuggen herausgefunden, dass die "Rec"-Variable in der Funktion mit leeren Feldern ankommt. Also dachte ich, dass der Datensatz in der SalesHeader deshalb nicht gefunden werden kann.
Ich habe dann den Aufruf der Funktion im OnPush-Trigger wie folgt modifiziert:

frmSalesHeaderArchive.GETRECORD(recSalesHeaderArchive); //Um sicherzustellen, dass der Datensatz, der gerade im Form angezeigt wird, auch bei der Funktion ankommt

ArchiveManagement.RestoreSalesDocument(Rec);

Leider war das erfolglos - der Datensatz in der SalesHeader wird nach wie vor nicht gefunden und es erfolgt keine Wiederherstellung.

Kann mir jemand vielleicht kurz erklären, was bei der Wiederherstellung passiert? / passieren soll / muss und ob es richtig ist, dass die Funktion versucht den Datensatz in der SalesHeader zu finden, denn immerhin ist das der OriginalCode und der hat ja irgendeinen Sinn :-)

Vielen Dank und Grüsse
Yorgo

Re: Wiederherstellen Auftragsarchiv

13. April 2010 11:49

Man kann einen bestehenden Beleg auch schon zwischendurch archivieren. Das kann man auch, so oft man mag - quasi eine Art Schnappschuss. Das erkennt man im archivierten Beleg an dessen Versionsnummer. Nun kann es ja sein, dass man einem Kunden ein Angebot schreibt, dieses noch ein paarmal ändert, aber sich der Kunde zum Ende doch für die erste Version des Angebots entscheidet. Hat man dieses archiviert, kann man es so einfach wieder herstellen - aber eben nur, falls der Angebotskopf noch existiert. Insofern ist der Button etwas irreführend bezeichnet.

Für Aufträge geht das genauso, insofern der Auftrag noch nicht bebucht worden ist.

Um einen archivierten Beleg noch einmal zu verwenden, ohne dass das Original noch existiert, legt man einen neuen leeren Beleg an, geht dann über Funktion->Beleg kopieren und sucht aus den archivierten den richtigen heraus.
Zuletzt geändert von McClane am 13. April 2010 22:44, insgesamt 1-mal geändert.

Re: Wiederherstellen Auftragsarchiv

13. April 2010 12:00

Ahja, danke für die schnelle Antwort!

Klingt logisch :-)
Daraus schliesse ich, dass es Standard und korrekt ist, dass die (Fehler)Meldung erscheint, richtig?

Die Anforderung für mich lautet, dass bei der Betätigung des Buttons der Verkaufskopf des Dokumentes automatisch wieder hergestellt wird.
Ist das irgendwie auf möglichst einfachem Wege hinzubekommen?

Re: Wiederherstellen Auftragsarchiv

13. April 2010 12:09

Yorgo hat geschrieben:Daraus schliesse ich, dass es Standard und korrekt ist, dass die (Fehler)Meldung erscheint, richtig?

Richtiiiiig (an Calli aus der Werbung denken muss :roll: )

Die Anforderung für mich lautet, dass bei der Betätigung des Buttons der Verkaufskopf des Dokumentes automatisch wieder hergestellt wird.
Ist das irgendwie auf möglichst einfachem Wege hinzubekommen?

McClane hat es dir quasi vor die Füße gelegt:
Wenn Angebot/Auftrag noch vorhanden, nichts tun, da der Standard alles für dich erledigt.
Wenn nicht mehr vorhanden, aus der Wiederherstellenfunktion aussteigen,einen neuen Belegkopf mit gleicher Nr. erstellen und intern die Funktion Beleg kopieren mit passender Vorlage auswählen.
Das wird allerdings nicht einfach, denke ich, erst recht für einen C/AL-Neuling!
Belegnr. vorbelegen geht übrigens nur, wenn die Nummernserie den Haken in Feld "Manuelle Nr." hat.

Anderes Problem: Ich bin der Meinung, der Beleg darf nur dann unter der alten Nr. neu erzeugt werden, wenn dieser zuvor nicht durch/nach Buchungen gelöscht worden ist. Ansonsten (und das ist generell die einfachste Lösung) mit einer neuen Nummer anlegen; so kann es keine Konflikte geben.

Re: Wiederherstellen Auftragsarchiv

13. April 2010 12:13

Sollst du den Beleg ganz genau so wieder herstellen, wie er war, oder einen neuen anlegen, in dem das Selbe drin steht?
Ersteres - also den Beleg mit seiner ursprünglichen Nummer wieder herzustellen - ist zwar möglich, aber wenig empfehlenswert.

Ui, Natalie hat schon vorgelegt, dann kann ich ja ruhig bleiben :-)

Re: Wiederherstellen Auftragsarchiv

13. April 2010 12:49

Jo, es geht wohl darum, dass der Kunde den Wiederherstellen-Button dafür verwenden möchte, dass der BelegKOPF (die Zeilen sollen nicht berücksichtigt werden) des angezeigten Archiv-Beleges als neuer Beleg angelegt wird. Ich halte es auch für kritisch die gleiche Belegnummer noch einmal zu verwenden - allein schon aus buchhalterischer und gesetzlicher Sicht.

Gibts vielleicht für soetwas fertige Routinen / CUs, wo man (ganz banal ausgedrückt) die alte und die neue Nummer - vielleicht noch mit Dokumenttyp - hinein kippt und der Rest wird von NAV erledigt?

Re: Wiederherstellen Auftragsarchiv

13. April 2010 12:59

Yorgo hat geschrieben:Gibts vielleicht für soetwas fertige Routinen / CUs, wo man (ganz banal ausgedrückt) die alte und die neue Nummer - vielleicht noch mit Dokumenttyp - hinein kippt und der Rest wird von NAV erledigt?

Schau dir den Weg an, der beim Beleg kopieren genommen wird. Um ein paar kleine Erweiterungen wirst du aber nicht herum kommen.

Re: Wiederherstellen Auftragsarchiv

13. April 2010 12:59

Yorgo hat geschrieben:Gibts vielleicht für soetwas fertige Routinen / CUs, wo man (ganz banal ausgedrückt) die alte und die neue Nummer - vielleicht noch mit Dokumenttyp - hinein kippt und der Rest wird von NAV erledigt?

Wie gesagt, halte dich an die Standard-Kopierfunktionalität. Diese findest du übrigens in der Codeunit 6620 "Copy Document Mgt."

Re: Wiederherstellen Auftragsarchiv

13. April 2010 13:34

Super! Danke für eure Mühen!