Vielen Dank für Deine Infos, Gerhard
Wunderbar, nun werden beide Dokumente bei der Änderung des einen Dokuments aktualisiert.
Ja, hier die Grundstrukter. Ja, richtig: Die Feinheiten, wie Repositionieren, sind als nächster Schritt erforderlich.
Grüße
Gerhard
Der Makro in seiner Grundstruktur, wie er nun läuft.
SUB Reload_aAnmeldung
DIM oDoc1 AS OBJECT 'Document 1
DIM oDoc2 AS OBJECT 'Document 2
DIM oDrawpage AS OBJECT
DIM oDATEN AS OBJECT
DIM oForm AS OBJECT
oDATEN = thisComponent.Drawpage.Forms.DATEN
oDATEN.reload() 'reload Document 1
oForm = thisComponent.Parent.FormDocuments
oDoc2 = oForm.getByName("aAnmeldung_Tab").open 'Document 2
oDATEN = oDoc2.Drawpage.Forms.DATEN 'reload Document 2
oDATEN.reload() 'reload Document 2
WAIT 50
oForm.getByName("aAnmeldung").open 'Document 1 wieder als aktives Document auf dem Bildschirm als unmittelbare Ansicht
End Sub
Hallo Gerhard, > > Schnipsel sind insbesondere in Base nicht ganz einfach zu liefern,
> weil da doch die Daten- und Dokumentstruktur mit reinspielt. Ich habe > den folgenden Code an einem Beispiel, das ich sowieso hatte, > ausprobiert. Das enthielt zwei nahezu identische Formular-Dokumente. > Ich nenne so, um Missverständnisse zumindest zu erschweren, das, was > man als "Formular" im Base-Dokument aufruft - in Übereinstimmung mit > der Nomenklatur in UNO: FormDocuments - und was, je nach dem, was man > dann definiert, sich auf viele Tabellen beziehen kann, im Gegensatz > zum Formular innerhalb eines Formular-Dokuments, das genau auf eine > Tabelle (Ansicht, Abfrage) bezogen ist. In diesem Sinn willst du ein > zweites Formular-Dokument aktualisieren, wenn ein erstes verwaltet > wird (was natürlich, wie in deinem Fall, nur sinnvoll ist, wenn es > Überschneidungen in den angezeigten Tabellen gibt). Meine zwei > Formular-Dokumente haben mehrere Formulare, die in einer Hierarchie > zueinander stehen, aber das ist für den Effekt unerheblich, ich habe > nur die Änderung des obersten Formulars (das ein > Tabellen-Kontrollelement für die zugehörige Tabelle enthält) > behandelt, die durch den Code die erneuerte Anzeige des obersten > Formulars des anderen Formulardokuments auslöste (was im Beispiel > wiederum ein formal identisches Tabellenkontrollelement ist). Das > Makro habe ich mit dem Ereignis "Nach der Datensatzaktion" des > obersten Formulars verknüpft. > > Sub RefreshSecondForm (evt as object) > > dim oDoc as object, oDBDoc as object, oSecondFormDoc as object, > mainForm as object > > oDoc = ThisComponent oDBDoc = oDoc.Parent oSecondFormDoc = > oDBDoc.FormDocuments.getByName("???1").open 'activates form doc, if > already open mainForm = oSecondFormDoc.DrawPage.Forms.getByIndex(0) > 'or getByName("???2") mainForm.reload > > end sub > > Der Parent des Formular-Dokuments, in dem die Änderung passiert, ist > das Base-Dokument, das weitere Formular-Dokumente enthält, aus denen > wir dasjenige wählen, das wir aktualisieren wollen. Das Dok. wird > "geöffnet", was bei einem bereits geöffneten nur die Auswahl des > Objekts bedeutet. Dann können wir wie gewohnt das Fomular wählen - im > Code über den Index, weil es nur ein oberstes gibt. reload erneuert > die Anzeige. Da gibt es sicher noch ein paar Dinge zu überlegen, die > aber von der konkreten Struktur deiner beiden Formular-Dokumente > abhängen, die ich ja nicht kenne. Beispielsweise könnte bei einem > aufwändigeren Formular-Dokument die Änderung auch nur in einem > Unterformular passieren, dann müsste da beim gleichen Ereignis im > Unterformular ein ähnlicher Code aufgerufen werden, der aber dann > wohl ein anderes Formular im sekundären Formular-Dokument reloaden > müsste. Der Befehl reload beginnt mit der Anzeige wieder beim ersten > Satz, egal wie im sekundären Formular-Dokument gerollt war und wo der > Cursor stand. Man könnte, denke ich, das Formular auch wieder so > positionieren wie vor dem Reload, wenn man sich die Position merkt, > aber das habe ich nicht ausprobiert. Es könnte auch einen Unterschied > bedeuten, wenn das Formular im sekundären Formular-Dokument nur einen > einzelnen Satz anzeigt, da könnte das Repositionieren noch wichtiger > sein. Das wirst du sicher selber lösen können, du scheinst ja doch > einiges auf diesem Gebiet zu wissen. Übrigens: dein > > oDATEN = thisComponent.Drawpage.Forms.DATEN > > kann ja wohl kein echter Befehl sein, sondern nur exemplarisch > gemeint. DATEN gibt es unter ...Forms nicht, und wenn, müsste es ja > wohl eine einzelne Form sein, zu der es Daten gibt. > > Wenn du das Beispiel-Dokument haben willst, melde dich, ich schicke > es dir dann direkt, in der Liste kann man keine Anhänge verwenden. > > Gruß > > Gerhard > > Am 21.06.2017 um 13:44 schrieb Gerhard Dittrich: >> Vielen Dank, Gerhard für Deine Hinweise! >> >> Hast Du vielleicht ein Code-Schnipsel parat, so dass ich versuchen >> kann, den "Weg" anhand des Code-Schnipsels zu rekonstruieren? >> >> Grüße Gerhard >> >> >> >> Am 21.06.2017 um 11:21 schrieb Gerhard Weydt: >>> Hallo Gerhard, >>> >>> was ich vergessen habe: anschließend das Formulardokument mit >>> getByName("xxx").open aktivieren, dann hast du den Zugriff. >>> >>> Am 21.06.2017 um 10:36 schrieb Gerhard Weydt: >>>> Hallo Gerhard, >>>> >>>> über ThisComponent.Parent.FormDocuments kannst du auf die >>>> anderen Formulardokumente zugreifen. Ich benutze immer Xray, um >>>> so etwas zu finden, und probiere einfach vielversprechende >>>> Eigenschaften und Methoden aus. >>>> >>>> Gruß >>>> >>>> Gerhard Morgen, >>>>> >>>>> ich arbeite mit Base. >>>>> >>>>> Zwei Formulare sind geöffnet. Diese beiden Formulare greifen >>>>> auf den selben Datenbestand zu, nur anders dargestellt. >>>>> >>>>> Ändere ich in dem einen (ERSTEN) Formular Daten, und klicke >>>>> in der Menü-Leiste ich auf das andere (ZWEITE) bereits in der >>>>> Anwendung geöffnete Formular, rückt es als aktives in den >>>>> Vordergrund). Die Daten werden jedoch nicht aktualisiert >>>>> dargestellt. (Ich müsste also zusätzlich einen >>>>> AKTUALISIEREN-BUTTON im ZWEITEN Formular klicken). Einfach >>>>> wäre es, wenn ich im Rahmen der Datenmanipulation im ERSTEN >>>>> Formular (diese läuft über ein Dialogfenster) zugleich per >>>>> Makro anweisen könnte, dass das nicht aktive Formular >>>>> ebenfalls aktualisiert wird. >>>>> >>>>> Dazu müsste ich aber das NICHT-AKTIVE ZWEITE Formular >>>>> ansteuern können. >>>>> >>>>> Ich kenne aber nur den Befehl "thisComponent". Dieser führt >>>>> natürlich nur auf das aktive ERSTE Formular. >>>>> >>>>> Bei mir zum Beispiel: oDATEN = >>>>> thisComponent.Drawpage.Forms.DATEN >>>>> >>>>> Natürlich könnte ich das ZWEITE Formular per Makro schließen >>>>> lassen und dann wieder öffnen. Dann würde das ZWEITE Formular >>>>> automatisch aktualisiert. Diesen Weg möchte ich aber nicht >>>>> beschreiten. >>>>> >>>>> >>>>> Grüße Gerhard Dittrich >>>>> >>>> >>>> >>> >>> >> >> > >
e