Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


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




Am 21.06.2017 um 22:43 schrieb Gerhard Weydt:
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 >>>> >>>> Am 21.06.2017 um 09:02 schrieb Gerhard Dittrich: >>>>> Guten 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

--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.