Seite 1 von 1

[gelöst] Parameter von Formular an Formular übergeben

Verfasst: Di, 18.09.2012 17:20
von juetho
Aus Formular1 soll per Makro Formular2 geladen werden. Das geht grundsätzlich so (siehe Base-Handbuch S. 249):

Code: Alles auswählen

ThisDatabaseDocument.FormDocuments.getByName( "Formular2" ).open
Formular2 soll aber nur bestimmte Daten bearbeiten; am einfachsten dürfte es sein, in seiner (Haupt-) Tabelle einen Filter vorzusehen.

Wie kann ich den betreffenden Wert (ID einer Adressen-Datei) am sinnvollsten übergeben? Ich habe dazu zwei Wege gefunden, die mir beide nicht gefallen: Gibt es vielleicht einen besseren Weg? Jürgen

Re: Parameter von Formular an Formular übergeben

Verfasst: Di, 18.09.2012 20:13
von F3K Total
Hi,
du kannst in einem Makro sowohl das Formular 2 öffnen als ihm auch eine ID übergeben.
Angenommen in Formular 1 steht in Spalte 1 deine ID, dann holst du die ID des aktuellen Datensatzes mit

Code: Alles auswählen

oForm = ThisComponent.Drawpage.Forms.MainForm 'Wenn das Formular im Formularnavigator MainForm heißt
nID = oForm.getint(1)
Dann öffnest Du, z.B. wie o.a. dein 2. Formular.
Den Dateninhalt dieses Formulares kannst Du jetzt über die Setzung des Filters oder z.B. auch über ein SQL-Kommado steuern.
Schau zur 2.Variante, die ich eleganter finde, mal hier ziemlich weit unten nach. Statt des ? kannst Du hier auch deine nID einsetzen.
Für die dortigen Erklärungen kann ich mich nur nochmals bei DPunch bedanken.

Viel Erfolg, Gruß R

Re: Parameter von Formular an Formular übergeben

Verfasst: Di, 18.09.2012 20:53
von juetho
F3K Total hat geschrieben:Angenommen in Formular 1 steht in Spalte 1 deine ID, dann holst du die ID des aktuellen Datensatzes ...
Dieser Teil ist klar.
Dann öffnest Du, z.B. wie o.a. dein 2. Formular.
Den Dateninhalt dieses Formulares kannst Du jetzt über die Setzung des Filters oder z.B. auch über ein SQL-Kommado steuern....
Verstehe ich das richtig, dass ich nach dem open-Befehl noch mehr Aufgaben vom Formular1 aus erledigen kann (z.B. den Filter in Formular2 setzen)? Ich bin bisher davon ausgegangen, dass durch open "sofort" das Formular2 geladen und der Fokus übergeben wird. Der geänderte Filter könnte also ggf. erst später wirksam werden.

Die Hinweise von DPunch in deinem Link werde ich mir morgen vornehmen. Danke erstmal! Jürgen

Re: Parameter von Formular an Formular übergeben

Verfasst: Di, 18.09.2012 20:59
von F3K Total
Hi,
juetho hat geschrieben:Verstehe ich das richtig, dass ich nach dem open-Befehl noch mehr...
Ja, wenn Du die Formularkomponente selber in eine Object-Variable, z.B. so: (aus dem Kopf, mit Xray kannst Du selber schauen):

Code: Alles auswählen

oformcomponent2 = ThisDatabaseDocument.FormDocuments.getByName( "Formular2" ).open
oForm2 = oformcomponent2.drawpage.forms.MainForm
... 
schreibst.
Edit: Habe es probiert, der Code geht.
Gruß R

Re: Parameter von Formular an Formular übergeben

Verfasst: Do, 20.09.2012 18:56
von juetho
Habe es übernommen und angepasst - funktioniert wunschgemäß! :D Danke vielmals für die Hilfe (und indirekt auch DPunch)! Damit spätere Leser nicht so viel blättern müssen, fasse ich hier nochmals zusammen (mit einigen Erläuterungen):

Code: Alles auswählen

Sub CallOrderForm( oEvent as Object )
rem **************************************
rem Formular:      fibu.MainForm
rem Kontrollfeld:  btnOrder
rem Aufruf durch:  Ereignis "Aktion ausführen"
rem --------------------------------------
rem Das Formular Order/Objects wird gestartet.
rem Dabei wird die aktuelle Adr-Nr. übergeben und angezeigt.
rem *****************************************

Dim adrForm as Object
Dim newForm as Object
Dim adrID as Integer
Als Kopf der Routine.

Code: Alles auswählen

adrForm = oEvent.Source.Model.Parent
adrID = adrForm.getInt(1)
Zugriff auf das ursprüngliche Formular: Auslöser (Source) des Ereignisses ist der Button; der liegt (Model) innerhalb (Parent) eines bestimmten Formulars. Hole die ID aus der ersten Spalte (grrrh, Nummerierung ab 1 und nicht ab 0 beachten).

Code: Alles auswählen

newForms = thisDatabaseDocument.FormDocuments.getByName("fibu.Orders_Objects").open
Erzeuge das neue Formular. Rückgabewert der Funktion open() ist das gesamte Writer-Dokument, dessen Elemente im folgenden Code angesprochen werden können (vorher existieren drawpage und alle eingebetteten Objekte noch nicht).

Code: Alles auswählen

newForm = newForms.drawpage.forms.MainForm
newForm.Filter = "fibu.bk_order.kd_id = " + adrID
newForm.reload()
newForm.txtKunde.Label = "Kd.-Nr. " + CStr(adrForm.getInt(2)) + " " + adrForm.getString(4)
Setze im neuen Formular den Filter, lade die Daten dazu und zeige zusätzlich Informationen zum Kunden an (Nummer, Name u.a.)

Und wieder ist ein Schritt erledigt. Jürgen