[RTC] Page fester Filter

1. März 2013 21:15

Hallo zusammen,

etwas leichtes für euch für den Feierabend.
Um FA Zeilen (Baugruppen) anzuzeigen, die mit eine größeren Menge produziert wurden als geplant habe ich eine neue Page mit den FA Zeilen generiert. Nun habe ich im OnOpen Page folgendes programmiert:
Code:
SETFILTER("Finished Quantity",'>%1',Quantity);
CurrPage.UPDATE(FALSE);


Die Page scheint an dieser Stelle nicht auf Setfilter zu reagieren ... auch nicht wenn ich dieses als Action einbinde und von der Page aufrufe....

Die Lösung ist bestimmt simpel oder?

Re: [RTC] Page fester Filter

1. März 2013 21:25

In NAV kannst du generell keine Bedingung der Art "Wenn Feld A > Feld B derselben Tabelle" mit einem Filter abbilden.

Der Code in deinem Trigger kann außerdem nicht funktionieren, weil im OnOpenPage-Trigger noch kein einziger Datensatz gelesen worden ist. Also kann hier kein Feld mit einem anderen verglichen werden und auch das CurrPage.UPDATE macht in diesem Trigger gar keinen Sinn.

Du hast zwei Möglichkeiten:
Entweder die Page auf temporären Records basieren lassen (SourceTableTemporary = Ja und im OnOpenPage Rec füttern)
oder die Pagetrigger OnAfterGetRecord und Co. anderweitig ausprogrammieren.

Meine Empfehlung: Versuchs mit SourceTableTemporary.

Re: [RTC] Page fester Filter

1. März 2013 21:29

Ach schade.... wäre ja auch zu schön gewesen :wink:

Kannst du mir ein paar Stichpunkte geben, was ich im onopenpage zu programmieren hätte?
Würde ich mir da einfach meine Filter / Setranges etc. setzen?

Re: [RTC] Page fester Filter

1. März 2013 21:32

PhilSan hat geschrieben:Kannst du mir ein paar Stichpunkte geben, was ich im onopenpage zu programmieren hätte?

- Du benötigst dort eine neue Recordvariable auf die gleiche Tabelle
- Durchlaufe mit der neuen Variable alle Datensätze
- Jeden Datensatz, der deinem Kriterium entsprichst, kopierst und INSERTest du in Rec:
Code:
Rec := DeineNeueRecVariable;
Rec.INSERT;

Re: [RTC] Page fester Filter

1. März 2013 21:33

aaah... verstanden :-) Vielen Dank.

Das sollte ja schnell erledigt sein.

Re: [RTC] Page fester Filter

1. März 2013 22:06

Natalie hat geschrieben:
PhilSan hat geschrieben:Kannst du mir ein paar Stichpunkte geben, was ich im onopenpage zu programmieren hätte?

- Du benötigst dort eine neue Recordvariable auf die gleiche Tabelle
- Durchlaufe mit der neuen Variable alle Datensätze
- Jeden Datensatz, der deinem Kriterium entsprichst, kopierst und INSERTest du in Rec:
Code:
Rec := DeineNeueRecVariable;
Rec.INSERT;

Entweder in ich zu blöd oder es ist zu spät .... =/

Source Table der Page ist die Prod Order Line, das temporary Property auf Ja gesetzt. Der Code im OnOpagen Page
Code:
ProdOrderLineL.SETFILTER("Finished Quantity",'>%1',ProdOrderLineL.Quantity);
IF ProdOrderLineL.FINDFIRST THEN
  REPEAT
    Rec.COPY(ProdOrderLineL);
    Rec.INSERT;
  UNTIL ProdOrderLineL.NEXT = 0;

Re: [RTC] Page fester Filter

1. März 2013 22:12

PhilSan hat geschrieben:
Code:
ProdOrderLineL.SETFILTER("Finished Quantity",'>%1',ProdOrderLineL.Quantity);


Natalie hat geschrieben:In NAV kannst du generell keine Bedingung der Art "Wenn Feld A > Feld B derselben Tabelle" mit einem Filter abbilden.

Also bitte die entspr. Codezeile streichen.

Natalie hat geschrieben:- Durchlaufe mit der neuen Variable alle Datensätze
- Jeden Datensatz, der deinem Kriterium entspricht

Code:
    IF ProdOrderLineL.FINDSET THEN // bitte niemals FINDFIRST und REPEAT kombinieren
      REPEAT
        IF Deine Bedingung erfüllt THEN BEGIN // ---NEU
          Rec.COPY(ProdOrderLineL); // Nimm besser wirklich Rec := ProdOrderLineL, sonst kopierst du evtl. vorher gesetzte Filter gleich mit.
          Rec.INSERT;
        END; // ----NEU
      UNTIL ProdOrderLineL.NEXT = 0;

Re: [RTC] Page fester Filter

1. März 2013 22:35

Alles klar, danke!
So lange die Prperty auf temporär gesetzt ist kann ja auch nichts schief gehen ;)

Gute Nacht und eins chönes Wochenende

Re: [RTC] Page fester Filter

4. März 2013 10:29

Hallo,

und wieso gibst du den Filter nicht per "Record Variable" bevor du Page.Run aufrufst mit?
Wäre eine Alternative, je nach dem wo du den Aufruf starten willst.


Gruß
Aydin