[gelöst]Datensatz innerhalb eines Filters

Bild Microsoft Dynamics NAV 2016

[gelöst]Datensatz innerhalb eines Filters

Beitragvon ITNoob » 6. März 2019 19:51

Guten Abend,
ich habe eine "entfaltetet" StĂĽckliste eins Fertigungsartikels.
Jetzt möchte ich z.B. den Einstandspreis einzelner Artikel zusammenfassen.
Es soll möglich sein nur bestimmte Artikel zusammenzufassen. Diese Filter sind allerdings bezogen auf die Artikeltabelle und werden in einer extra Tabelle mit Feld ID, Table ID und Filter hinterlegt.
Stand jetzt habe ich eine RecRef genommen und fĂĽr jedes Feld, das gefiltert werden soll, den Filter angewendet.
Jetzt stehe ich aber vor dem Problem, dass ich möglichst einfach prüfen möchte ob der Artikel, der in meiner Stückliste ist, die Filterkriterien erfüllt.
Bis jetzt habe ich das mit einer Temporären Tabelle gemacht. Das scheint mir aber schlecht für die Performance,da unter Umständen erst den kompletten Arikelstamm (oder große Teile) wegspeichern muss.
Mit "Get" kann ich auch nicht arbeiten, weil da die Filter ignoriert werden.
Hat jemand eine Idee wie man das effizient lösen kann?
Zuletzt geändert von ITNoob am 7. März 2019 15:05, insgesamt 1-mal geändert.
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon enh » 6. März 2019 20:49

Ich verstehe nicht so ganz was passieren soll. Aber Filtern und RecordReferenzen passen m. E. nicht so ganz zusammen. Warum filterst du nicht "richtig"?
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 6. März 2019 21:12

Die Filter sind definiert über ihre Feld ID. Ähnlich wie das in Rapid Start auch gelöst wird. Da habe ich mir das auch abgeschaut.
Das muss ich doch dann ĂĽber eine RecordRef machen oder nicht?
Ich lauf quasi mit einer Schleife ĂĽber alle Felder die gefiltert werden sollen (Sind mit Feld ID, Table ID und Filter in einer extra Tabelle hinterlegt)
Das ist auch nicht mein Problem. Man könnte das Problem auch vereinfachen.
Angenommen ich habe einen Artikel. Wie finde ich raus, ob dieser Artikel innerhalb meiner gefilterten Artikeltabelle ist.
Also z.B.
Code: Alles auswählen
Item.SETFILTER("No.",'%1..%2','1000','1400');
Item.SETRANGE("Base Unit of Measure",'STĂśCK');

Jetzt habe ich eine Artikelnr. z.B. "1100". Wie finde ich raus ob dieser Artikel innerhalb meiner Variablen "Item" ist.

Aktuell übergeb ich mit SETVIEW den Filter an meine Artikelvariable, lauf dann über alle Artikel und schreibe diese in eine Temporäre Tabelle.
AnschlieĂźen frage ich mit
Code: Alles auswählen
IF TmpItem.GET("No.") THEN
//Artikel im Filter
ELSE //Artikel nicht im Filter


Danke fĂĽr die Hilfe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon enh » 6. März 2019 21:17

Es gibt die GETFILTER Funktion fĂĽr Records:
https://docs.microsoft.com/en-us/dynamics-nav/getfilter-function--record-

Damit könntest du den gesetzten Filter für das Feld "No." holen und dann prüfen.

Die GETFILTERS Funktion gibt es sowohl fĂĽr Record als auch fĂĽr Recordref:
https://docs.microsoft.com/en-us/dynamics-nav/getfilters-function--record-
https://docs.microsoft.com/en-us/dynamics-nav/getfilters-function--recordref-
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 6. März 2019 21:23

Hallo enh,
danke fĂĽr die Hilfe. Was passiert wenn kein Filter auf "No." gesetzt wird?
GetFilters verwende ich schon um den Filter von meiner RecordRef auf meinen Record zu ĂĽbertragen.

GrĂĽĂźe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon enh » 6. März 2019 21:50

ITNoob hat geschrieben:danke fĂĽr die Hilfe. Was passiert wenn kein Filter auf "No." gesetzt wird?


String := Record.GETFILTER(Field)

Dann liefert GETFILTER leer zurĂĽck. Das mĂĽsste man dann entsprechend abfangen/prĂĽfen:
IF Item.GETFILTER("No.") = '' THEN ...
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 6. März 2019 22:07

Hallo enh,
danke fĂĽr die Hilfe.
Wenn der Filter aber leer ist, kann ich ja gar keine Aussage treffen. ober der Artikel drin ist oder nicht kann ich im Normalfall nicht anhand von einem Feld erkennen.
ich mĂĽsste jedes Feld in der "Filtertabelle" ausprogrammieren oder nicht?
Was mache ich z.B. bei einem Filter "1000..1005|5000..7000". Das wĂĽrde ich ja als string zurĂĽck bekommen. Wenn dann z.B. noch ein Filter auf 7 andere Felder gesetzt ist habe ich ein Problem.
Da ist denk ich ist die temporäre Tabelle doch um einiges einfacher.

Danke

GrĂĽĂźe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon enh » 6. März 2019 22:12

Stimmt, temporäre Tabelle füllen, dann kann man dort suchen.
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 6. März 2019 22:15

Danke für die unterstützung. Schon komisch. Eigentlich würde man erwarten, dass es da irgend eine einfach Lösung gibt.
Zu Prüfen ob ein Datensatz innerhalb einer gefilterten Tabelle ist hört sich nach einem täglichen Problem an.
Ich lass den Punkt mal noch offen, vielleicht hat jemand noch eine Idee.
Ich hab mir auch schon ĂĽberlegt ob man mit Filtergroups arbeiten kann und dann mit get. Aber Get ignoriert das auch.

GrĂĽĂźe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon Ted » 7. März 2019 10:44

ITNoob hat geschrieben: Eigentlich würde man erwarten, dass es da irgend eine einfach Lösung gibt.


Gibt es, meiner Meinung Nach gibt es hier 2 mögliche Lösungen das Ganze ohne temporäre Tabelle zu lösen
1. Du makierst die alle deine Records und filterst in den markierten. Ich denke aber das bringt dir keine Performance.
Code: Alles auswählen
Item.SETFILTER("No.",'%1..%2','1000','1400');
Item.SETRANGE("Base Unit of Measure",'STĂśCK');
If Item.FindSet() then
    repeat
        Item.Mark(true);
    until Item.Next() = 0;

Item.MarkedOnly(true);

Item.SetRange("No.", 'MeineNummer')


2. du kannst filtergroups nutzen
Code: Alles auswählen
Item.FilterGroup(2);
Item.SETFILTER("No.",'%1..%2','1000','1400');
Item.SETRANGE("Base Unit of Measure",'STĂśCK');
Item.FilterGroup(0);
Item.SetRange("No.", 'MeineNummer')

Die Filter in den verschiedenen Filtergroups ueberschreiben sich nicht gegenseitig.
GruĂź
Ted
Ted
 
Beiträge: 328
Registriert: 18. September 2014 11:16
Realer Name: Dennis Reinecke
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2015+

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 7. März 2019 13:06

Hallo Ted,
danke fĂĽr die Antwort. Das Probiere ich gleich noch aus.
Ich mĂĽssten dann quasi nur noch ein Findfirst machen. Das liefert mir dann ob der Datensatz enthalten ist.

GrĂĽĂźe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon Ted » 7. März 2019 13:29

wenn du die Daten aus dem Record danach nicht brauchst nutzt "IsEmpty"
Code: Alles auswählen
if not Item.IsEmpty() then
  // mein datensatz existiert

weil nen FindFirst() überträgt den Datensatz von der Datenbank zum NAS, IsEmpty() überträgt dir nur nen true oder false.
Wenn du das Ganze dann in einer Schleife machst, macht sich das Performance technisch bei größeren Tabellen schon bemerkbar
GruĂź
Ted
Ted
 
Beiträge: 328
Registriert: 18. September 2014 11:16
Realer Name: Dennis Reinecke
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2015+

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 7. März 2019 13:35

Hallo Ted,
Danke fĂĽr den Tipp.

GrĂĽĂźe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07

Re: Datensatz innerhalb eines Filters

Beitragvon ITNoob » 7. März 2019 15:04

Hallo,
funktioniert prima. Danke

GrĂĽĂźe
ITNoob
 
Beiträge: 182
Registriert: 20. Juni 2016 13:07


ZurĂĽck zu NAV 2016

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast