❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[Nicht ganz GELÖST]Automatisch auf den neuen Datensatz springen
[Nicht ganz GELÖST]Automatisch auf den neuen Datensatz springen
Hallo zusammen,
ich habe mich gerade neu in diesem Forum angemeldet und bin daher für Hinweise dankbar, wie ich Beiträge und Fragen besser oder anders stellen könnte oder was sonst noch zu beachten wäre (hier bitte ich um etwas Nachsicht der erfahrenen Nutzer dieses Forums).
In Libreoffice benutze ich momentan vorrangig (und sehr gerne) die Datenbankanwendung, die ich beruflich zur Verwaltung von Dokumentationen einsetze und kontinuierlich um Funktionen erweitere. Vor dem Einsatz werden die Versionen von mir auf verschiedenen Betriebsystemen und in LO 4.4 sowie 5.0 getestet. Das ist vielleicht nicht notwendig, aber auf diese Weise und durch Herumprobieren versuche ich mehr über die Funktionalität zu lernen, da meine Kenntnisse bezgl. SQL und Basic noch recht begrenzt sind. Die Handbücher und Hilfedateien ziehe ich regelmäßig zurate.
Aktuell wünsche ich mir Unterstützung bei einer Funktion, die ich zuerst für eher einfach gehalten habe. Lösungsvorschläge, die ich dazu bislang gefunden habe, führten leider nicht zum gewünschten Ergebnis:
- Ein Formular("MainForm") enthält ein Unterformular ("SubForm") in Tabellendarstellung.
- Die zahlreichen Einträge im Unterformular sind nach Datum sortiert, bei Aufruf des Formulars soll der " grüne Zeiger" ganz unten auf dem neuen, leeren Datensatz stehen und eine sofortige Eingabe ermöglichen
- Alle anderen Datensätze sollen jedoch weiterhin angezeigt werden und können z.B. mit dem Mausrad durchsucht werden.
= Mit einer Schaltfläche und der Aktion "Neuer Datensatz" kann das im Formular zwar schnell erzeugt werden. Aber wie lässt sich das automatisch auslösen, ohne eine Schaltfläche zu benutzen?
Ich habe angenommen, dass die "Standart"Aktion in den Eigenschaften der Schaltfläche auch über einen simplem Befehl auslösbar wäre, habe dazu aber nichts gefunden. Makros mit verschiedenen gefundenen Lösungswegen (movetoInsertrow(), insertrow, .setfocus oder .last) habe ich allesamt nicht ans Laufen bekommen. Wie gesagt, ich vermute immer noch, dass es einen ganz einfachen Weg gibt... Kann mir jemand Tipps geben?
Vielen Dank im Voraus.
ich habe mich gerade neu in diesem Forum angemeldet und bin daher für Hinweise dankbar, wie ich Beiträge und Fragen besser oder anders stellen könnte oder was sonst noch zu beachten wäre (hier bitte ich um etwas Nachsicht der erfahrenen Nutzer dieses Forums).
In Libreoffice benutze ich momentan vorrangig (und sehr gerne) die Datenbankanwendung, die ich beruflich zur Verwaltung von Dokumentationen einsetze und kontinuierlich um Funktionen erweitere. Vor dem Einsatz werden die Versionen von mir auf verschiedenen Betriebsystemen und in LO 4.4 sowie 5.0 getestet. Das ist vielleicht nicht notwendig, aber auf diese Weise und durch Herumprobieren versuche ich mehr über die Funktionalität zu lernen, da meine Kenntnisse bezgl. SQL und Basic noch recht begrenzt sind. Die Handbücher und Hilfedateien ziehe ich regelmäßig zurate.
Aktuell wünsche ich mir Unterstützung bei einer Funktion, die ich zuerst für eher einfach gehalten habe. Lösungsvorschläge, die ich dazu bislang gefunden habe, führten leider nicht zum gewünschten Ergebnis:
- Ein Formular("MainForm") enthält ein Unterformular ("SubForm") in Tabellendarstellung.
- Die zahlreichen Einträge im Unterformular sind nach Datum sortiert, bei Aufruf des Formulars soll der " grüne Zeiger" ganz unten auf dem neuen, leeren Datensatz stehen und eine sofortige Eingabe ermöglichen
- Alle anderen Datensätze sollen jedoch weiterhin angezeigt werden und können z.B. mit dem Mausrad durchsucht werden.
= Mit einer Schaltfläche und der Aktion "Neuer Datensatz" kann das im Formular zwar schnell erzeugt werden. Aber wie lässt sich das automatisch auslösen, ohne eine Schaltfläche zu benutzen?
Ich habe angenommen, dass die "Standart"Aktion in den Eigenschaften der Schaltfläche auch über einen simplem Befehl auslösbar wäre, habe dazu aber nichts gefunden. Makros mit verschiedenen gefundenen Lösungswegen (movetoInsertrow(), insertrow, .setfocus oder .last) habe ich allesamt nicht ans Laufen bekommen. Wie gesagt, ich vermute immer noch, dass es einen ganz einfachen Weg gibt... Kann mir jemand Tipps geben?
Vielen Dank im Voraus.
Zuletzt geändert von Shel am Mo 23. Mai 2016, 18:06, insgesamt 3-mal geändert.
Re: Automatisch auf den neuen Datensatz springen
kopier' mal eines Deiner Makros hier in einen Codeblock - dann geht's vermutlich am schnellsten.
Prinzipiell: Wenn Du ein Main- und ein SubForm hast gibt's mit der Bestimmung des neuen Sub-Satzes ein logisches Problem, denn man muss ja vor dem Anlegen desselben wissen zu welchem übergeordneten Satz er gehört.
Prinzipiell: Wenn Du ein Main- und ein SubForm hast gibt's mit der Bestimmung des neuen Sub-Satzes ein logisches Problem, denn man muss ja vor dem Anlegen desselben wissen zu welchem übergeordneten Satz er gehört.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Automatisch auf den neuen Datensatz springen
Hallo *,
ich habe das eben einmal mit der Beispieldatenbank "Sport" aus dem Handbuch umgesetzt:
Makro mit MoveToInstertRow an das Tabellenkontrollfeld des Unterformulars gebunden. Dort auf die Eigenschaft "Bei Fokuserhalt".
Eine Bug bei dem automatischen Kontrollelementefokus führt dazu, dass der Fokus nicht automatisch zum ersten Feld des Hauptformulars springt. Beim Öffnen des Formulars steht stattdessen der Cursor direkt in dem Tabellenkontrollfeld und dort jetzt zur Eingabe bereit. Da sich aber beim Datenwechsel zum nächsten Datensatz der Cursor dort gar nicht erst raus bewegt, springt das Makro nicht an. Sobald der Weg aus dem Hauptformular ins Unterformular gegangen wird, ist dies aber wieder der Fall.
Gruß
Robert
ich habe das eben einmal mit der Beispieldatenbank "Sport" aus dem Handbuch umgesetzt:
Makro mit MoveToInstertRow an das Tabellenkontrollfeld des Unterformulars gebunden. Dort auf die Eigenschaft "Bei Fokuserhalt".
Eine Bug bei dem automatischen Kontrollelementefokus führt dazu, dass der Fokus nicht automatisch zum ersten Feld des Hauptformulars springt. Beim Öffnen des Formulars steht stattdessen der Cursor direkt in dem Tabellenkontrollfeld und dort jetzt zur Eingabe bereit. Da sich aber beim Datenwechsel zum nächsten Datensatz der Cursor dort gar nicht erst raus bewegt, springt das Makro nicht an. Sobald der Weg aus dem Hauptformular ins Unterformular gegangen wird, ist dies aber wieder der Fall.
Gruß
Robert
- Dateianhänge
-
- Beispiel_Sport.odb.zip
- Sprung zur Neueingabe im Unterfromular
- (38.16 KiB) 195-mal heruntergeladen
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Automatisch auf den neuen Datensatz springen
Hallo gogo,
vielen Dank für die Antwort!
Mit einer Schaltfläche geht es problemlos. Als ich spaßeshalber versucht habe die Schaltfläche per Makro zu aktivieren, wurde der Fokus seltsamerweise auf den 1. Datensatz gesetzt. Geht so etwas nicht?
vielen Dank für die Antwort!
Ich habe meine erfolglosen Versuche dummerweise nicht aufbewahrt. Einer der Versuche, den ich mir ohnehin aus verschiedenen Quellen zusammengesucht hatte, sah aber ähnlich aus wie das Beispiel von Robert. Leider zeigt auch das keine Wirkung und ich bin ratlos.gogo hat geschrieben:kopier' mal eines Deiner Makros hier in einen Codeblock - dann geht's vermutlich am schnellsten.
Das kann ich nachvollziehen. Allerdings habe ich bei Aufruf des Formulars den übergeordneten Satz per Filter auf einen Eintrag begrenzt und das Subformular ist ja mit dem Mainformular verbunden (z.B. so: WHERE Tabelle1.ID = Tabelle2.ID). Würde das Problem da immer noch bestehen?gogo hat geschrieben:Prinzipiell: Wenn Du ein Main- und ein SubForm hast gibt's mit der Bestimmung des neuen Sub-Satzes ein logisches Problem, denn man muss ja vor dem Anlegen desselben wissen zu welchem übergeordneten Satz er gehört.
Mit einer Schaltfläche geht es problemlos. Als ich spaßeshalber versucht habe die Schaltfläche per Makro zu aktivieren, wurde der Fokus seltsamerweise auf den 1. Datensatz gesetzt. Geht so etwas nicht?
Re: Automatisch auf den neuen Datensatz springen
Hallo Robert,
herzlichen Dank für die Antwort und das Beispiel!
herzlichen Dank für die Antwort und das Beispiel!
Das sieht für mich nach der einfachen Lösung aus, die ich vermutet habe.RobertG hat geschrieben:Hallo *,
ich habe das eben einmal mit der Beispieldatenbank "Sport" aus dem Handbuch umgesetzt:
Makro mit MoveToInstertRow an das Tabellenkontrollfeld des Unterformulars gebunden. Dort auf die Eigenschaft "Bei Fokuserhalt".
Nach einigen Versuchen konnte ich das nachvollziehen. Die gewünschte Funktion wird offenbar ausgeführt, sobald irgendwo ins Unterformular geklickt wird. Als ich das Makro mit der Eigenschaft "Maus innerhalb" verbunden habe, habe ich das Ziel fast erreicht. Die neue Zeile ist ausgewählt - jetzt muss nur noch der Cursor im ersten Feld (in dem Fall ein Datumsfeld) blinken, und ich könnte sofort schreiben. Bislang müsste der Nutzer noch einmal klicken. Lässt sich das noch umgehen?RobertG hat geschrieben:Eine Bug bei dem automatischen Kontrollelementefokus führt dazu, dass der Fokus nicht automatisch zum ersten Feld des Hauptformulars springt. Beim Öffnen des Formulars steht stattdessen der Cursor direkt in dem Tabellenkontrollfeld und dort jetzt zur Eingabe bereit. Da sich aber beim Datenwechsel zum nächsten Datensatz der Cursor dort gar nicht erst raus bewegt, springt das Makro nicht an. Sobald der Weg aus dem Hauptformular ins Unterformular gegangen wird, ist dies aber wieder der Fall.
Re: Automatisch auf den neuen Datensatz springen
Das Setzen des Fokus muss man in LO/AOO über den Controller machen, dafür gibt es die Methode .getControl([Kontrollelement-Objekt]).setFocus
Folgendes Makro wird funktionieren:
Das Makro an die Eigenschaft "Dokument öffnen" des Formulars (Extras/Anpassen/Ereignisse) binden! dann wird beim Öffnen des Base-Formulars der Fokus gesetzt.
Folgendes Makro wird funktionieren:
Code: Alles auswählen
Sub LastOnOpen(oEvent AS OBJECT)
' ermittelt das Unterformular und geht dort zum neuen Datensatz
oSubform = oEvent.Source.DrawPage.Forms.getByName("MainForm").getbyname("SubForm")
oSubform.MoveToInsertRow
' nun kann man sehen, dass im Tabellen-Grid der Datensatzzeiger am neuen Datensatz steht, der Focus (also der Cursor)
' steht aber noch immer in Feld #1 des MainForm. Daher muss der Dokumentencontroller den Fokus versetzen:
' Das ist das TabellenSteuerelement
oGrid = oSubform.getByName("SubForm_Grid")
' hier wird der Focus in das Grid des SubForms gesetzt:
oEvent.Source.CurrentController.getControl(oGrid).setFocus
end Sub
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Automatisch auf den neuen Datensatz springen
Hallo gogo,gogo hat geschrieben:Das Setzen des Fokus muss man in LO/AOO über den Controller machen, dafür gibt es die Methode .getControl([Kontrollelement-Objekt]).setFocus
vielen Dank für den Hinweis. Das Problem ist gelöst. Der funktionierende Code ist folgender:
Code: Alles auswählen
Sub Last(oEvent AS OBJECT)
oForm = oEvent.Source.Model.Parent
oForm.MoveToInsertRow
Grid = ThisComponent.drawpage.forms.MainForm.SubForm.SubForm_Grid
oControlView = ThisComponent.CurrentController.GetControl(Grid)
oControlView.SetFocus
oControlView.setCurrentColumnPosition(0)
End Sub
PS: Wie kann ich diese Anfrage als "Gelöst" kennzeichnen?
Re: Automatisch auf den neuen Datensatz springen
Hallo Shel,
als "Gelöst" kannst Du das kennzeichnen, indem Du Deinen Startbeitrag bearbeitest - dort einfach in den Betreff ändern.
Übrigens:
Grid in Deiner Lösung dürfte gleich sein oEvent.Source.Model.
Gruß
Robert
als "Gelöst" kannst Du das kennzeichnen, indem Du Deinen Startbeitrag bearbeitest - dort einfach in den Betreff ändern.
Übrigens:
Grid in Deiner Lösung dürfte gleich sein oEvent.Source.Model.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Automatisch auf den neuen Datensatz springen
Hallo RobertG,
herzlichen Dank für die Hilfe!
Das Beispiel hat mich viel weiter gebracht.
herzlichen Dank für die Hilfe!
Das Beispiel hat mich viel weiter gebracht.
Das hatte ich auch probiert, hat aber eine Fehlermeldung hervorgebracht, "Methode nicht gefunden".RobertG hat geschrieben: Übrigens:
Grid in Deiner Lösung dürfte gleich sein oEvent.Source.Model.
Re: [GELÖST]Automatisch auf den neuen Datensatz springen
Kommt drauf an an welchem Ereignis welches Objekts das Makro hängt.
Wenn es am Dokument hängt, musst Du in der "Drawpage" zuerst das Mainform und dann das Subform suchen.
Wenn es am Subform hängt, bekommst Du das Grid dort direkt.
Prinzipiell ist es besser das Makro an das Dokument zu binden, da dann das Ereignis auch wirklich nur beim Öffnen des Formularfensters stattfindet.
Um rauszufinden wo man gerade ist haben sich Tools wie XRay oder MRI bewährt
Wenn es am Dokument hängt, musst Du in der "Drawpage" zuerst das Mainform und dann das Subform suchen.
Wenn es am Subform hängt, bekommst Du das Grid dort direkt.
Prinzipiell ist es besser das Makro an das Dokument zu binden, da dann das Ereignis auch wirklich nur beim Öffnen des Formularfensters stattfindet.
Um rauszufinden wo man gerade ist haben sich Tools wie XRay oder MRI bewährt
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.