Lookup auf Requestform programmieren

28. Dezember 2006 17:59

Hi,

in einem anderen Artikel hatte ich mich nach der Progammierung von LookUps erkundigt. Dies hat auch prima funktioniert. Jetzt möchte ich einen Loopup auf einer Requestform eines Report erstellen. Irgendwie finde ich aber nicht den richtigen Trigger. Es gibt von dem Feld, welches ich auf der Requestform angelegt und benannt habe, keinen OnLookUp Trigger. Geht das überhaupt?

28. Dezember 2006 19:06

Ja, es gibt auch für jedes Feld, dass du auf einem Request-Form ablegst, einen OnLookup-Trigger.

Dazu musst du das Feld zuerst markieren. Mit F9 bekommst du dann die verfügbaren Triggers zu sehen, unter anderen auch OnLookup.

Wenn du aber nur ein bestehendes Lookup-Form aufrufen willst, kannst du auch das Property 'TableRelation' dazu verwenden.

29. Dezember 2006 10:30

Hi Rotsch,

danke für die schnelle Antwort. Ich finde nur komisch, dass nicht der Name der Textbox, sondern der Name des letzten DataItem vor dem OnLookUp Trigger steht. Wie auch immer. Hier meine kurze Erklärung, was ich überhaupt vorhaben:

Der besagt Report soll später Beitragsdaten für einen Lastschrifteinzug in die Tabellen DTA_Header und DTA_Lines schreiben. Der Report wird über eine Funktion in einem TabellenFormular aufgerufen und übergibt direkt vorausgewählte Gliederungsnummern und Kontaktnummer (Filterfelder). Das funktioniert auch soweit. :-D

Der Report hat nun also die Gliederungsnummer und die Kontaktnummer bereits als Filterwerte übergeben bekommen. Jetzt möchte ich auf der Requestform ein Feld anbieten, das nach einem Lookup auf die Tabelle NoSeries automatisch die nächste freie Nummer der ausgewählten Gliederung liefert. Sprich, hier soll für die DTA-Datei/Diskette eine neue Nummer gezogen.

In dem Beispiel auf Navision24 wird hierfür eine Textbox in einer Form angelegt. Im Sourcetable des Formulars ist eine Funktion (AssistEdit) hinterlegt, die die neue freie Nummer aus der gewählten Nummernserie zieht. Die Funktion wird im OnAssistEdit Trigger der Textbox mit

Code:
 IF AssistEdit(xRec) Then
  CurrForm.UPDATE;


ausgeführt. So, wie bekomme ich nun die gleich Funktionalität auf meine RequestForm???

29. Dezember 2006 15:08

Keiner eine Idee? Hier noch mal eine komplette Beschreibung. Vielleicht habe ich mich ja unverständlich ausgedrückt.

Report
DataItem: Beitragstabelle

Recordvariablen: DTA_Header + DTA_Lines (diese sollen mit Beitragsdaten befüllt werden)

Auf der Requestform wird ein Optionsfeld "Diskettennummer" eingeblendet. Klickt der User hier drauf, soll eine neue "freie" Nummer aus der entsprechenden Nummerserie gezogen werden.

In Recordvariable DTA_Header ist folgende Funktion hinterlegt:

Code:
IF AssistEdit(xRec) THEN
  CurrForm.UPDATE;
WITH DTAUS DO BEGIN
  DTAUS := Rec;
  GLSetup.GET;
  GLSetup.TESTFIELD("DTAUS Beitrag Nummern");
  IF NoSeriesMgt.SelectSeries(GLSetup."DTAUS Beitrag Nummern",DTAUS_Alt.Nummernserie,Nummernserie) THEN BEGIN
    NoSeriesMgt.SetSeries(Diskettennummer);
    Rec := DTAUS;
    EXIT(TRUE);
  END;
END;


Im OnValidate Trigger des Feldes "Diskettenummer" der Recordvariable DTA_Header steht folgendes:

Code:
IF Diskettennummer <> xRec.Diskettennummer THEN BEGIN
  GLSetup.GET;
  NoSeriesMgt.TestManual(GLSetup."DTAUS Beitrag Nummern");
  Diskettennummer := '';
END;


Im Moment hänge ich total. Wie schon beschrieben funktioniert der Aufruf der Funktion "AssistEdit" in einem normalen Formular einwandfrei. Hierfür habe ich im OnValidate Trigger des Feldes "Diskettennummer" auf dem Testformular folgenden Code hinterlegt:

Code:
IF AssistEdit(xRec) THEN
  CurrForm.UPDATE;


Auf der Requestform kann ich die Funktion nicht mit "AssistEdit(xRec)" aufrufen. Also vielleicht sehe ich Wald vor lauter Bäumen nicht :cry:


ERGÄNZUNG:

Ich habe ja total vergessen den Code des OnInsert Triggers zu erwähnen:
Code:
IF Diskettennummer = '' THEN BEGIN
  GLSetup.GET;
  GLSetup.TESTFIELD("DTAUS Beitrag Nummern");
  NoSeriesMgt.InitSeries(GLSetup."DTAUS Beitrag Nummern",xRec.Nummernserie,0D,Diskettennummer,Nummernserie);
END;

29. Dezember 2006 16:22

Neue Nummern anhand einer Serie kannst du relativ einfach beziehen (2 Zeilen Code). Hier ein Beispiel:

Code:
NewNo := '';
NoSeriesMgt.InitSeries(Setup.Serie,'',TODAY,NewNo,Setup.Serie);


Das Feld Serie ist ein Codefeld in einer Setuptabelle mit Verweis auf eine Nummernserie. In der Variable NewNo hast du anschliessend die neue Nummer. Die Nummernserie wird automatisch nachgeführt (letzte Nummer etc.)

29. Dezember 2006 17:33

Hi Rotsch,

danke für den Hinweis. Habs gleich ausprobiert. Wünsche eine guten Rutsch. Bis zum nächsten Jahr.

Gruß

Markus

29. Dezember 2006 17:59

Hallo Markus,

dann hoffe, dass du dein Problem lösen kannst.

Auch dir einen guten Rutsch ins 2007. Das wird NAV-mässig sicher ein spannendes Jahr :-D