[Gelöst] CC: Unterdeckung berechnen - Erweiterung

2. April 2015 08:52

Guten Morgen zusammen,

ich habe einen Report erstellt, der folgende Bedingungen erfüllen bzw. ausgeben soll:

Ist die "Menge in Auftrag" größer als der "Lagerbestand" sollen alle Artikel ausgegeben werden (Excel Export) die 10-stellig sind. Zusätzlich soll der VK-Verbrauch der letzten 12 Monate angezeigt werden. Den VK-Verbrauch habe ich schon aus meinem anderen Report übernommen. Die Export-Funktion konnte ich ebenfalls schon erfolgreich bei einem anderen Bericht anwenden.

In den Properties vom "Lagerbestand" (Item.Inventory) steht folgendes:

Code:
CalcFormula:

Sum("Item Ledger Entry".Quantity WHERE (Item No.=FIELD(No.),Global Dimension 1 Code=FIELD(Global Dimension 1 Filter),Global Dimension 2 Code=FIELD(Global Dimension 2 Filter),Location Code=FIELD(Location Filter),Drop Shipment=FIELD(Drop Shipment Filter),Variant Code=FIELD(Variant Filter),Lot No.=FIELD(Lot No. Filter),Serial No.=FIELD(Serial No. Filter)))


In den Properties von "Menge in Auftrag" (Item."Qty on Sales Order) steht folgendes:

Code:
CalcFormula:

Sum("Sales Line"."Outstanding Qty. (Base)" WHERE (Document Type=CONST(Order),Type=CONST(Item),No.=FIELD(No.),Shortcut Dimension 1 Code=FIELD(Global Dimension 1 Filter),Shortcut Dimension 2 Code=FIELD(Global Dimension 2 Filter),Location Code=FIELD(Location Filter),Drop Shipment=FIELD(Drop Shipment Filter),Variant Code=FIELD(Variant Filter),Shipment Date=FIELD(Date Filter)))


DataItems für die "Item Ledger Entry" und die "Sales Line" habe ich schon angelegt. Benötige ich die überhaupt und falls ja, was muss ich in die Trigger schreiben?

Beim Ausführen bekomme ich folgende Meldung:

NAV.JPG


Mit Flow Fields habe ich noch nicht viel gemacht. Was muss ich hier wohl noch tun?

Hier ein Ausschnitt aus meinem Code:

Code:
...
Item.CALCFIELDS("S. Consump. of last 12 Months");

IF Item."Calculated to Date" = 0D THEN BEGIN
  CurrReport.SKIP;
END;

Unterdeckung := "Item Ledger Entry".Quantity - "Sales Line"."Outstanding Qty. (Base)";

IF Unterdeckung > 0 THEN BEGIN
  CurrReport.SKIP;
END;

IF Unterdeckung <= 0 THEN BEGIN
  GlobalRowNo += 1;
  EnterCell(GlobalRowNo,1,'"' + Item."No." + '"',FALSE,FALSE,'');
  EnterCell(GlobalRowNo,2,FORMAT(Description),FALSE,FALSE,'');
  EnterCell(GlobalRowNo,3,FORMAT(Unterdeckung),FALSE,FALSE,'');
  EnterCell(GlobalRowNo,4,FORMAT(Item."S. Consump. of last 12 Months"),FALSE,FALSE,'');
END;
...


Und wie bekomme ich es hin, dass nur die Artikelnummern mit 10 Stellen ausgegeben werden?

Vielen Dank schon mal für eure Hilfe!!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von NIQ am 15. April 2015 13:20, insgesamt 3-mal geändert.

Re: CC: Unterdeckung berechnen

2. April 2015 10:54

NIQ hat geschrieben:DataItems für die "Item Ledger Entry" und die "Sales Line" habe ich schon angelegt. Benötige ich die überhaupt und falls ja, was muss ich in die Trigger schreiben?

Benötigst du vermutlich nicht. Du lässt beide Werte genauso berechnen, wie du es in deinem Beispiel mit deinem Feld "S. Consump. of last 12 Months" machst.

NIQ hat geschrieben:Mit Flow Fields habe ich noch nicht viel gemacht. Was muss ich hier wohl noch tun?

Irgendwo in deinem Code steht so etwas wie "ItemLedgerEntry.CALCFIELDS(Quantity)". Daher kommt der Fehler.

NIQ hat geschrieben:Und wie bekomme ich es hin, dass nur die Artikelnummern mit 10 Stellen ausgegeben werden?

Schau dir die Funktion STRLEN oder die Filtermöglichkeiten mit Fragezeichen an.

Nur so nebenher: der Bedarf an Artikeln lässt sich nicht nur an der Menge im Auftrag festmachen, sondern da gibt es ja noch Fertigungsaufträge, Serviceaufträge, Umlagerungen usw.

Re: CC: Unterdeckung berechnen

2. April 2015 11:24

Benötigst du vermutlich nicht. Du lässt beide Werte genauso berechnen, wie du es in deinem Beispiel mit deinem Feld "S. Consump. of last 12 Months" machst.


Was meinst du mit berechnen?

Irgendwo in deinem Code steht so etwas wie "ItemLedgerEntry.CALCFIELDS(Quantity)". Daher kommt der Fehler.


CALCFIELDS habe ich noch nicht in meinem Code. An welcher Stelle benötige ich das?

Re: CC: Unterdeckung berechnen

2. April 2015 11:59

NIQ hat geschrieben:Was meinst du mit berechnen?

So, wie du das hier machst:
NIQ hat geschrieben:Item.CALCFIELDS("S. Consump. of last 12 Months");


NIQ hat geschrieben:CALCFIELDS habe ich noch nicht in meinem Code. An welcher Stelle benötige ich das?

Hast du schon (s.o. :wink: ), aber es kann auch sein, dass du das Feld Quantity in den Properties des DataItems "Item Ledger Entry" bei den CalcFields eingetragen hast. Jedoch egal, ob du versuchst, das Feld im Code oder in den Properties berechnen zu lassen: das funktioniert bei einem normalen Feld nicht.

Re: CC: Unterdeckung berechnen

2. April 2015 12:19

Hast du schon (s.o. :wink: ), aber es kann auch sein, dass du das Feld Quantity in den Properties des DataItems "Item Ledger Entry" bei den CalcFields eingetragen hast. Jedoch egal, ob du versuchst, das Feld im Code oder in Properties berechnen zu lassen: das funktioniert da nicht.


Außer das CALCFIELD für "S. Consump. of last 12 Months" habe ich kein anderes im Code. Weitere DataItems habe ich auch nicht angelegt.

Code:
...
Item.CALCFIELDS("S. Consump. of last 12 Months");

IF Item."Calculated to Date" = 0D THEN BEGIN
  CurrReport.SKIP;
END;

Unterdeckung := "Item Ledger Entry".Quantity - "Sales Line"."Outstanding Qty. (Base)";

IF Unterdeckung > 0 THEN BEGIN
  CurrReport.SKIP;
END;

IF Unterdeckung <= 0 THEN BEGIN
   GlobalRowNo += 1;
   EnterCell(GlobalRowNo,1,'"' + Item."No." + '"',FALSE,FALSE,'');
   EnterCell(GlobalRowNo,2,Description,FALSE,FALSE,'');
   EnterCell(GlobalRowNo,3,FORMAT(Unterdeckung),FALSE,FALSE,'');
   EnterCell(GlobalRowNo,4,FORMAT(Item."S. Consump. of last 12 Months"),FALSE,FALSE,'');
END;
...


Leider bekomme ich als Wert immer nur 0 bei Unterdeckung bei allen Artikeln raus, sprich er rechnet nicht richtig.

Schau dir die Funktion STRLEN oder die Filtermöglichkeiten mit Fragezeichen an.


STRLEN bringt mir in dem Fall nichts, da die Funktion ja nur die Anzahl der Zeichen einer Zeichenkette ausgibt.

Ich benötige quasi sowas wie
Code:
Item."No." = '??????????'
für alle Artikelnummern mit 10 Stellen, korrekt? Nur wie bzw. wo baue ich das ein?

Re: CC: Unterdeckung berechnen

2. April 2015 12:33

NIQ hat geschrieben:STRLEN bringt mir in dem Fall nichts, da die Funktion ja nur die Anzahl der Zeichen einer Zeichenkette ausgibt.

Eben. Du wolltest doch heraus bekommen, welche 10 Zeichen haben, oder? Die kannst du dann skippen.

Aber dein Vorschlag funktioniert auch, wenn du ihn in der DataItemTableView des Dataitems benutzt.

NIQ hat geschrieben:Leider bekomme ich als Wert immer nur 0 bei Unterdeckung bei allen Artikeln raus, sprich er rechnet nicht richtig.

Das liegt an dieser Zeile:
NIQ hat geschrieben:
Code:
Unterdeckung := "Item Ledger Entry".Quantity - "Sales Line"."Outstanding Qty. (Base)";

Du möchtest doch etwas ganz anderes rechnen, nämlich den Lagerbestand minus Menge in Auftrag?

NIQ hat geschrieben:Außer das CALCFIELD für "S. Consump. of last 12 Months" habe ich kein anderes im Code. Weitere DataItems habe ich auch nicht angelegt.
NIQ hat geschrieben:DataItems für die "Item Ledger Entry" und die "Sales Line" habe ich schon angelegt.

Ja, was denn nun? :roll:

Re: CC: Unterdeckung berechnen

2. April 2015 12:58

Eben. Du wolltest doch heraus bekommen, welche 10 Zeichen haben, oder? Die kannst du dann skippen.

Aber dein Vorschlag funktioniert auch, wenn du ihn in der DataItemTableView des Dataitems benutzt.


Die 10 Zeichen haben sollen ausgegeben werden. Alle anderen nicht...

Du möchtest doch etwas ganz anderes rechnen, nämlich den Lagerbestand minus Menge in Auftrag?


Ja das möchte ich, aber "Item Ledger Entry".Quantity ist unser Lagerbestand und "Sales Line"."Outstanding Qty. (Base)" ist die Menge in Auftrag.

Also wäre die Zeile ja schon korrekt!?

Re: CC: Unterdeckung berechnen

2. April 2015 13:14

Hallo NIQ,

ein Tipp, schau dir auf der Artikelkarte an wie der Lagerbestand ermittelt wird.

Und über die Entwicklerhilfe kann man sich zu den meisten Feldern der Standardtabellen eine Erklärung anzeigen lassen was diese Felder für eine Information beinhalten.

Re: CC: Unterdeckung berechnen

2. April 2015 13:45

NIQ hat geschrieben:Die 10 Zeichen haben sollen ausgegeben werden. Alle anderen nicht...

Mein Fehler. Aber dann skipst du eben die anderen.

NIQ hat geschrieben:Also wäre die Zeile ja schon korrekt!?

Du warst doch zu Beginn an der richtigen Stelle: Item.Inventory und Item."Qty. on Sales Order" sind die Felder, die deine gesuchten Werte angeben können.

Re: CC: Unterdeckung berechnen

2. April 2015 15:17

Ich konnte es nun lösen - Vielen Dank!

Re: [Gelöst] CC: Unterdeckung berechnen

10. April 2015 13:02

Hallo zusammen,

der Report soll noch mit einem Datumsfilter erweitert werden.

Unter "Qty on Sales Order" befindet sich jeweils ein Warenausgangsdatum ("Shipment Date") für die unterschiedlichen Verkaufszeilen auf das nun noch gefiltert werden soll.

Bisher spielte sich ja alles in dem DataItem "Item" ab.

Muss ich extra ein DataItem "Sales Line" hinzufügen bzw. wie kann ich das am besten mit einbinden?

Re: CC: Unterdeckung berechnen - Erweiterung

10. April 2015 23:40

In deinem allerersten Beitrag hast du ja die CalcFormulas zitiert. Bei der "Menge in Auftrag" ist bereits der Date Filter mit einbezogen. Somit kannst du dieses Feld auch weiterhin benutzen.

Das Feld Inventory benutzt den Date Filter aber nicht. Da könntest du aber als Alternative das Feld "Net Change" nehmen. Schau mal in dessen CalcFormula; dann siehst du, was ich meine.

Re: CC: Unterdeckung berechnen - Erweiterung

13. April 2015 10:27

Guten Morgen,

okay... aber wie genau binde ich das ein, damit der User auf das Warenausgangsdatum filtern kann?

Re: CC: Unterdeckung berechnen - Erweiterung

13. April 2015 10:53

Dafür kannst du zB eine Variable einbinden, die du bei den Optionen anzeigst.

Re: CC: Unterdeckung berechnen - Erweiterung

13. April 2015 11:08

Verstehe gerade noch nicht ganz, wie ich das Feld Warenausgangsdatum mit einbezogen bekomme. Das Feld befindet sich ja nicht in der Item Tabelle.

Sorry, bin da noch nicht so bewandert und stehe etwas auf dem Schlauch... :-?

Re: CC: Unterdeckung berechnen - Erweiterung

14. April 2015 07:15

Du kannst den Report 99001017 als Beispiel nehmen, wie man ein Start- und Enddatum über die Requestform hernimmt.

Re: CC: Unterdeckung berechnen - Erweiterung

14. April 2015 12:23

Danke für dein Beispiel.

Wie man eine Requestform mit Start und Enddatum generell erstellt, ist mir eigentlich klar.

Dafür kannst du zB eine Variable einbinden, die du bei den Optionen anzeigst.


Was genau für eine Varible? Komme mit der Verknüpfung des Warenausgangsdatum nicht so klar.

Also das mir genau dieses Datum bzw. einen Zeitraum dazwischen ausgegeben wird.

In deinem allerersten Beitrag hast du ja die CalcFormulas zitiert. Bei der "Menge in Auftrag" ist bereits der Date Filter mit einbezogen. Somit kannst du dieses Feld auch weiterhin benutzen.


Wie kann ich diesen Date Filter anwenden?

Re: CC: Unterdeckung berechnen - Erweiterung

14. April 2015 15:52

Code:
Item.SetRange( ... );
..
.. <-- alle deine bisherigen Filter
..
Item.SetRange("Date Filter",VonDatum,BisDatum);
Item.Calcfields("Qty. on Sales Order");

Wie du die Datumsgrenzen einbindest - über ein vorgeschaltetes DataItem oder die Requestform-, hängt von deinen Anforderungen ab.

Re: CC: Unterdeckung berechnen - Erweiterung

14. April 2015 16:32

Ich habe nun die Variblen "VonDatum" und "BisDatum" angelegt und der Requestform hinzugefügt.

Item.SetRange( ... );


Welche Range muss ich denn hier abrufen?

Item.Calcfields("Qty. on Sales Order");


Hab ich schon im Code...


Mein aktueller Code sieht wie folgt aus:

Code:
IF STRLEN(Item."No.") <> 10 THEN
  CurrReport.SKIP;

Item.CALCFIELDS("S. Consump. of last 12 Months");

IF Item."Calculated to Date" = 0D THEN BEGIN
  CurrReport.SKIP;
END;

Item.CALCFIELDS(Inventory);
Item.CALCFIELDS("Qty. on Sales Order");

Unterdeckung := Item.Inventory - Item."Qty. on Sales Order";

IF Unterdeckung >= 0 THEN BEGIN
  CurrReport.SKIP;
END;

  GlobalRowNo += 1;
  EnterCell(GlobalRowNo,1,'"' + Item."No." + '"',FALSE,FALSE,'');
  EnterCell(GlobalRowNo,2,Description,FALSE,FALSE,'');
  EnterCell(GlobalRowNo,3,FORMAT(Item.Inventory),FALSE,FALSE,'');
  EnterCell(GlobalRowNo,4,FORMAT("Qty. on Sales Order"),FALSE,FALSE,'');
  EnterCell(GlobalRowNo,5,FORMAT(Unterdeckung),FALSE,FALSE,'');
  EnterCell(GlobalRowNo,6,FORMAT(Item."S. Consump. of last 12 Months"),FALSE,FALSE,'0,00');

Re: CC: Unterdeckung berechnen - Erweiterung

14. April 2015 21:44

NIQ hat geschrieben:Welche Range muss ich denn hier abrufen?
Alles, was du ggf. bisher schon einfilterst war damit gemeint. Nach deinem Codeschnipsel also nichts :wink:

Und wieso hast du in deinem Code den Filter auf "Date Filter" nicht eingebaut?

Re: CC: Unterdeckung berechnen - Erweiterung

14. April 2015 21:53

Mit dem "Date Filter" bekomme ich einfach irgendwie nicht das Shipment Date raus... :-/ Ich bekomme zwar keine Fehlermeldung, aber trotzdem die gleichen Werte so wie vorher raus. Was genau benötige ich denn jetzt alles? Werde schon verrückt von diesem Report. ;)

Re: CC: Unterdeckung berechnen - Erweiterung

15. April 2015 08:00

NIQ hat geschrieben:Was genau benötige ich denn jetzt alles?

Das steht hier alles inkl. Code. Tut mir leid, aber genauer kann ich es nicht mehr erklären :roll: .

Re: CC: Unterdeckung berechnen - Erweiterung

15. April 2015 13:20

Ist gelöst - Danke!