[gelöst ]Ausgabeproblem bei DataPort

21. September 2009 11:15

Mit folgenden Code möchte ich u.a. die Kreditorennr., Kred.-Artikelnr. sowie den Kreditornnamen asugeben:
Code:
CLEAR(ItemVend);
CLEAR(ItemUnit);
CLEAR(ItemVendor);
CLEAR(ItemUnit2);

IF "Vendor No." <> '' THEN
  IF ItemVend.GET("Vendor No.","No.",'') THEN;
IF "Base Unit of Measure" <> '' THEN
  IF ItemUnit.GET("Base Unit of Measure") THEN;
IF "No." <> '' THEN
  IF ItemVendor.GET("No.") THEN;
IF    "No." <> '' THEN
  IF ItemUnit2.GET("No.","Base Unit of Measure") THEN;


Das sind die DataPort Fields:
Enabled SourceExpr StartPos Width Format
Yes ItemVend."Vendor No." 0 0
Yes ItemVend."Vendor Item No." 0 0
Yes ItemVendor.Name 0 0

Und das die gl.Variablen:
Name DataType Subtype Length
ItemVend Record Item Vendor
ItemVendor Record Vendor

Nun sollten mir ja die Kreditorennr., Kred.-Artikelnr. sowie den Kreditornnamen asugeben werden. Jedoch tauchen nur bei 2 Artikeln eine Kreditorennr. und Kred.-Artikelnr. ohne Kreditorennamen auf. Viele andere Artikel enthalten diese Informationen aber sie wedren nicht ausgegeben und ich vestehenicht warum.

Ein weiteres Problem ist, dass bei der Ausgabe der Daten in eine txt Datei Buchstaben wie ä,ö oder ü in seltsame Zeichen umgewandelt wedren. Kann man das beheben?
Zuletzt geändert von misterelektro1981 am 22. September 2009 14:20, insgesamt 1-mal geändert.

Re: Ausgabeproblem bei DataPort

21. September 2009 11:23

ohne jetzt das Ganze näher durchdacht zu haben; allein die IF Konstruktion macht keinen Sinn, oder? Sollte das nicht eher so aussehen:


Code:
IF "Vendor No." <> '' THEN
  ItemVend.GET("Vendor No.","No.",'');
IF "Base Unit of Measure" <> '' THEN
  ItemUnit.GET("Base Unit of Measure");
IF "No." <> '' THEN
  ItemVendor.GET("No.");
IF    "No." <> '' THEN
  ItemUnit2.GET("No.","Base Unit of Measure");

Re: Ausgabeproblem bei DataPort

21. September 2009 11:29

Nein das mit dem THEN und mit dem löschen der Variablen ist schon richtig...

Aber hast du keinen Tip zu meinem Problem?

Re: Ausgabeproblem bei DataPort

21. September 2009 12:07

Naja schau mal deine Variablen an, beides die gleiche Tabelle, bei der einen ist der GET auf alle drei Felder (ist ja auch korrekt) bei der anderen nur auf den Kreditoren (da fehlen zwei Felder).
Warum überhaupt zwei Rec´s auf die gleiche Tabelle, die den gleichen DS anzeigen sollen?
Wofür das GET bei ItemUnit2, es wird nicht weiter verwendet!

Dieses "doppeltgemoppelte" IF .. THEN würde ich weglassen, da das GET doch schon abgefangen wird!
(Das würde ich höchstens bei Zugriffen auf Postentabellen mit vielen Datensaätzen machen um unnötige Lesezugriffe zu vermeiden)

Zeichen verkehrt, such bitte im Forum nach ASCII Ansi, es gibt reichlich Beiträge zum Thema (ist leider eine "Macke" von Navision).

Re: Ausgabeproblem bei DataPort

21. September 2009 12:30

Sorry mein Beitrag war etwas unvollständig. Ich beschreibe es mal vollständig.

Ich habe die Variablen ItemVendor und ItemUnit2 leider etwas blöd bezeichnet.

Das ist mein Code:
Code:
CLEAR(ItemVend);
CLEAR(ItemUnit);
CLEAR(ItemVendor);
CLEAR(ItemUnit2);

IF "Vendor No." <> '' THEN
  IF ItemVend.GET("Vendor No.","No.",'') THEN;     => für Vendor No. und Vendor Item No.

IF "Base Unit of Measure" <> '' THEN
  IF ItemUnit.GET("Base Unit of Measure") THEN;  => für die Beschreibung der Einheit

IF "No." <> '' THEN
  IF ItemVendor.GET("No.") THEN;                        => für den Namen des Lieferanten

IF "No." <> '' THEN                                             
  IF ItemUnit2.GET("No.","Base Unit of Measure") THEN;  => für Menge pro Einheit


Das die gl.Var.:
Name DataType Subtype Length
ItemVend Record Item Vendor
ItemUnit Record Unit of Measure
ItemVendorRecord Vendor
ItemUnit2 Record Item Unit of Measure

Und das die DataPort Fields:
Enabled SourceExpr
Yes ItemVend."Vendor No."
Yes ItemVend."Vendor Item No."
Yes ItemVendor.Name
Yes ItemUnit.Description
Yes ItemUnit2."Qty. per Unit of Measure"

Was habe ich denn hier falsch gemacht bzw. was müsste ich ändern?

Re: Ausgabeproblem bei DataPort

21. September 2009 12:49

Hallo Markus,

bevor wir hier jetzt weitermachen, solltest du dich mal ein bisschen mit Datenbanktheorie auseinandersetzen. Das erleichtert das Arbeiten mit NAV um einiges.

Ein gutes Beispiel findest du bei Wikipedia zum Thema Schlüssel

Gruß, Fiddi

Re: Ausgabeproblem bei DataPort

21. September 2009 13:03

Danke fiddi für den Tip. Wie das in der Theorie aussehen sollte wird gut durch Wikipedia beschrieben, damit komme ich aber auch nicht weiter, sorry.

Die Theorie ist doch wie folgt mal als Beispiel:

Ich möchte den Namen des Lieferanten ausgeben.
Dazu gehe ich wie folgt vor:

- gl.Variable anlegen z.B. Vendor
- Code für den GET Befehl der Tabelle (No. ist der esrte Eintrag der Tabelle, also der Primärschlüssel,mehr Schlüssel brauche ich doch nicht, oder?
IF "No." <> '' THEN
IF ItemVendor.GET("No.") THEN;
- als letztes´das Feld in die DataPorts hinzufügen: Vendor.Name

Das ist mein Verständnis. Ist das so richtig?

Re: Ausgabeproblem bei DataPort

21. September 2009 13:06

Wieso machst du dann ein ItemVendor.GET, wenn du doch den Vendor füllen und ausgeben möchtest?

Re: Ausgabeproblem bei DataPort

21. September 2009 13:11

Ich sage ja, ich habe die Variable blöd benannt. Jetzt habe ich sie umgeschrieben als Vendor. das ändert aber doch nichts an der Funktion. Jetzt heißt es Vendor.GET.

Re: Ausgabeproblem bei DataPort

21. September 2009 13:14

Hallo Markus,

bitte setzte Code immer in Codetags, das erleichtert das lesen ungemein, es werden dir alle Forenmitglieder danken.
Steht auch im Community-Knigge , unter Punkt 11.

MisterElektro1981 hat geschrieben:Sorry mein Beitrag war etwas unvollständig. Ich beschreibe es mal vollständig.

Unvollständig, in der Tat. Es macht das lesen / verstehen recht schwer. Wenn du den Variablen selbstredene Namen gibst, machst du es dir selbst wesentlich leichter.

Schau dir mal diese Stelle an:
Code:
IF "No." <> '' THEN
  IF ItemVendor.GET("No.") THEN;                        => für den Namen des Lieferanten


Wenn die Artikelnummer nicht leer ist, dann mache eine GET auf Kreditor mit der Artikelnummer, das geht nicht!

Re: Ausgabeproblem bei DataPort

21. September 2009 13:15

misterelektro1981 hat geschrieben:Ich sage ja, ich habe die Variable blöd benannt. Jetzt habe ich sie umgeschrieben als Vendor. das ändert aber doch nichts an der Funktion. Jetzt heißt es Vendor.GET.

Dir wurde bereits letzte Woche in einem anderen Thema gesagt, dass du die Variablen umbenennen solltest (möglichst nah am Tabellennamen). Wenn du unsere Ratschläge nicht befolgst, dann darfst du dich nicht wundern, wenn wir dich noch immer nicht verstehen.

Bitte schreibe deinen Quelltext noch einmal (in code-Tags), mit richtiger Bennenung. Schreibe bitte direkt zu jeder Zeile, wofür du diesen Code ausführst und wo genau jetzt ein Fehler vorliegt.

Re: Ausgabeproblem bei DataPort

21. September 2009 13:36

Code:
//Vorab die Variablen löschen
CLEAR(ItemVend);
CLEAR(ItemUnit);
CLEAR(Vendor);
CLEAR(ItemUnit2);

//hiermit möchte ich die Kreditorennr. sowie die Kred.-Artikelnr. holen
IF "Vendor No." <> '' THEN
  IF ItemVend.GET("Vendor No.","No.",'') THEN;

//hiermit möchte ich die Beschreibung der Einheit holen
IF "Base Unit of Measure" <> '' THEN
  IF ItemUnit.GET("Base Unit of Measure") THEN;

//hiermit möchte ich den Namen des Lieferanten holen
IF "No." <> '' THEN
  IF Vendor.GET("No.") THEN;

//hiermit möchte ich die Menge pro Einheit holen
IF "No." <> '' THEN
  IF ItemUnit2.GET("No.","Base Unit of Measure") THEN;


Code:
Name   DataType   Subtype   Length
ItemVend   Record   Item Vendor   
ItemUnit   Record   Unit of Measure   
Vendor   Record   Vendor   
ItemUnit2   Record   Item Unit of Measure   
GM   Codeunit   GeneralMgt   


Code:
Enabled   SourceExpr   StartPos   Width   Format
Yes   GM.Ascii2Ansi(ItemVend."Vendor No.")   0   0   
Yes   GM.Ascii2Ansi(ItemVend."Vendor Item No.")   0   0   
Yes   GM.Ascii2Ansi(Vendor.Name)   0   0   
Yes   GM.Ascii2Ansi(ItemUnit.Description)   0   0   
Yes   ItemUnit2."Qty. per Unit of Measure"   0   0   

Ich hoffe das reicht an Infos.

Re: Ausgabeproblem bei DataPort

21. September 2009 14:02

Schade, dass du die Umbenennung der Recordvariablen noch immer ignorierst. So oder ähnlich hätten wir es im Falle der Records erwartet:
Code:
ItemVend -> Item Vendor
UoM -> Unit of Measure   
Vendor -> Vendor   
ItemUoM -> Item Unit of Measure


Ich verstehe dich so, dass der Dataport über die Artikeltabelle geht - ist das richtig? Oder woraus ziehst du die Felder wie "No.", "Vendor No." etc.?

Siehe nun bitte die Kommentare:

misterelektro1981 hat geschrieben:
Code:
//hiermit möchte ich die Kreditorennr. sowie die Kred.-Artikelnr. holen -> OK
//hiermit möchte ich die Beschreibung der Einheit holen -> OK

//hiermit möchte ich den Namen des Lieferanten holen -> NICHT OK
// "No." ist die Artikelnr. Die Kreditorennr. steht in Vendor No., so wie du es schon in der 1. Zeile richtig gemacht.
// Richtig:
IF "Vendor No." <> '' THEN
  IF Vendor.GET("Vendor No.") THEN;

//hiermit möchte ich die Menge pro Einheit holen -> FRAGWÜRDIG
IF "No." <> '' THEN
  IF ItemUnit2.GET("No.","Base Unit of Measure") THEN;
// Du holst dir hier den Basiseinheitencode - dessen Menge pro Einheit ist per definitionem immer 1, von daher könntest du diesen Aufruf sparen - oder geht es dir um einen anderen Einheitencode? Es gibt z.B. noch den Verkaufs- und Einkaufseinheitencode auf der Artikelkarte (wenn es die Artikelkarte ist).?

Re: Ausgabeproblem bei DataPort

21. September 2009 14:18

Es hört sich vielleicht blöd an, aber ich hatte die eine Variable ItemUnit2 übersehen.

zu Menge pro Einheit: stimmt, hier steht immer eine 1, dieses Problem ist gelöst

Jetzt das kuriose:
beim ersten Artikel gehen jetzt alles gewünschten Infos raus. Bei allen anderen, bei denen die Felder wir Kreditornr.,Kred.-Artikelnr. und Name (des Kreditors) auch gefüllt sind gehen keine Infos raus.

Das versteh ich garnicht, die Felder sind wie beim ersten Artikel gefüllt aber werden nich ausgegeben.
Ich kann mir vorstellen, da der erste Artikel ein Katalogartikel ist
und auch auf der Form Katalogartikel angelegt wurde, nur bei diesem die Infos rausgehen. Wie bekomme ich es denn hin, dass trotzdem, die Felder sind ja schließlich gefüllt, die Infos für die Artikelkategorie EB raus geht.

P.S.: Natalie: Richtig es bezieht sich auf die Artikeltabelle. No. und Vendor No. ziehen ich mir aus der Item Vendor.

Re: Ausgabeproblem bei DataPort

21. September 2009 14:25

misterelektro1981 hat geschrieben:Jetzt das kuriose:
beim ersten Artikel gehen jetzt alles gewünschten Infos raus. Bei allen anderen, bei denen die Felder wir Kreditornr.,Kred.-Artikelnr. und Name (des Kreditors) auch gefüllt sind gehen keine Infos raus.

Langsam - wir gehen doch über die Tabelle und damit DataItem Artikel, richtig? Du hast also einen zweiten Artikel, bei dem die Kreditorennr. gefüllt ist, diese aber nicht mehr im Dataport ausgedruckt wird. Der Artikel als solche wird aber als neue Zeile angedruckt?
Verwende für das entsprechende Dataport Field statt
Code:
Yes   GM.Ascii2Ansi(ItemVend."Vendor No.")   0   0

lieber ein
Code:
Yes   GM.Ascii2Ansi("Vendor No.")   0   0 
, sodass auf jeden Fall das Feld von der Artikelkarte angedruckt wird, auch wenn der dazu gehörige Kreditor nicht gefunden wird.

Ich kann mir vorstellen, da der erste Artikel ein Katalogartikel ist

Katalogartikel ist nicht Tabelle Artikel.

Re: Ausgabeproblem bei DataPort

21. September 2009 14:37

aaalso, habe das Ganze jetzt hier nachgebaut und getestet. Folgender Code im OnBeforeExportRecord Trigger (vom DataItem ITEM) reicht völlig:

Code:
IF "Vendor No." <> '' THEN BEGIN
  ItemVend.GET("Vendor No.","No.");
  ItemVendor.GET("Vendor No.");
END;

IF "Base Unit of Measure" <> '' THEN BEGIN
  ItemUnit.GET("Base Unit of Measure");
  ItemUnit2.GET("No.","Base Unit of Measure");
END;


Dataport Fields:
Code:
Enabled   SourceExpr   StartPos   Width
Yes   ItemVend."Vendor No."   0   0
Yes   ItemVend."Vendor Item No."   0   0
Yes   ItemVendor.Name   0   0
Yes   ItemUnit.Description   0   0
Yes   ItemUnit2."Qty. per Unit of Measure"   0   0


Globals:
Code:
Name   DataType   Subtype   Length
ItemVend   Record   Item Vendor   
ItemVendor   Record   Vendor   
ItemUnit   Record   Unit of Measure   
ItemUnit2   Record   Item Unit of Measure   

Re: Ausgabeproblem bei DataPort

21. September 2009 14:47

@Ara
Du meintest ganz unten bestimmt
Code:
IF "Vendor No." <> '' THEN BEGIN
  ItemVend.GET("Vendor No.","No.");
  Vendor.GET("Vendor No.");
END;


Warum wollt ihr jetzt schon beide den Record Vendor als ItemVendor bezeichnen? :?:
Blick da einer durch ...

Re: Ausgabeproblem bei DataPort

21. September 2009 14:57

ja genau. Sry, bin eben noch vom "Ausgangszustand" ausgegangen ;)

Re: Ausgabeproblem bei DataPort

21. September 2009 15:00

Ich habe es mal geändert, jedoch das gleiche wie vorher. Nur beim ersten Artikel werden diese Infos rausgegeben. Bei den weotern Artikeln gehen diese Infos einfach nicht heraus.

Die obere Grafik ist der erste Artikel. Hier wird die Kreditornr., Kred.-Artikelnr. sowie Name des Kreditos ausgegeben.
In der unteren Grafik sind alle Felder gefüllt, jedoch kommen hier keine Infos raus.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Ausgabeproblem bei DataPort

21. September 2009 16:31

misterelektro1981 hat geschrieben:Ich habe es mal geändert, jedoch das gleiche wie vorher. Nur beim ersten Artikel werden diese Infos rausgegeben. Bei den weotern Artikeln gehen diese Infos einfach nicht heraus.


Hm, dann weiss ich nichtmehr wirklich weiter, funktioniert bei mir einwandfrei. Du filterst aber nicht evtl in der Requestform des Dataports (also beim Aufrufen) auf einen bestimmten Artikel, oder?

Re: Ausgabeproblem bei DataPort

21. September 2009 22:11

misterelektro1981 hat geschrieben:Die obere Grafik ist der erste Artikel. Hier wird die Kreditornr., Kred.-Artikelnr. sowie Name des Kreditos ausgegeben.
In der unteren Grafik sind alle Felder gefüllt, jedoch kommen hier keine Infos raus.

Ist denn beim Artikel Nr. 60312 im Feld "Vendor No." (Kreditorennr.) momentan 4000370780 eingetragen, wie es dein zweiter Screenshot suggeriert? Wenn nicht, ist das der Grund, warum nichts angedruckt wird.

Re: Ausgabeproblem bei DataPort

22. September 2009 07:13

An Ara:
Ich filtere nicht.

An Natalie:
Ich verstehe nicht ganz was du schreibst. Natürlich ist es dort eingetragen. Ber Kreditorennr. 60312 ist die Kred.-Artikelnr. 4000370780 zugeordnet.
Ist wohl ein tiefgründiges Problem, oder?

Re: Ausgabeproblem bei DataPort

22. September 2009 08:43

misterelektro1981 hat geschrieben:Ber Kreditorennr. 60312 ist die Kred.-Artikelnr. 4000370780 zugeordnet.

Das war nicht meine Frage. Du solltest auf der Artikelkarte ein Feld anchschauen, nicht auf der Tabelle aus deinem Screenshot.

Re: Ausgabeproblem bei DataPort

22. September 2009 08:51

Auf der Artikelkarte stehen diese Infos unter dem Drill Down Einkauf => Lieferanten. Dort sind bei fast allen Artikeln diese Felder gepflegt.

Re: Ausgabeproblem bei DataPort

22. September 2009 08:57

Natalie hat geschrieben:Ist denn beim Artikel Nr. 60312 im Feld "Vendor No." (Kreditorennr.) momentan 4000370780 eingetragen

Wenn du unsere Fragen nicht genau liest, können wir dir auch nicht helfen.
Das Feld "Vendor No." befindet sich auf der Artikelkarte auf der Registerkarte Beschaffung.

Edit:
Ach übrigens - wenn du dieses Feld bisher überhaupt nicht kanntest - wie war es dann überhaupt in deinem Dataport in Form von
Code:
IF "Vendor No." <> '' THEN ...
gelandet?