[Gelöst] FlowField berechnen mit Satzmarkierung

4. Juni 2007 16:06

Hallo zusammen,

ich steh mal wieder vor einem Problem bei einem Report.
Konkret geht es um die ID109 der auf die Tabellen [Customer] und [Detailed Cust. Ledg. Entry] zugreift.
Bei uns kam jetzt die Anforderung, dass Zahlungsanforderungen nicht mit angedruckt werden sollen. Das hab ich soweit auch gelöst, indem ich die Tabelle [Cust. Ledger Entry] eingebunden und entsprechend gefiltert habe. Anschließend prüfe ich, ob das Feld [DPay Invoice Type] (ist ein angepasstes Feld) den Wert "Anzahlung" enthält. Ist das der Fall, soll der Betrag nicht in der Summe erscheinen.
Am Anfang habe ich das so gemacht, dass ich einen Filter gebaut habe, der die laufenden Nummern in der Art "Lfd Nr. 1 & Lfd Nr. 2 & ..." verbindet. Das geht natürlich nur, wenn die Anzahl der Filter unter der möglichen Anzahl bleibt. Das ist bei Großkunden aber nicht möglich.
Dann habe ich versucht, das ganze über Satzmarkierungen zu machen, aber da kommt die Fehlermeldung, dass der Wert des FlowFields nicht bestimmt werden kann (s. angehängte Fehlermeldung).

Gibts noch eine Möglichkeit, wie ich diese Summe bilden kann, ohne den kompletten Report umzustellen und die Summe von Hand zu addieren? Das Problem ist halt einfach, dass hier mit Datumsbereichen gearbeitet wird und da wird es verdammt komplex das alles zu Fuß zu programmieren.

Ich hoffe ihr könnt mir helfen.

Danke schon mal im Voraus!

Gruß
Alez
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Alez am 15. Juni 2007 11:58, insgesamt 1-mal geändert.

4. Juni 2007 16:15

Bei mir in der 4.0 SP3 (inkl. Addon) hat der Report nur das DataItem Customer...

Nundenn, probier ich es so:

Falls die Fehlermeldung entstanden ist, weil im Data Item "Detailed Cust. Ledg. Entry" die Property CalcFields mit Betrag (MW) gefüllt ist, würde ich dieses Feld raus löschen und statt dessen im OnAfterGetRecord-Trigger
Code:
CALCFIELDS("Amount (LCY)");

hinzufügen.

Aber ich glaube, DAS war es nicht ;-)

4. Juni 2007 16:30

Exakt, DAS war es nichts ;-) Sorry, war leider ein bißchen blöd ausgedrückt, es gibt tatsächlich nur ein DataItem [Customer], die Tabelle [Detailed Cust. Ledg. Entry] ist eine globale Variable und wird über den C/AL-Code aufgerufen. Ebenso wird hier auch die Funktion aufgerufen:
Code:
DtldCustLedgEntry.CALCSUMS("Amount (LCY)");


Gruß
Alez

4. Juni 2007 16:41

Ah verstehe jetzt erst ;-)

Ich nehme an, du hast es ungefähr so gemacht?
Code:
FOR i := 1 TO 5 DO BEGIN
  DtldCustLedgEntry.SETCURRENTKEY("Customer No.","Initial Entry Due Date","Posting Date");
  DtldCustLedgEntry.SETRANGE("Customer No.","No.");
  DtldCustLedgEntry.SETRANGE("Posting Date",0D,StartDate);
  DtldCustLedgEntry.SETRANGE("Initial Entry Due Date",PeriodStartDate[i],PeriodStartDate[i + 1] - 1);
 // ---- Hier setzt du Satzmarken ----
  DtldCustLedgEntry.MARKEDONLY(TRUE);
  DtldCustLedgEntry.CALCSUMS("Amount (LCY)");
  CustBalanceDueLCY[i] := DtldCustLedgEntry."Amount (LCY)";
  IF CustBalanceDueLCY[i] <> 0 THEN
    PrintCust := TRUE;
END;


Wenn dem so ist, dann wirst du die Summe wohl selber errechnen müssen.
Aber ist das so schwer? Reicht es nicht aus, einfach in einer Repeatschleife das Feld zu addieren?

5. Juni 2007 07:36

Hi Natalie,

stimmt, jetzt wo du es sagst, komm ich auch drauf :-? Ich hab mir voll die Gedanken gemacht, wie ich es hinkrieg, dass die Summen auch wieder richtig für die Datumsbereiche errechnet werden. Aber das ist ja gar nicht nötig, da der Filter ja schon vorher gesetzt wird...
Das ganze hab ich jetzt so gelöst:
Code:
  AmountLCY := 0;
  IF DtldCustLedgEntry.FINDFIRST THEN REPEAT
    IF gr_CustLedgEntry.GET(DtldCustLedgEntry."Cust. Ledger Entry No.") THEN
      IF gr_CustLedgEntry."DPay Invoice Type" <> gr_CustLedgEntry."DPay Invoice Type"::"Down Payment Invoice" THEN
        AmountLCY += DtldCustLedgEntry."Amount (LCY)";
  UNTIL DtldCustLedgEntry.NEXT = 0;

  CustBalanceDueLCY[i] := AmountLCY;


Vielen Dank nochmal für den Denkanstoß :-)

Gruß
Alez