[OFFEN]FactBox - Aller Art Abgängen last 12M

6. Februar 2019 09:33

Guten Morgen,

ich brauche noch ein Paar Augen die auf mein Code draufschaut denn ich finde den Fehler nicht

Bin in der Page 9326 - Freigegebene FA's
Eine neue FactBox soll erstellt werden. Darin sollen alle Abgänge in einer Periode angezeigt werden. Habe 12Monate als Richtwert erstmal genommen.
Neue FactBox erstellt Source die Itemtabelle und in der Page 9326 eingebunden. Das funktioniert. Wenn ich durch die Liste mit den Cursortasten navigiere ändert sich auch die Artikelnummer.

Nun habe ich eine Funktion in der FactBox angelegt.

Item_lRec - lokale Variable auf die Item Tabelle
ItemLedgerEntry_lRec - lokale Variable auf die Item Ledger Entry Tabelle
TotalAbgang - Decimal - globale Variable

Die Abgänge in der Artikelpostentabelle sind: Sale (Verkauf), Consumption (Verbrauch) und Negative Adjmt. (Abgang)

Code:
IF Item_lRec.GET("No.") THEN BEGIN
ItemLedgerEntry_lRec.RESET;
ItemLedgerEntry_lRec.SETCURRENTKEY("Item No.","Entry Type","Variant Code","Drop Shipment","Location Code","Posting Date");
ItemLedgerEntry_lRec.SETRANGE("Item No.",Item_lRec."No.");
ItemLedgerEntry_lRec.SETFILTER("Entry Type",'%1|%2|%3',ItemLedgerEntry_lRec."Entry Type"::Sale,
                                                       ItemLedgerEntry_lRec."Entry Type"::Consumption,
                                                       ItemLedgerEntry_lRec."Entry Type"::"Negative Adjmt.");
ItemLedgerEntry_lRec.SETRANGE("Posting Date",CALCDATE('-12M',WORKDATE),WORKDATE);
END;

IF ItemLedgerEntry_lRec.FINDSET THEN
   REPEAT
   TotalAbgang := ItemLedgerEntry_lRec.Quantity;
   UNTIL
   ItemLedgerEntry_lRec.NEXT = 0;


Beim kompilieren mit F11 kommt kein Syntaxfehler.
Leider bekomme ich keine Werte zurück. Bei meinem Testartikel wenn ich die Artikelpostentabelle aufrufe und die oben genannten Filter eingebe, habe ich einen Abgang von 26.600 Stück

Habt ihr vielleicht eine Idee warum mein Code nicht funktioniert? Gibt es eventuell einen eleganteren bzw. einfacheren Lösungsansatz?
Herzlichen Dank für eure Hilfe
Beste Grüße
ls
Zuletzt geändert von Raban am 20. Februar 2019 09:08, insgesamt 3-mal geändert.

Re: FactBox - Aller Art Abgängen last 12M

6. Februar 2019 09:46

Unabhängig von eventuellen anderen Fehlern: FINDFIRST in Kombination mit REPEAT ist immer verkehrt, da nur FINDSET verwenden.

Re: FactBox - Aller Art Abgängen last 12M

6. Februar 2019 10:03

Kowa hat geschrieben:Unabhängig von eventuellen anderen Fehlern: FINDFIRST in Kombination mit REPEAT ist immer verkehrt, da nur FINDSET verwenden.


danke für den Hinweis und den Link.
Habe geändert. Dennoch erhalte ich kein Wert zurück :(

Re: FactBox - Aller Art Abgängen last 12M

6. Februar 2019 10:32

Code:
IF ItemLedgerEntry_lRec.FINDSET THEN
   REPEAT
     TotalAbgang := ItemLedgerEntry_lRec.Quantity;
   UNTIL ItemLedgerEntry_lRec.NEXT = 0;


wieso genau hast du hier ein Repeat wenn du bei jedem Schleifendurchgang den Wert von "totalAbgang" überschreibst. "TotalAbgang" wird immer den Wert von deinem letztem gefiltertem Item Ledger Entry haben.
ich denke du suchst sowas wie

TotalAbgang := ItemLedgerEntry_lRec.Quantity + TotalAbgang ;
bzw
TotalAbgang += ItemLedgerEntry_lRec.Quantity;

Re: FactBox - Aller Art Abgängen last 12M

6. Februar 2019 11:03

Hallo,

Fehler: Der ItemledgerEntry.Findset gehörte in die "IF Item_lRec.GET("No.")" If- Schleife.
Verbesserungsvorschlag:
1: Spar dir den SETCURENTKEY. Wenn man den SQL-Server selbst machen lässt, funktioniert das meist besser. (Es sei denn man benötigt die Liste in eben dieser Sortierfolge)
2: Spar dir den FINDEST/Repeat Until. Ersetzte das in diesem Fall durch CALCSUMS. In ItemLedgerEntry_lRec.Quantity steht dann das Ergebnis.

Code:
IF Item_lRec.GET("No.") THEN BEGIN
  ItemLedgerEntry_lRec.RESET;
// ItemLedgerEntry_lRec.SETCURRENTKEY("Item No.","Entry Type","Variant Code","Drop Shipment","Location Code","Posting Date");
  ItemLedgerEntry_lRec.SETRANGE("Item No.",Item_lRec."No.");
  ItemLedgerEntry_lRec.SETFILTER("Entry Type",'%1|%2|%3',ItemLedgerEntry_lRec."Entry Type"::Sale,
                                                         ItemLedgerEntry_lRec."Entry Type"::Consumption,
                                                         ItemLedgerEntry_lRec."Entry Type"::"Negative Adjmt.");
  ItemLedgerEntry_lRec.SETRANGE("Posting Date",CALCDATE('-12M',WORKDATE),WORKDATE);
  ItemLedgerEntry_lRec.CALCSUMS(Quantity);
END;


Gruß Fiddi

Re: FactBox - Aller Art Abgängen last 12M

6. Februar 2019 12:51

Hallo zusammen,

vielen Dank für die Verbesserungsvorschläge und Anregungen.

Mein Code sieht jetzt so aus, funktioniert leider noch nicht :(

Code:
IF Item_lRec.GET("No.") THEN BEGIN
  ItemLedgerEntry_lRec.RESET;
  ItemLedgerEntry_lRec.SETRANGE("Item No.",Item_lRec."No.");
  ItemLedgerEntry_lRec.SETFILTER("Entry Type",'%1|%2|%3',ItemLedgerEntry_lRec."Entry Type"::Sale,
                                                         ItemLedgerEntry_lRec."Entry Type"::Consumption,
                                                         ItemLedgerEntry_lRec."Entry Type"::"Negative Adjmt.");
  ItemLedgerEntry_lRec.SETRANGE("Posting Date",CALCDATE('-12M',WORKDATE),WORKDATE);
  ItemLedgerEntry_lRec.CALCSUMS(Quantity);
END;

TotalAbgang := ItemLedgerEntry_lRec.Quantity;


totalabgang.png


Uff.... noch Ideen
Danke
Gruß
Robert

PS. Macht vielleicht Sinn in der FactBox als Source die Tabelle "Item Ledger Entry" statt "Item" zu nehmen?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: FactBox - Aller Art Abgängen last 12M

6. Februar 2019 12:55

Und wann rufst du die Funktion auf?

Re: FactBox - Aller Art Abgängen last 12M

7. Februar 2019 10:04

fiddi hat geschrieben:Und wann rufst du die Funktion auf?


Ein Licht geht auf :)

Die Funktion in der OnAfterTrigger eingefügt.

Code:
OnAfterGetRecord()
Abgaenge12M_gFnc;


Es funktioniert.
Herzlichen Dank für die hilfreichen Hinweise und die tolle Unterstützung. Ist auch nicht selbstverständlich.

Beste Grüße und eine erfolgreiche Woche
Robert

Re: [OFFEN]FactBox - Aller Art Abgängen last 12M

20. Februar 2019 09:28

Moin,

hab's erneut geöffnet da ich noch eine Frage dazu habe.
Die Mengenberechnung funktioniert ja. Damit gehe ich ein Jahr zurück und berechne Anfang und Ende des Monats.

Code:
IF Item_lRec.GET("No.") THEN BEGIN
  ItemLedgerEntry_lRec.RESET;
  ItemLedgerEntry_lRec.SETRANGE("Item No.",Item_lRec."No.");
  ItemLedgerEntry_lRec.SETFILTER("Entry Type",'%1|%2|%3',ItemLedgerEntry_lRec."Entry Type"::Sale,
                                                         ItemLedgerEntry_lRec."Entry Type"::Consumption,
                                                         ItemLedgerEntry_lRec."Entry Type"::"Negative Adjmt.");
  ItemLedgerEntry_lRec.SETRANGE("Posting Date",CALCDATE('-LM-12M'),CALCDATE('-LM-11M'));  //Summe VJ vor 12Monate
  ItemLedgerEntry_lRec.CALCSUMS(Quantity);

END ELSE
  EXIT(0);

TotalAbgang := (ItemLedgerEntry_lRec.Quantity) * -1;



Im Field als SourceExpr trage ich dann das was ausgegeben werden soll:
Beispiel
TotalAbgang
Im feld Name: "akt. Monat - 12M"

In der Faktbox wird auch so dargestellt.
01.png


Frage:
Gibt es eine Möglichkeit an dieser Stelle die Ausgabe dynamisch zu gestalten?

Gewünscht wird das so:

aktueller Monat - 12M = Feb 18
aktueller Monat - 11M = Mär 18
aktueller Monat - 10M = Apr 18

usw.

Ergebnis:

2.png


Vielen Dank
Beste Grüße
Robert

PS. habe vesucht in der Spalte "Name" mit dem FORMAT Befehl etwas zu erreichen. Funktioniert leider nicht.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [OFFEN]FactBox - Aller Art Abgängen last 12M

20. Februar 2019 09:41

Code:
format(DeinDatum,0,'<Month Text> <Year,2>')

Re: [OFFEN]FactBox - Aller Art Abgängen last 12M

20. Februar 2019 11:07

McClane hat geschrieben:
Code:
format(DeinDatum,0,'<Month Text> <Year,2>')


Danke für den Hinweis. Das habe ich schon ausprobiert.
Als Quelle habe ich mich aus mibuso-Forum bedient.

https://forum.mibuso.com/discussion/912 ... rom-a-date

Funktioniert leider nicht

Habe mal Testweise mit dem heutigen Datum ausprobiert
Der Formel nach sollte dort Feb 19 angezeigt werden.Tut es aber nicht
11.png


Anzeige im RTC

22.png


bin für weitere Vorschläge dankbar.
Beste Grüße
Robert
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [OFFEN]FactBox - Aller Art Abgängen last 12M

20. Februar 2019 12:22

Die Caption eines Feldes lässt sich nur sehr umständlich dynamisch ändern.

Ich würde eine Textvariable verwenden und nur diese anzeigen.