[gelöst] CC: Integer Dataitem

15. November 2016 16:23

Ich wünsche einen schönen und guten Tag!

Ich habe ein Problem mit meinem Integer Dataitem!
Dataitem.PNG


Und zwar gebe ich in meinem Report Artikel aus. Einmal für jeden Mandanten einzeln und einmal für alle Mandanten zusammen.
Ich möchte für alle fakturierten Artikel die Summe in den Wertposten berechnen.
Leider bekomme ich im Moment nur die Summe der Artikel für die einzelnen Mandanten berechnet, siehe Code:
Code:

Value Entry, Header (1) - OnPreSection()
IF EinzelnMand = TRUE THEN BEGIN
    CurrReport.SHOWOUTPUT(TRUE);
END ELSE BEGIN
    CurrReport.SHOWOUTPUT(FALSE);
END;

SETRANGE("Item No.",Item."No.");
SETCURRENTKEY("Item No.","Posting Date",
"Item Ledger Entry Type","Entry Type","Variance Type","Item Charge No.","Location Code","Variant Code");

Anzahl:=0;

IF "Value Entry".FIND('-') THEN
REPEAT
    Anzahl+="Invoiced Quantity";
    Gesamt+="Invoiced Quantity";
   
UNTIL "Value Entry".NEXT(+1)=0;

Summe der Wertposten für Artikel aller Mandanten bekomme ich nicht hin!

Ausgabe Artikel für alle Mandanten, gebe ich über Integer Dataitem aus.
Artikel und Bezeichnung kann ich hierbei in den Sections einwandfrei ausgeben. Die Berechnung der Summe Wertposten klappt hierbei nicht!
:roll:



Beste Grüße,
Christian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von navCH am 21. November 2016 16:31, insgesamt 1-mal geändert.

Re: CC: Integer Dataitem

15. November 2016 16:55

Du rechnest in der Header Section, der Code gehört aber eher in den OnAfterGetRecord Trigger. Der macht auch das REPEAT dann überflüssig, wofür ein FINDSET besser wäre.

Re: CC: Integer Dataitem

15. November 2016 17:31

Hallo
enh hat geschrieben:Du rechnest in der Header Section, der Code gehört aber eher in den OnAfterGetRecord Trigger. Der macht auch das REPEAT dann überflüssig, wofür ein FINDSET besser wäre.

Ja stimmt schon, aber in dem Fall funktioniert dieser Code für die einzelnen Mandanten. Bräuchte vielmehr eine Berechnung der Artikel pro alle Mandanten!?

MfG
Christian

Re: CC: Integer Dataitem

15. November 2016 19:11

navCH hat geschrieben:Bräuchte vielmehr eine Berechnung der Artikel pro alle Mandanten!?


jap - z.B. per Array, aber je nachdem wieviele Artikel ihr habt, könntet ihr dann an die Grenze stoßen:
Maximum number of elements in an array variable
1,000,000
---------

du könntest bsp im Integer-DataItem nochmal alle Artikel & Wertposten aller anderen Mandanten durchprüfen Stichwort CHANGECOMPANY...-> die Artikel die du willst, hast du dir ggf. vorher schonmal im Item-DataItem weggepuffert ( in eine Temp-Itemtable als Beispiel)

Re: CC: Integer Dataitem

16. November 2016 11:29

sweikelt hat geschrieben:jap - z.B. per Array, aber je nachdem wieviele Artikel ihr habt, könntet ihr dann an die Grenze stoßen:
Maximum number of elements in an array variable
1,000,000
---------

du könntest bsp im Integer-DataItem nochmal alle Artikel & Wertposten aller anderen Mandanten durchprüfen Stichwort CHANGECOMPANY...-> die Artikel die du willst, hast du dir ggf. vorher schonmal im Item-DataItem weggepuffert ( in eine Temp-Itemtable als Beispiel)


Hallo.
Danke für die Idee mit dem Array!
Die Variante mit dem Array hatte ich mir schon gedacht, hatte es aber ignoriert.
Ich werde die Summe Wertposten pro Artikel im Integer-OnPreDataItem berechnen und dem Array übergeben. Dann übergebe ich das Array der Ausgabe im Integer-Dataitem OnAfterGetRec..
Zuletzt geändert von navCH am 21. November 2016 12:37, insgesamt 1-mal geändert.

Re: CC: Integer Dataitem

16. November 2016 12:21

An welcher Stelle sollte ich das Changecompany setzen?
tempItem ist meine temporäre Tabelle. Dort inserte ich nur No. und Description.
Die Anzahl müßte ich dort auch pro Artikel inserten, aber die Berechnung der Anzahl muss ja über alle Mandanten durchgeführt werden.

MfG
Christian

Re: CC: Integer Dataitem

21. November 2016 12:42

Hallo.

habe einen weg gefunden die Anzahl pro Artikel im Integer-Dataitem auszurechnen und auszugeben.
Allerdings noch ohne Changecompany, da überlege ich noch wo.

Code:

Integer - OnPreDataItem()
i:=1;
k:=1;

IF tempItem.FIND('-') THEN BEGIN
REPEAT
    GesamtAlle:=0;

    valueEnt.SETFILTER("Item No.",tempItem."No.");
    IF valueEnt.FIND('-') THEN BEGIN

    REPEAT
        GesamtAlle+=valueEnt."Invoiced Quantity";
    UNTIL valueEnt.NEXT(+1)=0;
    END;

    AnzahlFinal[k]:=GesamtAlle;
    k:=k+1;

UNTIL tempItem.NEXT(+1)=0;
END;
valueEnt.RESET;

IF EinzelnMand = FALSE THEN BEGIN
    tempItem.FIND('-');
    isAllItems:=FALSE;
END;

Integer - OnAfterGetRecord()
IF EinzelnMand = FALSE THEN BEGIN
    IF isAllItems THEN CurrReport.BREAK;
    Liste:=tempItem."No.";
    Descript:=tempItem.Description;

    AnzahlAusgabe:=AnzahlFinal[i];
    i:=i+1;
   
    IF tempItem.NEXT = 0 THEN isAllItems:=TRUE;
END ELSE BEGIN
    CurrReport.BREAK;
END;

Re: CC: Integer Dataitem

21. November 2016 13:22

navCH hat geschrieben:Hallo.
habe einen weg gefunden die Anzahl pro Artikel im Integer-Dataitem auszurechnen und auszugeben.
Allerdings noch ohne Changecompany, da überlege ich noch wo.


Nachdem alle Artikel für den ersten Mandant durchgelaufen sind ? :)

Re: CC: Integer Dataitem

21. November 2016 14:27

elTorito hat geschrieben:Nachdem alle Artikel für den ersten Mandant durchgelaufen sind ? :)


Hallo.

Ja genau. Hatte die Artikel aller Mandanten in Temporäre Tabelle gefüllt und im Integer-Dataitem ausgegeben.
Die berechnete Anzahl aus dem ersten Mandanten, habe ich auf alle Artikel richtig ausgeben können.
Jetzt fehlt nur noch die Summe der Anzahl aus allen Mandanten pro Artikel.

MfG
Christian

Re: CC: Integer Dataitem

21. November 2016 15:21

Warum nicht pro Mandant eine TempTabelle füllen, und wenn alle gefüllt sind dann erst Gesamtwerte zusammenrechnen?

Re: CC: Integer Dataitem

21. November 2016 15:41

elTorito hat geschrieben:Warum nicht pro Mandant eine TempTabelle füllen, und wenn alle gefüllt sind dann erst Gesamtwerte zusammenrechnen?


Ja, probiere ich gerade, aber ich hoffe das ich das Changecompany richtig gesetzt bekomme.

Re: CC: Integer Dataitem

21. November 2016 16:30

Habe eine Lösung für das Problem über alle Mandanten gefunden.
Habe Summe Anzahl doch nicht über temporäre Tabellen für alle Mandanten addiert,
sondern habe es durch eine Repeat-Until Schleife von Company laufen lassen, mit changecompany.
Ergebnis pro Artikel sah nach Prüfung richtig aus!

Code:

Integer - OnPreDataItem()
Company.Name:='Name';

i:=1;
k:=1;

IF tempItem.FIND('-') THEN BEGIN
REPEAT
    GesamtAlle:=0;

    IF comp.FIND('-') THEN
    REPEAT
        valueEnt.SETFILTER("Item No.",tempItem."No.");
        IF valueEnt.FIND('-') THEN BEGIN

        REPEAT
            GesamtAlle+=valueEnt."Invoiced Quantity";
        UNTIL valueEnt.NEXT(+1)=0;
        END;
        valueEnt.CHANGECOMPANY(comp.Name);
    UNTIL comp.NEXT(+1)=0;
    AnzahlFinal[k]:=GesamtAlle;
    k:=k+1;

UNTIL tempItem.NEXT(+1)=0;
END;
valueEnt.RESET;

IF EinzelnMand = FALSE THEN BEGIN
    tempItem.FIND('-');
    isAllItems:=FALSE;
END;

Integer - OnAfterGetRecord()
IF EinzelnMand = FALSE THEN BEGIN
    IF isAllItems THEN CurrReport.BREAK;
    Liste:=tempItem."No.";
    Descript:=tempItem.Description;

    AnzahlAusgabe:=AnzahlFinal[i];
    i:=i+1;
   
    IF tempItem.NEXT = 0 THEN isAllItems:=TRUE;
END ELSE BEGIN
    CurrReport.BREAK;
END;


:-D