[gelöst]Gefilterter LookUp

7. März 2008 11:03

Huhu.

Irgendwie komm ich grad nicht weiter und dreh mich hier im Kreis.

Ich habe eine Form die auf die Sales Line geht. Nun möchte ich, dass ich, wenn ich den LookUp benutze auf der "No." und dann die Artikelübersicht erscheint, diese abgefiltert ist.
Allerdings soll das ganze über Satzmarken gehen, da ich zum abfiltern noch eine Tabelle (Item Ledger Entry) brauch.
Nun habe ich 2 Probleme bzw Fragen.

1) Bei einem neuen Record auf die Tabelle Item, krieg ich das ohne Probleme, setze die Satzmarken, und dann MARKEDONLY := TRUE.
Wie bekomme ich das aber direkt auf das Feld hin in der Sales Line. Geht das Überhaupt ?
2) Hab ich dann immernoch das Problem, das der User zwar die unmarkierten nicht auswählen, aber immer noch manuell eingeben kann.

Ist das ganze so überhaupt zu realisieren ?

Puh viel Text, hoffe man versteht mein Problem.

LG
Khristian
Zuletzt geändert von Khris am 7. März 2008 14:49, insgesamt 1-mal geändert.

7. März 2008 12:14

Du kannst hier nicht die normale Lookupfunktion über die Tablerelation verwenden, sondern musst das im OnLookup-Trigger des "No."-Feldes machen. da kannst du dann alle Filter setzen und den gewünschten Wert eintragen.
und damit man die unerwünschten Werte nicht manuell eingeben kann, musst du im OnValidatetrigger einfach die Eingabe mit dem Ergebnis der Lookupliste vergleichen und wenn nicht enthalten Error werfen.

7. März 2008 12:30

Ah, ok danke.
Das es nicht einfach über die Tablerelation zu lösen ist, hatte ich shcon befürchtet.

Nur mal Doofe Frage. Wie Filter ich das Feld in der Tabelle ?
Als in der Sales Line, worauf die Form geht.
Ich muss ja die dahinterstehenden Datensätze mit Repeat Until durchlaufen und sie Satzmarken, aber wie mach ich das dann genau ?
Feld ist ja kein Record =)

7. März 2008 13:10

Wenn ich das richtig verstanden habe, willst du ja nur die anzeigen, die in den Artikelposten stehen, also brauchst du nur im Onvalidate des Felds "No."
Code:
if type=type::item then begin
  itemledgentry.setrange("no.","no.");
  //hier ggf weitere filter z.B. Datumsfilter
  if itemledgentry.isempty then error('Diesen Artikel können Sie nicht nehmen')
end;

Das mit dem Satzmarken musst du nur für den Lookup
Code:
item.reset
itemledgentry.reset
// hier mit itemledgentry.setrange deine Filter setzen wenn nötig
//da es wahrscheinlich mehr als 500 Einträge werden:
if itemledgentry.find(-) then repeat
//sonst:
//if itemledgentry.findset(false,false) then repeat
  item.get(itemledgentry."no.");
  item.mark(true);
until itemledgentry.next=0;
item.markedonly(true);
if form.runmodal(0,item)=action::LookupOK then
  "No.":=item."No.";


ich hab das jetzt so aus dem Kopf geschrieben, also keine Garantie für 100% richtige Syntax, aber da hilft F1 weiter.

hier musst du natürlich noch den Lookup für die anderen typen ausprogrammieren, aber das sollte ja kein Problem sein.

7. März 2008 14:48

Hast ein super Gedächnis =)
Alles korrekt und läuft super. Lieben dank !