(gelöst) Lookup Filter auf Standardkatalogcode

19. Januar 2016 10:49

Guten Morgen!

Seit gestern bin ich auf der Suche nach einer Lösung für das folgende Problem.
Für das Erstellen von Arbeitsplänen, sind unsere Maschinen als Arbeitsplätze in NAV 2016 angelegt.
Die möglichen Arbeitsgänge werden im Arbeitsplan aus der Tabelle Standardkatalogcode selektiert und pro Arbeitsgang im Arbeitsplan hinterlegt.
Da in unserer Fertigung verschiedene Arbeitsgänge auf ein und der selben Maschine durchgeführt werden können, habe ich die Tabelle 99000778 um die Felder 50000 bis 50004 erweitert um bis zu 5 Arbeitsplätze (Maschinen) einem Arbeitsgang zuordnen zu können.

Das es spätere mehre hundert verschiedene Arbeitsgänge werden können, möchte ich gerne im OnLookUp eine gefilterte Übersicht der Arbeitsgänge angezeigt bekommen.
Es sollen nur die Einträge angezeigt werden, welche in einem der 5 neuen Felder des Standardkatalogcode auch die Arbeitsplatznummer des Arbeitsgang aus dem Arbeitsplan enthält.
Und genau hier liegt mein Problem!
Wie kann ich es realisieren das, das der Eintrag aus Spalte "Nr." das Arbeitsgang mit allen 5 neuen Feldern des Standardkatalogcodes verglichen und gefiltert wird?

Ich habe es bereits mit verschiedenem Code im OnLookUp Aufruf versucht.
Auch über eine eigene Page hatte ich erfolglos versucht eine gefilterte Übersicht zu bekommen.

Im Screenshot sollten z.B. die Zeilen mit Code 159 u. 199 angezeigt werden, da 2.01.00 in einem der Felder enthalten ist.
Kann mir hier jemand Tipps geben wir ich das realisiert bekomme?

Gruß
Fuige
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von fuige am 25. Januar 2016 13:26, insgesamt 1-mal geändert.

Re: Lookup Filter auf Standardkatalogcode

19. Januar 2016 19:54

Filter im OnLookup Trigger eines Felds "Feld1" in der Page:

Zieltabelle.SETRANGE(Feld,Filterwert);
Zieltabellenpage.SETTABLEVIEW(Zieltabelle);
Zieltabellenpage.LOOKUPMODE(TRUE);
IF NOT (Zieltabellenpage.RUNMODAL = ACTION::LookupOK) THEN
EXIT(FALSE);
VALIDATE(Feld1,Zieltabelle.Feld);

Zieltabelle ist eine Table, Zieltabellenpage eine Page auf die Zieltabelle.

Re: Lookup Filter auf Standardkatalogcode

20. Januar 2016 07:31

Vielen Dank für die ausführliche Antwort enh!

Auch bei dieser Lösung bleibt glaube ich mein Grundproblem leider bestehen.
Wie muss ich im SETRANGE die Filterkriterien angeben um den Inhalt der neuen 5 Felder aus dem Standardkatalogcode mit der Angabe aus Spalte "NR." der Arbeitsplanzeile zu vergleichen?
Hier stehe ich irgendwie auf dem Schlauch und bräuchte noch Hilfe.
Danke!

Re: Lookup Filter auf Standardkatalogcode

20. Januar 2016 19:43

fuige hat geschrieben:Es sollen nur die Einträge angezeigt werden, welche in einem der 5 neuen Felder des Standardkatalogcode auch die Arbeitsplatznummer des Arbeitsgang aus dem Arbeitsplan enthält.
Und genau hier liegt mein Problem!
Wie kann ich es realisieren das, das der Eintrag aus Spalte "Nr." das Arbeitsgang mit allen 5 neuen Feldern des Standardkatalogcodes verglichen und gefiltert wird?


Wenn ich das richtig verstehe dann müsste in etwa so gefiltert werden:

Zieltabelle.SETFILTER("Nr.",'%1|%2|%3|%4|%5',Feld1,Feld2,Feld3,Feld4,Feld5);

MIt %1 usw. verweist du auf die Parameter hinter dem Komma, mit SETFILTER kannst du wie im Client mit der Pipe getrennt auf mehrere Werte per ODER filtern.

Re: Lookup Filter auf Standardkatalogcode

21. Januar 2016 11:15

Hi!

Ich werde es mal so versuchen und anschl. melden.

Re: Lookup Filter auf Standardkatalogcode

21. Januar 2016 11:34

Hallo enh,

ich bräuchte den Filter leider genau umgekehrt.
Die Felder 1 bis 5 müssten geprüft werden ob die Angabe aus Nr. in einem der 5 Felder pro Datensatz im Standardkatalogcode enthalten ist.
Eine Idee wie ich das lösen kann?

Re: Lookup Filter auf Standardkatalogcode

21. Januar 2016 18:00

Programmieren kann man sowas... Man muss dann halt jeweils ein Feld filtern, schauen ob man was findet, wenn nicht im nächsten Feld filtern...

Zieltabelle.SETRANGE(Zieltabellenfeld1,Quelltabellenfeld);
IF Zieltabelle.FINDFIRST THEN ...
Zieltabelle.RESET;
Zieltabelle.SETRANGE(Zieltabellenfeld2,Quelltabellenfeld);
IF Zieltabelle.FINDFIRST THEN ...

usw.

Re: Lookup Filter auf Standardkatalogcode

25. Januar 2016 13:25

Hi!

Um meine Anforderung zu realisieren habe ich mich zusätzlich einer temporären Record Variable tempStandardTask bedient.
Mit folgendem Code im OnLookUP Trigger auf der Page funktioniert es nun wie gewünscht.
Vielen Dank an enh für die Hilfestellungen.

Code:
tempStandardTask.RESET;
tempStandardTask.DELETEALL;
CLEAR(tempStandardTask);

recStandardTask.SETRANGE(recStandardTask.Arbeitsplatz1, "No.");
IF recStandardTask.FINDFIRST then begin
  REPEAT
    tempStandardTask := recStandardTask;
    tempStandardTask.INSERT;
  UNTIL recStandardTask.NEXT = 0;
END;
recStandardTask.RESET;

recStandardTask.SETRANGE(recStandardTask.Arbeitsplatz2, "No.");
IF recStandardTask.FINDFIRST then begin
  REPEAT
    tempStandardTask := recStandardTask;
    tempStandardTask.INSERT;
  UNTIL recStandardTask.NEXT = 0;
END;
recStandardTask.RESET;

recStandardTask.SETRANGE(recStandardTask.Arbeitsplatz3, "No.");
IF recStandardTask.FINDFIRST then begin
  REPEAT
    tempStandardTask := recStandardTask;
    tempStandardTask.INSERT;
  UNTIL recStandardTask.NEXT = 0;
END;
recStandardTask.RESET;

recStandardTask.SETRANGE(recStandardTask.Arbeitsplatz4, "No.");
IF recStandardTask.FINDFIRST then begin
  REPEAT
    tempStandardTask := recStandardTask;
    tempStandardTask.INSERT;
  UNTIL recStandardTask.NEXT = 0;
END;
recStandardTask.RESET;

recStandardTask.SETRANGE(recStandardTask.Arbeitsplatz5, "No.");
IF recStandardTask.FINDFIRST then begin
  REPEAT
    tempStandardTask := recStandardTask;
    tempStandardTask.INSERT;
  UNTIL recStandardTask.NEXT = 0;
END;
recStandardTask.RESET;

IF PAGE.RUNMODAL(0, tempStandardTask) = Action::LookupOK THEN BEGIN
END;