Re: Rechnungen importieren

8. Oktober 2009 12:48

kockiren hat geschrieben:Also ich bin auf mein DataItem: SalesHeader gegangen und hab mir den Field Designer geöffnet da stehen in der Spalter SourceExpr: meine Felder aus der Tabelle Sales Header. Ich versteh jetzt nicht ganz wo ich da nun meine Variable anlegen kann. Ich habe unter den Globals eine Variable CSVRecord angelegt, in diese möchte ich nun die Daten aus dem Dataport einlesen, welchen Typ muss ich der CSVRecord unter den C/AL Globals zuweisen? Und kann ich dann einfach in die SourceExpr CSVRecord."No." usw. schreiben?


Wenn in den DataportFields die Felder des SalesHeaders sind, wird Navision pro Datensatz (aus der Datei) je einen Salesheader anlegen.
(Sofern kein Fehler auftritt!)

Wenn du mit den Feldern "arbeiten" möchtest, musst du diese einzel einer Variablen zuweisen. Das Zuweisen (der DataportFields) in eine Variable "CSVRecord" wird nicht klappen / ist nicht möglich!

Wenn ich es an deinen Musterdaten korrekt erkenne, ist der Kopf wie folgt aufgebaut:
Feld1 = Belegart
Feld2 = Rechnungsnummer
Feld3 = Verkauf an Deb.Nr.
Feld4 = Rechnung an Deb.Nr.
Feld5 = Auftragsdatum
Feld6 = Buchungsdatum (möglichereise auch getauscht mit Feld5)

Diese müssten dann entsprechend je einer Variablen zugewiesen werden, wenn diese im Code weiter verwendet werden sollen.
Wenn alle Felder einer Variablen zugewiesen wurden, müsstest du "zu Fuß" den SalesHeader" anlegen. Da der Dataport dieses dann nicht mehr macht!

Alternativ, könntest du auch die Prim.Key Felder in den DataportFields stehen lassen und nur die Felder die du weiter verabeiten willst, gegen Variablen Tauschen (siehe Bild).

BTW: Ich kann dir den "Application Designer Guide" (w1w1adg.pdf) wärmstens ans Herz legen (u.a. das Kapitel Dataports).
(Wir kommen langsam an einen Punkt, wo elementares Basiswissen Vorraussetzung ist! Andernfalls schreibe ich mir hier die Finger wund! )
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Rechnungen importieren

8. Oktober 2009 12:49

Hm also ich habe nochmal drauf rum gedacht und wenn ich das nun richtig zurechtgedacht habe :-) dann bedetuet das ja das jedes Feld im Field Designer einer Spalte in meinem CSV entspricht. Nun habe ich mir unter C/AL Globals Variablen angelegt: SalesHeaderNo, SalesHeaderCustNo usw. vom Typ Text. Nun müsste das ja bedeuten das ich die Felder in die Variablen geschrieben habe ohne sie in die Tabelle zu feuern.

Jetzt habe ich die Tabellenfelder in dem Trigger OnAfterImportRecord mit den Vars gefüllt aber mein Rechnungskopf bleibt leer *grrrml* Hat noch jemand einen Tipp für mich wie ich mich da ran tasten kann. Beim Import irgendwie nen vardump oder so was um einfach zu sehen was da passiert.

Gruß
René

Re: Rechnungen importieren

8. Oktober 2009 13:56

Hallo,

also ich habe den ADG schon die ganze Zeit mit offen und nutze ihn als Leitfaden, aber das mit den Variablen in den Dataports hab ich da noch nicht gefunden, ist auch immer schwer was zu suchen wenn man gar nicht weiß in welche Richtung man suchen soll. Also ich habe das nun langsam verstanden und habe in dem Fielddesigner die entsprechenden Felder angelegt und im C/AL Code verwendet.

Nur wird nun gar nix mehr importiert. Normalerweiße würde ich nun so vorgehen das ich mir schrittweise nen Vardump von den Variablen erzeuge um zu sehen wo der Fehler liegt aber ich habe so eine Funktion bisher nicht finden können. Ich habe nun mal meinen Dataport abgeknipst und schick ihn mal mit diesem Post mit.
Bild 5.jpg

Ich lese die Spalten des CSV also in die Variablen ein und fülle die Felder mit den Werten der Variablen. So habe ich das verstanden aber es tut sich nix, kein Fehler keine Daten nix. Die Rechnungsnummer existiert auch nicht, das habe ich vor dem Import gecheckt. Hm ich hab keinen Plan wie ich mit der Fehleranalyse fortfahren kann.

Hat jemand noch nen Tipp für mich?

VG
René
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Rechnungen importieren

8. Oktober 2009 14:02

kockiren hat geschrieben:... dann bedetuet das ja das jedes Feld im Field Designer einer Spalte in meinem CSV entspricht. ...

Genau das.

kockiren hat geschrieben:.... Nun habe ich mir unter C/AL Globals Variablen angelegt: SalesHeaderNo, SalesHeaderCustNo usw. vom Typ Text. Nun müsste das ja bedeuten das ich die Felder in die Variablen geschrieben habe ohne sie in die Tabelle zu feuern. ...


Ja, die Variablen werden gefüllt und nicht weiter genutzt.

kockiren hat geschrieben:Jetzt habe ich die Tabellenfelder in dem Trigger OnAfterImportRecord mit den Vars gefüllt aber mein Rechnungskopf bleibt leer *grrrml* Hat noch jemand einen Tipp für mich wie ich mich da ran tasten kann. Beim Import irgendwie nen vardump oder so was um einfach zu sehen was da passiert.


??? Wie hast du die Tabellenfelder mit den Variablen gefüllt?
(INIT, zuweisen der Variablen und INSERT gemacht?)

**Edit by Mikka**
Ich habe dein zweites Posting nicht gesehen. Das sieht schon nicht schlecht aus, ein INIT fehlt und das INSERT (Sonst wird kein DS einegfügt!).
Alls erstes musst du nach dem INIT die Prim.Key Felder zuweisen!!!

Re: Rechnungen importieren

8. Oktober 2009 15:13

Hallo Mikka,

ich bin ja echt froh das du mir hilfst. Also ich habe jetzt nochmal den Post gelesen und konnte nun auch was mit den am Anfang gemachten Replys was anfangen :-) Ich glaub das sieht langsam gut aus und ich bin dabei die Funktionsweise zu begreifen, es ist nur schwer ohne einen Debugger fehler zu finden :-(

Hier ist mein derzeitiger Code:
Code:

IF CustNoSell <>'' THEN BEGIN
  SalesHeader.INIT;
  SalesHeader.VALIDATE("No.",InvoiceNo);
  SalesHeader.VALIDATE("Order Date", TODAY);
  SalesHeader.VALIDATE("Posting Date", TODAY);
  SalesHeader."Document Type" := SalesHeader."Document Type"::Invoice;

  SalesHeader.VALIDATE("Sell-to Customer No.",CustNoSell);
  SalesHeader.VALIDATE("Bill-to Customer No.",CustNoBill);
  SalesHeader.INSERT;
END;


So jetzt bekomm ich ne ganz merkwürdige Meldung die mir aber zeigt das ich meinen Ziel schon sehr nah bin :-) Wenn ich den Dataport nun aber auf eine CSV
mit einem neuen Rechnungskopf los lasse dann bekomm ich die Meldung:
Bild 7.jpg


Hm ja eben weil die Rechnung nicht existiert soll er sie ja anlegen. Im ADG steht auch nur drin das ich mit
Code:
Record.INIT;
...
Record.INSERT;

nen neuen Reord in der entsprechnenden Tabelle erzeuge. Ich würde natürlich auch gern die Rechnungsnummer automatisch generieren (Was ja mit record.insert(true) gehen sollte aber das geht erst recht nicht.

VG und vielen Dank

René
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Rechnungen importieren

8. Oktober 2009 15:45

Ein Dubugger hat Navision -->Extras-->Debugger-->Active = Ja

Ich habe kurz nachgeschaut. Ich vermute das keine Nr. vergeben wird liegt daran, das dem Dataport kein x.Rec zur verfügung steht (somit auch keine "No. Series", auf die er zugreifen kann!)

Du müsstest manuell die Nummernserie "holen" und einfügen (aber nicht in diesem Threat, das sprengt den Rahmen)
-->Wolltest du nicht bereits gebuchte importieren, dann nehm doch die Nr. (oder geht das nicht!)?

Wenn ich den Code wie folgt umstelle klappt es (mit der Nr. aus der Datei):
(Die Belegart gehört zum Prim.Key und muß entsprechend früh gesetzt werden!)
Code:
IF CustnoSell <>'' THEN BEGIN
  SalesHeader.INIT;
  SalesHeader."Document Type" := SalesHeader."Document Type"::Invoice;
  SalesHeader.VALIDATE("No.",InvoiceNo);
  SalesHeader.VALIDATE("Order Date", TODAY);
  SalesHeader.VALIDATE("Posting Date", TODAY);
  SalesHeader.VALIDATE("Sell-to Customer No.",CustnoSell);
  IF CustnoSell <> CustNoBill THEN
    SalesHeader.VALIDATE("Bill-to Customer No.",CustNoBill);
  SalesHeader.INSERT;      // ggf. den Fehler abfangen, falls die Rechnung bereits exisitert!

END;

Re: Rechnungen importieren

19. Oktober 2009 11:20

Ganz großen Dank an alle für eure Tipps, es hat nun alles geklappt. Das war nen guter Einstieg. Hab mir jetzt ne Tabelle erstellt die dem kompletten Datensatz importiert und dann zieh ich mir über den Trigger die Daten in der korrekten Form in die jeweilige Tabellen, das ist echt total genial wenn man es einmal verstanden hat :-)

Gruß
René