❤️ 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. 🌱


❤️ DANKE >> << DANKE ❤️

>> 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

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Shel
Beiträge: 17
Registriert: Do 19. Mai 2016, 17:51

[Nicht ganz GELÖST]Automatisch auf den neuen Datensatz springen

Beitrag von Shel » Do 19. Mai 2016, 19:18

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.
Zuletzt geändert von Shel am Mo 23. Mai 2016, 18:06, insgesamt 3-mal geändert.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Automatisch auf den neuen Datensatz springen

Beitrag von gogo » Fr 20. Mai 2016, 16:20

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.
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

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Automatisch auf den neuen Datensatz springen

Beitrag von RobertG » Fr 20. Mai 2016, 19:45

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
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

Shel
Beiträge: 17
Registriert: Do 19. Mai 2016, 17:51

Re: Automatisch auf den neuen Datensatz springen

Beitrag von Shel » Fr 20. Mai 2016, 21:44

Hallo gogo,

vielen Dank für die Antwort!
gogo hat geschrieben:kopier' mal eines Deiner Makros hier in einen Codeblock - dann geht's vermutlich am schnellsten.
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: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.
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?
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?

Shel
Beiträge: 17
Registriert: Do 19. Mai 2016, 17:51

Re: Automatisch auf den neuen Datensatz springen

Beitrag von Shel » Fr 20. Mai 2016, 21:59

Hallo Robert,

herzlichen Dank für die Antwort und das Beispiel!
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".
Das sieht für mich nach der einfachen Lösung aus, die ich vermutet habe.
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.
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?

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Automatisch auf den neuen Datensatz springen

Beitrag von gogo » Sa 21. Mai 2016, 01:56

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:

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
Das Makro an die Eigenschaft "Dokument öffnen" des Formulars (Extras/Anpassen/Ereignisse) binden! dann wird beim Öffnen des Base-Formulars der Fokus gesetzt.
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

Shel
Beiträge: 17
Registriert: Do 19. Mai 2016, 17:51

Re: Automatisch auf den neuen Datensatz springen

Beitrag von Shel » Sa 21. Mai 2016, 08:35

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
Hallo gogo,
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
Danke noch mal an alle!
PS: Wie kann ich diese Anfrage als "Gelöst" kennzeichnen?

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Automatisch auf den neuen Datensatz springen

Beitrag von RobertG » Sa 21. Mai 2016, 09:00

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
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

Shel
Beiträge: 17
Registriert: Do 19. Mai 2016, 17:51

Re: Automatisch auf den neuen Datensatz springen

Beitrag von Shel » Sa 21. Mai 2016, 11:49

Hallo RobertG,

herzlichen Dank für die Hilfe!
Das Beispiel hat mich viel weiter gebracht.
RobertG hat geschrieben: Übrigens:
Grid in Deiner Lösung dürfte gleich sein oEvent.Source.Model.
Das hatte ich auch probiert, hat aber eine Fehlermeldung hervorgebracht, "Methode nicht gefunden".

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: [GELÖST]Automatisch auf den neuen Datensatz springen

Beitrag von gogo » Sa 21. Mai 2016, 13:24

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
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


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.



Antworten