[Gelöst] Auswahl aus gefilterter Lookup-Tabelle funktioniert

27. Februar 2008 12:26

Hallo zusammen,

hier komme ich bei einem trivialen Problem nicht weiter:
Diesen Code nutze ich in einer Tabelle im On Lookup - Bereich:

Code:
Customer.FILTERGROUP(2);
Customer.SETRANGE("No.", '40000000','49999999');
FORM.RUN(22, Customer);


Um das folgende zu erreichen:
Benutzer sollen an einer bestimmten Stelle ausschließlich Customer des Nummernbereichs 40000000..49999999 auswählen können. Zwar funktioniert der Filter für das LookUp-Form, aber die Auswahl für das Parent-Form nicht, dh. ich kann die ausgewählte Zeile nicht einfach mit ENTER als Auswahl bestätigen.
Habe die anderen Beiträge im Forum gelesen, aber das half leider nicht...


[Edit TL: C/AL-Code in Code-Tags gepackt]
Zuletzt geändert von eric_unplugged am 27. Februar 2008 15:26, insgesamt 1-mal geändert.

27. Februar 2008 13:14

Deiner Form fehlt der LOOKUPMODE. Ohne den gibt es keinen OK- und Abbrechen-Button.

Siehe hier.

27. Februar 2008 13:26

Es fehlt in Deinem Code die Zuweisung des Ergebnisses aus dem LookUp (der, wie Natalie ja schon berichtet hat, auch fehlt):

Code:
Customer.FILTERGROUP(2);
Customer.SETRANGE("No.", '40000000','49999999');
//FORM.RUN(22, Customer);
IF FORM.RUNMODAL(0,Customer) = ACTION::LookupOK THEN
  VALIDATE("No.",Customer."No.");


Weil in der Table Customer ein LookupForm definiert ist, reicht im Form RunModel die 0 als Formulardefinition.
Den Validate schlage ich vor, weil Du bestimmt im OnValidateTrigger in Deiner Tabelle irgendwas durch die Eingabe der Customer No. erreichen willst.

Hoffe Du bekommst Dein Problem gelöst.

Gruß
Björn


[Edit TL: C/AL-Code in Code-Tags gepackt]

27. Februar 2008 14:46

Hallo Ihr beiden,

leider funktionieren beide Varianten nicht, dh. mein "ENTER" bleibt unerhöhrt.

Noch eine Idee, warum ich auf dem Schlauch stehe? :-)

Code:
Customer.FILTERGROUP(2);
Customer.SETRANGE("No.", '40000000','49999999');
//FORM.RUN(22, Customer);
IF FORM.RUNMODAL(0,Customer) = ACTION::LookupOK THEN
 BEGIN
  CustomerList.GETRECORD(Customer);
  CoFinanciers := Customer."No.";
  MODIFY;
END;

27. Februar 2008 14:56

Ist CoFinanciers überhaupt ein Tabellenfeld oder nur eine Variable?

Ich weiß ja zwar nicht, in welcher Tabelle du dich gerade befindest, aber ich hätte dort diesen Quelltext vermtuet:

Code:
Customer.FILTERGROUP(2);
Customer.SETRANGE("No.", '40000000','49999999');
Customer.FILTERGROUP(0);
IF FORM.RUNMODAL(0,Customer) = ACTION::LookupOK THEN BEGIN
  //CustomerList.GETRECORD(Customer); // wofür?
  VALDIATE("Customer No.", Customer."No."; // nicht CoFinanciers
  // MODIFY; // eigentlich unnötig
END;


Aber so hat es dir ja schon Björn geschrieben.

27. Februar 2008 15:03

eric_unplugged hat geschrieben:Noch eine Idee, warum ich auf dem Schlauch stehe? :-)
Ja, weil du nach dem LookupOK die Customer-Variable wieder mit CustomerList.GETRECORD(Customer) überschreibst.

So reicht es vollkommen aus:
Code:
Customer.FILTERGROUP(2);
Customer.SETRANGE("No.", '40000000','49999999');
IF FORM.RUNMODAL(0,Customer) = ACTION::LookupOK THEN BEGIN
//  CustomerList.GETRECORD(Customer);
  CoFinanciers := Customer."No.";
  MODIFY;
END;

27. Februar 2008 15:14

Hi,

so muesste es allgemein mit GETRECORD funktionieren.

Code:
CLEAR(Record);
CLEAR(Form);
Record.SETRANGE(Feld,Wert);
Form.LOOKUPMODE(TRUE);
Form.SETTABLEVIEW(Record);
IF Form.RUNMODAL = ACTION::LookupOK THEN BEGIN
  Form.GETRECORD(Record);
  ZubefuellendesFeld := Record.Feld;
  MODIFY();
END;


Gruesse
feri

27. Februar 2008 15:15

Hallo Natalie, hallo Timo,

vielen Dank für Eure Antworten.
@Timo: Diese Variante ist "verbaut" und funktioniert.

Vielen herzlichen Dank.

27. Februar 2008 15:15

... wobei Form (im Gegesatz zu FORM) eine Variable (!) vom Typ Form - Customer List) ist. Ich glaube, das sollten wir besser erwähnen.