Import ins Artikelbuchblatt --> COMMIT benutzen?

22. Mai 2010 18:28

Hi,

ich bin gerade dabei einen Dataport zum Import von Datensätzen ins Artikelbuchblatt zu schreiben und wollte, dass er sich während des Imports automatisch die nächste Belegnummer zieht. Das macht er ja in der Funktion SetupNewLine und ruft darüber die NoSeriesManagement Codeunit auf. Teile dieser Funktion hatte ich so übernommen aber ich bekomme die Fehlermeldung, dass die Tabelle wegen Schreibtransaktionen gesperrt ist. Hatte bisher folgendes gemacht (nur Beispiel):

VALIDATE("Journal Template Name",'ARTIKEL');
VALIDATE("Journal Batch Name",'STANDARD');
"Line No." := Variable mit hochgezählter LineNo;
"Posting Date" := TODAY;
"Document Date" := Variable die von Importdatei gefüllt wird;
IF Menge die von Importdatei gefüllt wird < 0 THEN BEGIN
"Entry Type" := "Entry Type"::"Negative Adjmt.";
Menge die von Importdatei gefüllt wird := Menge die von Importdatei gefüllt wird * (-1);
END ELSE BEGIN
"Entry Type" := "Entry Type"::"Positive Adjmt.";
END;
"Item Journal Line".INSERT(TRUE);

Da wollte ich jetzt irgendwie noch diese Zeilen reinbringen, über welche er sich eigentlich die nächste freie Nummer holen sollte:
ItemJnlTemplate.GET("Journal Template Name");
ItemJnlBatch.GET("Journal Template Name","Journal Batch Name");
IF ItemJnlBatch."No. Series" <> '' THEN BEGIN
CLEAR(NoSeriesMgt);
"Document No." := NoSeriesMgt.TryGetNextNo(ItemJnlBatch."No. Series","Posting Date");
END;

Sollte doch so funktionieren oder? Kann ich den Fehler irgendwie mit COMMIT beheben? Wie würdest ihr als erfahrene Programmierer das lösen.

Vielen Dank im Voraus.
Gruß
ENulien

Re: Import ins Artikelbuchblatt --> COMMIT benutzen?

23. Mai 2010 08:36

Enulien hat geschrieben:snip


Ohne Ihren Code auszuprobieren, sage ich allg. folgendes:

(1) mir hat mein Chef beigebracht, nach Möglichkeit NIE ein Commit zu benützen - denn falls etwas schief geht, gibt es kein Rollback und man hat verkrüppelte, halbgare Daten
(2) falls eine Meldung kommt Tabelle gesperrt wg. Schreibtransaktionen, dann gibt es doch den Befehl LOCKTABLE und man kann doch damit abfragen, ob eine Tabelle schon gelockt ist oder selber festlegen, daß sie gelockt wird?
(3) ich würde gerne den Business Case von Ihnen erfahrne, weshalb Sie das Artikelbuchblatt benützen? Klingt so, als würden Sie Altbestände von einem Altsystem nach NAV übernehmen wollen? Da würde ich generell zum Inventurbuchblatt raten. Obwohl es der Name nahelegt, muß das Inventurbuchblatt nicht allein für Inventuren benützt werden. Es kann auch für eine Bestandsübernahme Altsystem => Neu-NAV-System hergenommen werden.

Hoffe, meine Punkte helfen Ihnen weiter?

edit: hier ist LOCKTABLE beschrieben:

http://msdn.microsoft.com/en-us/library/dd355257.aspx

edit: @McLane: habe es geändert, sorry, ist die Macht der Gewohnheit.
Auf GamePro z.B. wo pro Minute ca. 30 Postings in einem Thread auftrauchen ist es unmöglich die Übersicht ohne Quoting zu behalten, sonst weiß niemand mehr auf welchen Beitrag in einem Thread man geantwortet hat. Daher mein Fauxpas, sorry! ;-)
Zuletzt geändert von Freestyler am 23. Mai 2010 12:39, insgesamt 2-mal geändert.

Re: Import ins Artikelbuchblatt --> COMMIT benutzen?

23. Mai 2010 10:42

Hi,

Danke erst mal für deine Antwort.

Zu (1) Das habe ich eigentlich auch so gelernt.
Zu (2) Die Tabelle ist ja anscheinend schon gelockt. Der LOCKTABLE-Befehl wird mir also hier wohl nicht weiter helfen.
Zu (3) Es geht darum Zu- und Abgänge aus einer Datei zu übernehmen. Es geht nicht um eine Bestandsübernahme sondern einfach um die Erleichterung für die Mitarbeiter. Anstatt die einzelnen Zeilen händig einzugeben werden die Zu- und Abgänge importiert und danach kann man ins Buchblatt gehen und es buchen.

Ähnlich Import müssten doch schon mal gemacht worden sein. Wie habt Ihr das gelöst?

Danke und Gruß
Enulien

Re: Import ins Artikelbuchblatt --> COMMIT benutzen?

23. Mai 2010 11:36

Ich würde zum Füllen eines Buchblattes versuchen, die Eingabe per Hand im Code zu simulieren. Also die Funktion SetupNewLine aufrufen statt sie teilweise zu kopieren (dafür ist sie da), und dann die nötigen Felder in der Reihenfolge der Eingabe validieren. So hat das auch immer funktioniert.

Noch eine Bitte am Rand: könnten eure Lordschaft aufhören, den ganzen Ursprungsbeitrag zu zitieren? Das macht nichts deutlicher, und der steht auch schon direkt oben drüber. :wink:

Besten Dank von jemandem, der sich manchmal per Hand hier durch scrollen muss.

Re: Import ins Artikelbuchblatt --> COMMIT benutzen?

24. Mai 2010 00:13

Hi,

ich hatte auch schon versucht die Funktion komplett aufzurufen, aber die Meldung bekomme ich trotzdem. Wann wird der Table denn genau gelockt? Ich hatte sogar schon versucht mir im PreDataItem Trigger die nächste Nummer zu ziehen und auch da bekomme ich die Schreibtransaktion Fehlermeldung.

Re: Import ins Artikelbuchblatt --> COMMIT benutzen?

24. Mai 2010 00:26

Ich habe das Problem noch nie gehabt. Was sagt denn der Debugger? Wie läuft der Import ab? Liest du die Daten ein, weist sie dann einer Variable zu, die du insertest mit einem anschließenden Skip?