Dataport mit array ausgabe

8. Januar 2014 18:40

Hallo wiedermal!

Also ich muss ne Auswertung machen...
Hab die Item tabelle in den Dataport geladen und dort gehe ich per code alle filter sachen durch und such mir auch alles raus was ich brauche ....
schreibe all diese Ergebnise in je 3 Arrays rein!
Also hab ich 3 Arrays mit max 30 möglichkeiten
zb:
text
preis
menge

so soweit hätte ich auch schon alles!
ABER ABER ABER

ich muss die Ergebnise auf ne bestimmte art ausgeben zb:

ArtNR, Beschreibung, text[1], menge[1], preis[1], text[2], menge[2], preis[2], text[3]..... geht so weiter bis max 30 halt...

so wie kann ich das anstellen das der dataport dann am schluss einfach mal den array durchgeht bis er an arrlen angekommen is und dann zum nächsten datensatz geht??
mich würde es auch nicht stören wenn nicht alles nebeneinander steht sonder in dem Format
ArtNR, Beschreibung, text[1], menge[1], preis[1]
ArtNR, Beschreibung, text[2], menge[2], preis[2]
ArtNR, Beschreibung, text[3], menge[3], preis[3]
Aber das bringe ich auch nicht zusammen, stehe jetzt echt schon an .... sitz da schon seit stunden!
Kopiere mein Code mal im Textfile an ....

Vielleicht kann mir ja jemand helfen!

Danke schon mal .... ;)

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

Re: Dataport mit array ausgabe

10. Januar 2014 09:35

Hi,

ich werde aus deinem Code ehrlich gesagt noch nicht ganz schlau.
Daher kopiere ich ihn hier mal rein und ergänze ihn um Fragen:

Wo im Dataport steht dieser Code eigentlich?
Aktuell gehe ich vom OnBeforeExportRecord des DataItems "Item" aus.

Code:
artnr:= Item."No.";
zähler:= 0;

verkaufspreis.SETCURRENTKEY("Item No.","Starting Date","Ending Date","Unit Price","Unit of Measure Code");
verkaufspreis.SETFILTER("Starting Date",'010413..311213');
verkaufspreis.SETFILTER("Ending Date", '010413..311213');
// Warum kein Filter auf die Artikelnummer?

IF verkaufspreis.FIND('+') THEN BEGIN
  REPEAT
// FIND('+') bzw. Findlast und REPEAT mit NEXT dürfte die immer nur den letzen Datensatz anzeigen
// Bei NAV5 ist es besser hier mit FINDSET zu arbeiten
    zähler:= zähler +1;
// Was machst du mit deinem auf 30 beschrränktem Array wenn mehr als 29 Verkauspreise vorhanden sind?
    start:= verkaufspreis."Starting Date";
    stop:= verkaufspreis."Ending Date";

    wertposten.SETCURRENTKEY("Item No.","Posting Date","Item Ledger Entry Type","Sales Amount (Actual)");
    wertposten.SETRANGE("Item No.", artnr);
    wertposten.SETRANGE("Item Ledger Entry Type", 2);
    wertposten.SETFILTER("Posting Date", '%1..%2', start, stop);
    wertposten.CALCSUMS("Invoiced Quantity");

    text[(zähler)]:= FORMAT(start) + '-' + FORMAT(stop);
    preis[(zähler)]:= wertposten."Sales Amount (Actual)";
// Du hast keine Datensatz von wertposten im Zugriff, daher ist "Sales Amount (Actual)" vermtl. nie korrekt
    menge[(zähler)]:= wertposten."Invoiced Quantity" *1;
// warum das *1 am Ende?
  UNTIL verkaufspreis.NEXT = 0;
END;

zähler:= zähler +1;
wertposten.RESET;
wertposten.SETCURRENTKEY("Item No.","Posting Date","Item Ledger Entry Type","Sales Amount (Actual)");
wertposten.SETRANGE("Item No.", artnr);
wertposten.SETRANGE("Item Ledger Entry Type", 2);
wertposten.SETFILTER("Posting Date", '%1..%2', 010413D, 311213D);
wertposten.CALCSUMS("Invoiced Quantity");
text[(zähler)]:= '010413' + '-' + '311213';
preis[(zähler)]:= wertposten."Sales Amount (Actual)";
menge[(zähler)]:= wertposten."Invoiced Quantity" *1;
// Die selben Fragen wie schon in der Preisschleife
zähler:= 1;


Noch allgemein zur Ausgabe über den Dataport:
Hänge unter dein DataItem "Item" noch ein DataItem "Integer".
Dieses beschränkst du auf ARRAYLEN und gibst ihm als Felder deine Arrays mit "[Number]".

Re: Dataport mit array ausgabe

10. Januar 2014 17:49

artnr:= Item."No.";
zähler:= 0;

verkaufspreis.SETCURRENTKEY("Item No.","Starting Date","Ending Date","Unit Price","Unit of Measure Code");
verkaufspreis.SETFILTER("Starting Date",'010413..311213');
verkaufspreis.SETFILTER("Ending Date", '010413..311213');
// Warum kein Filter auf die Artikelnummer?
// Hatte ich vergessen, und nach 2 Stunden mühsamen Suchen hatte ich den Fehler schon gefunden gehabt ;)
// Achtung Info anbei Wertposten wurde auf Sales Invoice Line geändert

IF verkaufspreis.FIND('+') THEN BEGIN
REPEAT
// FIND('+') bzw. Findlast und REPEAT mit NEXT dürfte die immer nur den letzen Datensatz anzeigen
// Bei NAV5 ist es besser hier mit FINDSET zu arbeiten
// Ich habe es schon auf Find('-') verändert, da ich mit weit mehr als 500 Datensätze rechne
zähler:= zähler +1;
// Was machst du mit deinem auf 30 beschrränktem Array wenn mehr als 29 Verkauspreise vorhanden sind?
// Ich habe die Anzahl sogar schon auf 10 runter gesetzt weil ich nicht mehr Verkaufspreise habe
start:= verkaufspreis."Starting Date";
stop:= verkaufspreis."Ending Date";

wertposten.SETCURRENTKEY("Item No.","Posting Date","Item Ledger Entry Type","Sales Amount (Actual)");
wertposten.SETRANGE("Item No.", artnr);
wertposten.SETRANGE("Item Ledger Entry Type", 2);
wertposten.SETFILTER("Posting Date", '%1..%2', start, stop);
wertposten.CALCSUMS("Invoiced Quantity");

text[(zähler)]:= FORMAT(start) + '-' + FORMAT(stop);
preis[(zähler)]:= wertposten."Sales Amount (Actual)";
// Du hast keine Datensatz von wertposten im Zugriff, daher ist "Sales Amount (Actual)" vermtl. nie korrekt
// Habe die Preisfindung auf die Tabelle Verkaufspreis geändert, da ich genau das Problem hatte, aber jetzt anders gelöst^^
menge[(zähler)]:= wertposten."Invoiced Quantity" *1;
// warum das *1 am Ende?
// Das *1 hätte eigendlich *-1 sein sollen, wurde aber auch verworfen! Aber der Grund dafür war, das ich anfangs in der Tabelle bei einem Verkauf immer -1 stehen hatte, und das ich positive Zahlen auswerte hätte ich *-1 gemacht, wurde aber auch ausgebessert da in der Salesline sowieso positive Zahlen stehen ;)
UNTIL verkaufspreis.NEXT = 0;
END;

zähler:= zähler +1;
wertposten.RESET;
wertposten.SETCURRENTKEY("Item No.","Posting Date","Item Ledger Entry Type","Sales Amount (Actual)");
wertposten.SETRANGE("Item No.", artnr);
wertposten.SETRANGE("Item Ledger Entry Type", 2);
wertposten.SETFILTER("Posting Date", '%1..%2', 010413D, 311213D);
wertposten.CALCSUMS("Invoiced Quantity");
text[(zähler)]:= '010413' + '-' + '311213';
preis[(zähler)]:= wertposten."Sales Amount (Actual)";
menge[(zähler)]:= wertposten."Invoiced Quantity" *1;
// Die selben Fragen wie schon in der Preisschleife
// Die gleiche Antwort wie schon in der Preisschleife ;))))))
zähler:= 1;

Ahhhh Danke für die Antwort mit dem Array, das ist echt genial, Tja wenn man weis wie es geht geht es auch ganz einfach ;)))
haha VIELEN Dank ;)

Re: Dataport mit array ausgabe

13. Januar 2014 11:49

Franky4Fingas hat geschrieben:Ahhhh Danke für die Antwort mit dem Array, das ist echt genial, Tja wenn man weis wie es geht geht es auch ganz einfach ;)))
haha VIELEN Dank ;)


Hi,
wenn dein Problem gelöst ist, kannst du noch deinen ersten Beitrag editieren und [gelöst] davor schreiben.
Für die Lesbarkeit am besten noch den Code in deinem letzten Beitrag mit dem [ Code]-Tag versehen, damit das ganze entsprechend formatiert wird.