[gelöst]Nummernserie & Debitoranlegen bei Auftragsimport

19. April 2012 10:45

Hallo,

ich erstelle gerade einen Dataport, mit dem ich Daten aus einer csv-Datei in die Tabelle Sales Header einlesen möchte.

Dies funktioniert auch fast. Jetzt ist meine Frage wie kann ich die Auftragsnummer aus der Nummernserie beziehen? Gibt es dort Möglichkeiten?!
Zuletzt geändert von simon123 am 24. April 2012 14:10, insgesamt 4-mal geändert.

Re: Nummernsiere bei Auftragsimport

19. April 2012 10:53

Falls ich die Frage richtig verstehe: mit einem insert(true).

Re: Nummernsiere bei Auftragsimport

19. April 2012 10:56

Man könnte beispielsweise die Auftragsdaten per Dataport in eine Tabelle einlesen.
Danach einen Report starten (später evtl. automatisiert), welcher dann diese Aufträge nach der eingerichteten Nummernserie anlegt und dann die Felder aus der eingelesen Tabelle in den Auftrag überführt.

grobes Codebeispiel:
Code:
SalesHeader.INIT;
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
//nun Felder befüllen aus der eingelesenen Tabelle
SalesHeader.INSERT(TRUE);


mfg,
winfy

Re: Nummernsiere bei Auftragsimport

19. April 2012 10:59

Also es gibt eine Nummernserie für Aufträge, wenn ich iin der Form F3 drücke wird ja ein neuer Auftrag erstellt und entsprechend die nächste Nummer aus dem Nummernkreis genommen. Nun sollen ja die Aufträge per csv import eingelsen und angelegt werden. Jetzt weiß ich nicht wie ich das in dem Dataport entsprechen als Code hinterlegen kann...


Die Daten werden ja in die Tabelle gelesen. Das mit dem Insert funktionier. Es geht mir jetzt nur darum dass ich auch eine Auftragsnummer aus der Nummernserie nehme, bislang sind dort willkürliche Testnummern als AUftragsnummer.

Re: Nummernserie bei Auftragsimport

19. April 2012 11:24

Klassischer Code für eine Tabelle mit Code-Feld als Primärschlüssel und hinterlegter Nummernserie:
Code:
Rec.INIT;
Rec."No." = ''; // oder Rec.Code = ''; etc.
Rec.INSERT(TRUE);

...

Rec.MODIFY(TRUE);

Die ersten drei Zeilen entsprechen dabei quasi dem F3 und Enter eines Anwenders. Das explizite Leeren des Primärschlüsselfeldes ist notwendig, da bei einem INIT alle Felder bis auf diese initialisiert werden. Im OnInsert-Trigger steht dann üblicherweise: wenn "No." = '', dann hole neue Nummer aus der Nummernserie.

Re: Nummernsiere bei Auftragsimport

20. April 2012 07:48

Danke, Es hat funktioniert.... JEtzt aber noch eine andere Frage...

Der Auftragsimport ist nur für einen Debitor gedacht...

Da die Deb.-Nr. nicht mit in der csv-Datei steht, habe ich diese im Code fest mit angegeben.

Jedoch werden keine Felder gefüllt (siehe Bild1)....Es müsste theoretisch auf der Maske fast alles gefüllt werden....

Wenn ich jetzt in die Form gehe und F2 im Feld der Debitorennummer mache und ENTER drücke, um das zuaktualisieren kommt folgende Meldung (Bild2)...


Der Code ist relativ simple und sieht wie folgt aus(Bild 3)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Nummernsiere bei Auftragsimport

20. April 2012 07:52

Hallo,

ein wichtiges Thema ist VALIDATE zu verwenden statt ':='. Das sorgt dafür, das die meisten deiner Felder automatisch gefüllt werden.

Gruß, Fiddi

Re: Nummernsiere bei Auftragsimport

20. April 2012 08:32

fiddi hat geschrieben:Hallo,

ein wichtiges Thema ist VALIDATE zu verwenden statt ':='. Das sorgt dafür, das die meisten deiner Felder automatisch gefüllt werden.

Gruß, Fiddi


Das wäre dann die richtige Variante
Code:
"Sales Header"."Document Type" := "Sales Header"."Document Type"::Order;
"Sales Header"."No." := '';
"Sales Header".INSERT(TRUE);
"Sales Header".VALIDATE("Sell-to Customer No.", 2946000000);
"Sales Header".MODIFY;

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 08:40

Ah doch es geht....


Vielen dank.....

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 08:53

JEtzt kommt noch jedesmal das abfrage Fenster, dass bereits ein offener Auftrag vorhanden ist. Das muss ich jetzt jedes mal wenn ich den Dataport ausführe bestätigen. Kann ich dies auch automatisch bestätigen?


Ah habe ich bereits selbst gelöst....
Code:
"Sales Header".SetHideValidationDialog(TRUE);

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 08:57

Kann ich dies auch automatisch bestätigen


Nein! Nur per Programm, indem man im "Sales Header" per Funktion eine Variable setzen, die beim Dataport- Aufruf verhindert, das die Prüfung durchgeführt wird. (die Prüfung auf vorh. Aufträge ist kein NAV- Standard, daher keine Info, wie das zu programmieren ist)

Gruß, Fiddi

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 08:59

Nein! Nur per Programm, indem man im "Sales Header" per Funktion eine Variable setzen, die beim Dataport- Aufruf verhindert, das die Prüfung durchgeführt wird. (die Prüfung auf vorh. Aufträge ist kein NAV- Standard, daher keine Info, wie das zu programmieren ist)



Ja ich habe bereits aus einem anderen dataport eine entsprechende funktion gefunden.....

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 09:03

Du solltest aber auch noch darauf achten die importierte Datei nicht ausversehen doppelt oder gar mehrfach einzulesen.
Anhand der Auftragsdaten besteht vermutlich keine Chance das zu überprüfen.

Man könnte allerdings die eingelesenen Dateinamen speichern und vorher abprüfen, ob diese schon einmal eingelesen wurden.
Mit der Bedingung, dass sich die Dateinamen sich immer unterscheiden, könnte man diesen abspeichern und vorher abprüfen, ob die Datei schon einmal eingelesen wurde.

mfg,
winfy

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 09:31

Danke für den Tip,

es ist so geplant, das die csv Datei morgens einmal neu angelegt wird. Anschließend eine Stunde später findet einmal ein import in Navision statt. So dass keine Daten doppelt sein können....

Re: [gelöst]Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 10:30

Jetzt habe ich das nächste Problem...

Nach dem der Verkaufskopf soweit angelegt ist, soll nun die Verkaufszeile gefüllt werden...

Hierbei bekomme ich immer folgende Fehlermeldung (Bild 1)

bei folgendem (Code Bild 2)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 10:42

Nun solltest du den Salesheader auch irgendwann mit Modify(true) abspeichern, sonst findet die SalesLine Ihn nicht.

Außerdem auch in der Salesline nicht vergessen, die Felder mit Validate zu füllen, solange du nicht sicher weißt das kein OnValidate- Trigger für dieses Feld hinterlegt ist.

Gruß, Fiddi

Re: Nummernserie & Debitoranlegen bei Auftragsimport

20. April 2012 10:42

Das MODIFY muss nach den Zuweisungen im Sales Header, aber noch vor den ersten Zeilen zur Sales Line stehen. Die Datenbank weiß zum Zeitpunkt der Zeilenanlage quasi noch gar nichts von den ganzen Änderungen im Sales Header.

P.S.: Ich würde dringend empfehlen, bevor du weitermachst: lies dir die Online-Hilfe mindestens zu INIT, INSERT, MODIFY, VALIDATE an und probiere aus, wie sich die Befehle in verschiedenen Szenarien verhalten. So ein Try & Error für einen "Live"-Dataport halte ich für sehr gewagt.

EDIT: fiddi war schneller.
fiddi hat geschrieben:..., solange du nicht sicher weißt das kein OnValidate- Trigger für dieses Feld hinterlegt ist.
Und selbst dann schadet ein VALIDATE nicht. Es sei denn eine Form (wie bei PLZ z.B.) wird beim VALIDATE geöffnet.