Verkaufszeilen filtern nach einem Feld im Header

18. April 2017 17:34

Hallo MSdynamics,

ich habe mir eine Page gebaut in der ich Zeilen im Repeater habe (vgl. Verkaufszeilen). Jetzt will ich die Zeilen so filtern, dass ich nur die habe, die im Header im bestimmten Feld einen bestimmten Wert haben. Verkaufszeilen und Verkaufskopf sind mit "Document No" verknüpft.
Z.B. ich will nur die Zeilen haben, die im Header im Feld Buchungsdatum (25.05.2016) haben.

Also ich habe auf der Page ein Feld "Buchungsdatum" und gebe in das Feld bestimmte Werte ein und die Verkaufszeilen sollten entsprechend gefiltert werden.

Gibt es sowas in NAV Standard? Wie mache ich es am besten (performance etc)?


Als Test wie schnell ich NAV kaputt machen kann habe ich hier ein bisschen Spaghetti gekocht:
Code:
PostedSalesHeader.SETRANGE("Posting Date",PostingDateFilter);
IF PostedSalesHeader.FINDSET THEN
  REPEAT
    FilterAppendix += STRSUBSTNO('%1|',PostedShopSalesHeader."No.");
  UNTIL PostedSalesHeader.NEXT = 0;
EVALUATE(NewFilter,COPYSTR(FilterAppendix,1,STRLEN(FilterAppendix)-1));
Rec.SETFILTER("Document No.",NewFilter);


Überraschend funktioniert es schnell und macht keine Probleme bis er auf 1024 Zeichen kommt.

Mit freundlichen Grußen

Re: Verkaufszeilen filtern nach einem Feld im Header

18. April 2017 21:15

Grundsätzlich kannst du nur auf Felder filtern die es in der jeweiligen Tabelle auch gibt. So wie du's gemacht hast geht's natürlich auch, mit der Einschränkung dass der Filter längenmäßig auf 1024 Zeichen beschränkt ist, wie du ja schon fest gestellt hast.

Wenn es nur um das eine Feld geht, "Posting Date" ("Buchungsdatum") gibt es auch in den Zeilen (z. B. Table 113 "Sales Invoice Line").

Re: Verkaufszeilen filtern nach einem Feld im Header

18. April 2017 22:03

Das Feld Posting Date war nur ein Beispiel, es handelt sich hier um eine eigene Header Tabelle mit eingenen Zeilen, ich habe es nur beispielhaft an bekannten Tabellen beschrieben.

Mit 1024 Zeichen ist es natürlich zu wenig (obwohl Quickfilter auf eigentlich mehr als 1024 Zeichen untestürzen).

Muss ich hier irgendwie eine neue Tabelle erstellen, durch alle Zeilen gehen, aus der Zeile in den Kopf, filtern und die Datensätze in diese Tabelle schreiben?

Re: Verkaufszeilen filtern nach einem Feld im Header

18. April 2017 22:33

Man könnte es über eine temporäre Tabelle lösen. Oder wenn's nicht zu viele Felder sind diese einfach auch in die Zeilen-Tabelle übernehmen.

Re: Verkaufszeilen filtern nach einem Feld im Header

18. April 2017 22:59

Wie genau könnte man das über eine Temp Tabelle machen? Ich versuche es gerade, aber kein Erfolg.
Ich versuche es auch über MARK und MarkedOnly mit MARK in der REPEAT UNTIL Schleife aber er markiert neue Zeilen und löscht die alte Markierung.

edit:
Mit MARK kann ich jetzt die gewünschten Datensätze markieren, ich kann die auch mit COPY (nich copyfilters) anzeigen. Dieser Weg ist aber sehr schlecht, da habe ich es auf die Schnelle nicht geschaft, dies vernünftig zu lösen. Zu viel Spielerei mit markierten und nicht markierten Datensätzen. Ich konnte keine weitere Filterung vornehmen (Quickfilter etc).

Ich mache es momentan über temp Tabelle, wo die Datensätze immer wieder mit DELETEALL gelöscht werden und dann gefiltert. Hoffentlich wird das nicht zu langsam mit mehreren Datensätzen sein.

Sonst weitere Ideen? Irgendwie über Flowfilter etc?

Re: Verkaufszeilen filtern nach einem Feld im Header

19. April 2017 14:48

Das Arbeiten mit temporären Tabellen sollte in NAV i. d. R. sehr schnell sein, hab ich mal gelesen.

Re: Verkaufszeilen filtern nach einem Feld im Header

19. April 2017 20:47

Auch wenn du tausende von Datensätzen jedes Mal neu schreibst und filterst? Auch wenn du nicht der einzige bist, der im System arbeitet? Quelle dieser Info?

Trotzdem würde ich gerne mehr dazu erfahren, vlt hat jemand geniale Ideen.

Re: Verkaufszeilen filtern nach einem Feld im Header

21. April 2017 16:16

Temporary Tables -> https://msdn.microsoft.com/de-de/library/dd355211(v=nav.90).aspx

"The advantage of using a temporary table is that all the interaction with a temporary table occurs on Microsoft Dynamics NAV Server. This reduces the load on both the network and the SQL database server."