[gelöst] Dialog Aktivierungsreihenfolge fehlerhaft

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

[gelöst] Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Liebes Forum,

ich habe ein Calc-Dokument, in das verschiedene Eingaben über einen Dialog gemacht werden.
Die Ansteuerung der einzelnen Dialogfelder hat in bisherigen Projekten leidlich geklappt - manchmal muss ich Dialoge komplett neu basteln, weil die Aktivierungsreihenfolge irgendwie rumspinnt.

Jetzt weigert sich eine Eingabemaske beharrlich, die meiner Meinung nach korrekt angelegte Aktivierungsreihenfolge anzunehmen. Die anzusteuernden Elemente haben die Aktivierungswerte 1 (numerisch), 3 (numerisch), 5 (numerisch), 8 (Currancy) und 10 (Command-Button). Die übrigen Werte (0, 2, 4, 6, 8, 9) sind Labels und Rahmen.
Der Cursor/Tab-Stop steuert erst 8 an, danach 10, 1, 3 und 5.

Ich habe den Dialog schon mehrfach gelöscht und neu erstellt extra in der Reihenfolge, wie später die Elemente angesteuert werden sollen. Die Ansteuerungs-Reihenfolge bleibt dieselbe.
Auch Libre Office oder den Computer neu zu starten sowie eine Neuinstallation von Libre Office hat nichts gebracht.
Ich habe auch ausprobiert, das Currancy-Feld als numerisches Feld einzufügen - hätte ja sein können, dass es irgendwie damit zu tun hat. Aber das ist es auch nicht.

Hat jemand eine Idee, woran es liegen könnte?
Oder eventuell gibt es ja eine Möglichkeit, die Ansteuerung im Sub festzulegen - vielleicht klappt das besser.

Ich wäre sehr dankbar für Hinweise und bedanke mich dafür, dass du bis hier unten durchgehalten hast ;-P!

Lieben Gruß in die Gemeinde von
Julia
Zuletzt geändert von Julia NuN am Fr, 09.12.2016 18:50, insgesamt 1-mal geändert.
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Hallo Julia,

was sagt uns denn "Aktivierungsreihenfolge"?

Ganz einfach.
Egal um was für ein Element es sich handelt, es wird der Reihenfolge nach aktiviert wie die Aktivierungsreihenfolge eingegeben wurde.
Das heißt, wenn ein Button die Aktivierungsreihenfolge-Nr. (Kurz: ArNr) 1 hat, ein Label 2, ein Textfeld 3 und ein Währungsfeld 4 hat, dann wird z.B. nach druck der Tab-Taste, wenn man sich im Textfeld befindet, zum Währungsfeld gesprungen. Beim nächsten Tab druck gehts zum Button, dann zum Label usw. etc...


Die übrigen Werte (0, 2, 4, 6, 8, 9) sind Labels und Rahmen.
Da Du dort im Dialog nichts eingeben willst, beziehungsweise eingeben kannst, sagst Du ganz einfach:
Tabstop...... NEIN
Jedes Element welches Du im Dialog nicht bearbeiten kannst oder willst, deaktivierst Du den Tabstop wie gezeigt. Dadurch musst Du dann wohl alle anderen aktivierbaren Elemente eine neu ArNr zuordnen, aber danach sollte es eigentlich schon gehen.

Und wenn Du Pech haben solltest, dann müssen zuerst ALLE Elemente eine neue ArNr bekommen, wobei die nicht benötigten eine höhere kriegen wie die maximal anzuspringenden Elemente.

Beispiel:
Du hast 20 Elemente, wobei 5 nicht angesprungen werden sollen. Diesen 5 gibst Du beispielsweise die ArNr 516 - 520.
Anschließend deaktivierst Du die diese 5 (516 - 520) durch Tabstop...... NEIN.
Jetzt Nummerierst Du die übbrigen 15 so Durch wie Du sie haben willst.
Das hat den Vorteil das Du nachträglich noch jede Menge an Elementen einfügen kannst, die wohl Nahtlos bei den Aktiven anzusetzen sind, aber nicht bis zu den deaktivierten kommen.

Wenn das nicht hilft, dann müsstest Du eine Beispieldatei hier anhängen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Hallo balu,

ich danke dir für deine Ausführungen.
Ich scheu mich ein wenig, die Datei hochzuladen, da mir noch recht viel Grundlagenwissen fehlt und sie gar nicht fertig oder aufgeräumt ist...
Aber ich mach´s trotzdem. Es handelt sich um ein Calc-Dokument zur Artikeleingabe in unserer Kneipe - quasi eine Kasse.
Die Belegung der Ansteuerung ist jetzt nicht mehr wie in meinem ersten Beitrag, weil ich deinen Vorschlag mit der Neunummerierung umgesetzt habe. Das hat aber nichts gebracht.
Es geht um den Dialog "Dlg_Flaschen". Es wird immer "Preis" zuerst angesteuert. Es könnte mit dem Namen zusammenhängen, denn wenn ich "Preis" nach oben setze und umbenenne und ein anderes Eingabefeld nach unten und es ebenfalls umbenenne (in "Preis"), wird wieder "Preis" (jetzt unten) zuerst angesteuert.
Eine Fehlerquelle in diesem Zusammenhang könnte sein, dass es in einem anderen Modul/Dialog auch das Element "Preis" gibt (nee, nä?). Nur so eine Idee.
Hhhm, etwas verworren, das.
Der Dialog wird aufgerufen durch den Button "Artikel eingeben" und dann "Verkauf ganzer Flaschen".
Das zugehörige Modul heißt "Flaschenverkauf".

Wenn du da mal reingucken würdest oder auch jemand anders, wär das echt lieb.
Dankeschön schonmal!
Julia
Dateianhänge
POS_Kassenbuch_Forum.ods
(131.23 KiB) 261-mal heruntergeladen
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Hallo Julia,
Ich scheu mich ein wenig, die Datei hochzuladen, da mir noch recht viel Grundlagenwissen fehlt und sie gar nicht fertig oder aufgeräumt ist...
Nur keine Panik. Niemand verlangt das man ein ausgebildeter Meister in der Makro Programmierung ist. Denn wenn dem so wäre könnten wir hioer die Bude ja dicht machen :lol:

Das dir noch einiges an Grundlagenwissen fehlt habe ich gesehen, und werde gleich mal etwas dagegen tun. Und dazu fangen wir gleich am Anfang des Makros an.

Code: Alles auswählen

Dim Ctl_Artikelnummer, Ctl_Anzahl, Ctl_Rabatt, Ctl_Preis as Object
Auch wenn es bei den Elementen in Dialogen nicht ganz so schlimm ist, solltest Du diese Art der Variablen Deklaration in StarBasic grundsätzlich vermeinden, egal ob es sich um Elemente in einem Dialog oder um einfache Stringvariablen oder sonstiges handelt. Jede zu deklarierende Variable muss mit ihrem dazugehörigen Typ einzeln deklariert werden. Macht man dies nicht, so wird der Variablen automatisch der Typ VARIANT zugewiesen, was mit unter später einmal zu größeren nicht zu verstehenden Problemen führen kann.

Also richtig wäre jetzt folgendes.

Code: Alles auswählen

Dim Ctl_Artikelnummer as Object, Ctl_Anzahl as Object, Ctl_Rabatt as Object, Ctl_Preis as Object
Ach ja, da fällt mir grad eben ein, das ich es durchaus gesehen habe das die Datei einen Excel Hintergrund hat. Ich weiß blos nicht ob sie zwischenzeitlich mal in Excel bearbeitet wurde, oder dort sogar erstellt wurde. Aber um noch weitere Komplikationen auszuschließen würde ich zu sehen das die Datei keinen Kontakt mehr mit Excel hat, weil hier schon einige male von Problemen berichtet wurden die genau damit zu tun hatten. Und deshalb mein Rat, auch wenn es nervt und schmerzt; komplett neu machen und dann einen großen Bogen um Excel machen.

NEIN! Ich will Excel nicht schlecht reden oder madig machen, das liegt mir fern, sondern nur auf Probleme hinweisen die durchaus entstehen können.

Nächster Teil.

Du hast

Code: Alles auswählen

	DialogLibraries.loadLibrary("Standard") 
	oForm = DialogLibraries.Standard.Dlg_Artikel
	Dlg_Artikel = CreateUnoDialog(oForm)
was so auf den ersten Blick zu funktionieren scheint. Aber man kann es auch ein wenig übersichtlicher gestalten, was dann so aussieht.

Code: Alles auswählen

    
    DialogLibraries.loadLibrary("Standard")
    Dlg_Artikel= CreateUnoDialog(DialogLibraries.Standard.Dlg_Artikel)
 
Ist wohl Geschmacksache, aber dennoch schlage ich das mal vor.


Weiter.
Es geht um den Dialog "Dlg_Flaschen". Es wird immer "Preis" zuerst angesteuert. Es könnte mit dem Namen zusammenhängen, denn wenn ich "Preis" nach oben setze und umbenenne und ein anderes Eingabefeld nach unten und es ebenfalls umbenenne (in "Preis"), wird wieder "Preis" (jetzt unten) zuerst angesteuert.
Ach Du meinst mit "Preis" das Element welches der Variablen Ctl_Preis zugewiesen wird. Sorry, aber aus diversen Gründen habe ich momentan ein Knick in meinem Hirn (hat nix mit dir zu tun). :roll:

Eine Fehlerquelle in diesem Zusammenhang könnte sein, dass es in einem anderen Modul/Dialog auch das Element "Preis" gibt (nee, nä?). Nur so eine Idee.
Wegen meinem besagtem Knick, sage ich das jetzt mal so.
Nicht richtig, nicht falsch, aber es scheinen da noch andere Faktoren eine Rolle zu spielen. Wobei deine Vermutung "anderes Modul" ein wichtige Rolle spielt.

Oh je! Jetzt muss ich doch wieder etwas weiter ausholen.

Also etwas allgemeines.
Die Ablaufsteuerung von Dialogen muss man sich erstmal verinnerlichen. Sie kann manchmal voller Tücken sein.
Du rufst so gesehen ein "Hauptdialog" auf -{Dlg_Artikel}-, und von dort rufst Du dann wieder verschiedene Einzeldialoge auf: Dlg_Flaschen, Dlg_Korrektur ....
Jeder dieser Dialoge ist ein eigenständiger Dialog, der ja dementsprechend defeniert werden muss, was Du ja mit dem oben gezeigten Beispiel {mit meiner alternative} ja auch machst.

Jedoch deklarierst Du die einzelnen Dialoge in einem anderen Modul in einer eigenständigen Sub. Und das kann zu Problem führen, bei dieser vorgehensweise, da es vorkommen kann das die deklarationen und defenitionen noch gar nicht alle abgeschlossen sind, aber der Dialog schon so gesehen bereit steht. Und was noch viel schlimmer ist, einmal deklarierte Variablen werden wieder neu derklariert, und auch das kann problematisch werden.

Und deshalb schlage ich vor, das Du diese Konzept noch mal überarbeitest. Ich zeige dir wie ich das meine.

Als erstes werden ALLE Variablen im Hauptmodul *Artikel* deklariert.

Code: Alles auswählen

' Blatt'
Dim oSheet as Object

' Dialoge'
Dim Dlg_Artikel as Object, Dlg_EP as Object, Dlg_ID as Object, Dlg_Korrektur as Object
Dim Dlg_Flaschen as Object

' Elemente'
Dim Ctl_Artikelnummer as Object, Ctl_Anzahl as Object, Ctl_Rabatt as Object, Ctl_Preis as Object
Dim Ctl_ID as Object, Ctl_EP as Object, Ctl_Fuellmenge as Object

' Zahlen'
Dim End_Row as integer, ID as Integer, RowIndex as integer, End_Row as integer
Dim RefID as integer, Val_ID as integer, i as integer
Dim Val_Rabatt as Single, ID as integer

' Glaub kaum das dies gebraucht wird, das "Global..."
' Global ID as integer'
Das einfache Anführungszeichen ' heißt nix anderes als REM.

In den Modulen *Artikel_Korrektur* und *Flaschenverkauf* löscht Du die Variablen deklaration. Die brauchst Du dort nicht mehr, da sie jetzt in allen Modulen zur Verfügung stehen.


Nächster Schritt.
Anstatt in jedem Modul einen Dialog zu defenieren, werden jetzt alle Dialoge in der Sub Dlg_Neuer_Artikel im Modul *Artikel* defeniert.

Code: Alles auswählen

    DialogLibraries.loadLibrary("Standard")
    Dlg_Artikel= CreateUnoDialog(DialogLibraries.Standard.Dlg_Artikel)
    Dlg_ID = CreateUnoDialog(DialogLibraries.Standard.Dlg_ID)
    Dlg_Korrektur= CreateUnoDialog(DialogLibraries.Standard.Dlg_Korrektur)
    Dlg_EP = CreateUnoDialog(DialogLibraries.Standard.Dlg_EP)
    Dlg_Flaschen= CreateUnoDialog(DialogLibraries.Standard.Dlg_Flaschen)
 
Und nun noch die defenition der einzelnen Elemente.

Code: Alles auswählen

    Ctl_Artikelnummer = Dlg_Artikel.GetControl("Artikelnummer")
    Ctl_Anzahl = Dlg_Artikel.GetControl("Anzahl")
    Ctl_Rabatt = Dlg_Artikel.GetControl("Rabatt")
    Ctl_ID = Dlg_ID.GetControl("ID")
    Ctl_Artikelnummer = Dlg_Korrektur.GetControl("Artikelnummer")
    Ctl_Anzahl = Dlg_Korrektur.GetControl("Anzahl")
    Ctl_Rabatt = Dlg_Korrektur.GetControl("Rabatt")
    Ctl_EP = Dlg_EP.GetControl("Preis")
    Ctl_EP.setfocus()
[....]
 
Da mir gleich die Augen zufallen, mache ich an dieser Stelle jetzt nicht weiter, das machst Du.
Wichtig ist nur, das bevor der Dialog *Dlg_Artikel* durch Dlg_Artikel.execute ausgeführt wird, alle Variablen defeniert wurden.

Da die Variablen öffentlich deklariert wurden und in dieser Sub VOR dem Dialog ausführen auch defeniert wurden, stehen sie nun in jedem Modul zur Verfügung. Das heißt, sie dürfen nicht in den anderen Modulen erneut deklariert und defeniert werden, sonst gibts wieder Probleme.

Was mir grad eben noch aufgefallen ist, ist das hier, Beispielsweise.

Code: Alles auswählen

    Ctl_Anzahl.setfocus()
 
Du setzt den Fokus auf das "Numerische Feld"?
Und zwei Zeilen weiter.

Code: Alles auswählen

    Ctl_Rabatt.setfocus()
 
Und erst danach wird der Dialog ausgeführt.
Vermute ich richtig, das dies ein Überbleibsel von deinen Versuchen ist die Aktivierungsreihenfolge "auf die Reihe zu bekommen"?
Wenn ja, kann dies natürlich auch zu Problem führen. Denn bevor der Dialog ausgeführt wird, bekommen zwei unterschiedliche Elemente den Fokus nacheinander zugesprochen. Ich kann mir nicht vorstellen das Calc damit zu recht kommt. Also lösche das mal.

Wenn Du meine vorgeschlagenen Änderungen eingebaut hast, hänge dann das Ergebnis wieder hier an und berichte wie sich die datei verhällt. Vermutlich müssen wir noch ein paar Dinge abändern.
Ach ja, die geänderte Datei kannst Du dann auch entschlacken in dem Du die Blätter 1 bis 30 löscht.


Geh ins Bett
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

:o Oh maestro!!!
Da fehlen mir die Worte.
Sagen wir´s mal so: Im analogen Leben würde ich dir einen Kuchen backen und du bekämst Freibier auf Lebenszeit. Also, wenn du mal im hohen Norden bist, schick mir ne Nachricht.
Danke!!! :D
Jetzt bin ich erstmal ´ne Woche beschäftigt, schätze ich. Und dann lade ich die neue Datei hoch.
Ach ja, da fällt mir grad eben ein, das ich es durchaus gesehen habe das die Datei einen Excel Hintergrund hat.
Das wundert mich allerdings, wir haben auf keinem unserer Rechner Excel. Wie kann das sein?

Für´s Erste wünsche ich dir ordentlich auszuschlafen und dann einen schönen, erfolgreichen Tag!
Julia
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Moin moin, Julia.
Im analogen Leben würde ich dir einen Kuchen backen und du bekämst Freibier auf Lebenszeit.
Spar dir das für später mal auf. Denn bis jetzt habe ich doch nix gemacht, außer viel geredet, was ich leider sehr oft tue. ;-)

Ach ja, da fällt mir grad eben ein, das ich es durchaus gesehen habe das die Datei einen Excel Hintergrund hat.
Das wundert mich allerdings, wir haben auf keinem unserer Rechner Excel. Wie kann das sein?
Wie das sein kann?
Nun, das hatte ich vergessen gehabt zu erwähnen.
Es reicht wenn man die Datei zwischenzeitlich, oder gleich zu Anfangs als '.xls' speichert. Also auch das sollte tunlichst vermieden werden.


Also, wenn du mal im hohen Norden bist, schick mir ne Nachricht.
Ach ja! War ne schöne Zeit, damals als ich bei der Bundeswehr erst in Leer und dann in Delmenhorst-Adelheide war :-)

Danke für deine lieben Worte. Tut jedem Helfer immer wieder gut. :D



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Hallo balu,

gerade habe ich mich zum ersten Mal wieder an die Tabelle gesetzt und nach genauem Durchlesen deiner Vorschläge als erstes dies hier umgesetzt:
Was mir grad eben noch aufgefallen ist, ist das hier, Beispielsweise.

Code: Alles auswählen


    Ctl_Anzahl.setfocus()


Du setzt den Fokus auf das "Numerische Feld"?
Und zwei Zeilen weiter.

Code: Alles auswählen

   
    Ctl_Rabatt.setfocus()


Und erst danach wird der Dialog ausgeführt.
Vermute ich richtig, das dies ein Überbleibsel von deinen Versuchen ist die Aktivierungsreihenfolge "auf die Reihe zu bekommen"?
Wenn ja, kann dies natürlich auch zu Problem führen. Denn bevor der Dialog ausgeführt wird, bekommen zwei unterschiedliche Elemente den Fokus nacheinander zugesprochen. Ich kann mir nicht vorstellen das Calc damit zu recht kommt. Also lösche das mal.
Funzt! Der Fehler ist behoben!

Coool.....! :D

Ich glaub, ich hab das irgendwo so rauskopiert und angepasst. Aber tatsächlich keimte in meinem Hinterstübchen schonmal die Frage auf, was das soll, nach dem ersten auch alle anderen Eingabefelder anzusteuern, wenn doch schon im Dialog festgelegt ist, welches Feld als nächstes verarbeitet werden soll. Aber da es in den anderen Dialogen keine Probleme gab, hab ich das nicht mehr hinterfragt.

Ne, also damit kommt Calc offenbar wirklich nicht zurecht.

Ich meld mich wieder nach der Entrümpelung.

Grüße
Julia
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Hallo Julia,

dat is ja en Ding! :D
Da löst meine so nebenbei Bemerkung/Frage dein Hauptproblem. Ich hatte ja schon fast damit gerechnet, war mir aber mangels nicht vollzogener Tests auch nicht sicher. Schön das Du nun Erfolg melden kannst.

Die Eigenschaft setfocus wird wohl schon seine Daseinsberechtigung haben, denn sonst würde es sie ja nicht geben. Da ich sie aber bis jetzt nicht brauchte, kann ich auch nix weiter dazu sagen.

Ich meld mich wieder nach der Entrümpelung.
Tu das ruhig. Zeig uns dann aber auch bitte dein Ergebnis.
Du darfst dich aber auch ruhig hier melden wenn Du irgendwo nicht weiter kommst.

Bis dahin wünsche ich dir viel Spaß und Erfolg. :)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Hallo balu,

puuuh, gar nicht ohne...

Folgendes wirft neue Fragen auf:
Anstatt in jedem Modul einen Dialog zu defenieren, werden jetzt alle Dialoge in der Sub Dlg_Neuer_Artikel im Modul *Artikel* defeniert.

Code: Alles auswählen

    DialogLibraries.loadLibrary("Standard")
    Dlg_Artikel= CreateUnoDialog(DialogLibraries.Standard.Dlg_Artikel)
    Dlg_ID = CreateUnoDialog(DialogLibraries.Standard.Dlg_ID)
    Dlg_Korrektur= CreateUnoDialog(DialogLibraries.Standard.Dlg_Korrektur)
    Dlg_EP = CreateUnoDialog(DialogLibraries.Standard.Dlg_EP)
    Dlg_Flaschen= CreateUnoDialog(DialogLibraries.Standard.Dlg_Flaschen)
Das habe ich gemacht, und es funktioniert auch.
Jedoch behalten dadurch alle Dialoge die vorherigen Eingaben außer der Hauptdialog wird geschlossen und neu aufgerufen. Ich fände es aber schöner, wenn die Eingabefelder leer wären, zumal sie nicht markiert sind. Man müsste dann also erst die vorherige Eingabe extra löschen oder sich mit der Tab-Taste erneut dorthin bewegen - dann wäre das Feld ja auch markiert.
Wenn du hierfür eine Lösung kennst (Eingabefelder leeren), wäre das super.

Allerdings gibt es noch einen weiteren Stolperstein:

Ich denke, es würde bei der Definition der Dialoge s.o. Sinn ergeben, wenn auch der Titel im selben Zuge festgelegt würde. Also so:

Code: Alles auswählen

Dlg_Flaschen= CreateUnoDialog(DialogLibraries.Standard.Dlg_Flaschen)
Dlg_Flaschen.title = "Verkauf ganzer Flaschen mit Rabatt" 
Nun gibt es leider 2 Dialoge, bei denen im Titel Variablen aufgegriffen werden, z.B. so:

Code: Alles auswählen

Dlg_Korrektur = CreateUnoDialog(DialogLibraries.Standard.Dlg_Korrektur)
Dlg_Korrektur.title = "Korrektur von ID Nr: " & Val_ID & ""
Die Variablen sind aber an dieser Stelle (beim Aufruf des Hauptdialogs "Artikel") noch nicht belegt. Somit müsste man die Titeldefinition auf später verlegen und dann wären die Definitionen nicht beisammen.

Tricky - ich tendiere dazu, dann doch die Dialoge erst in "ihrem" Modul zu definieren - auch wenn deine Lösung so schön übersichtlich ist. Bislang hat das ja keinen Konflikt hervorgerufen.

Was meinst du?

LG Julia
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Hallo Julia,
Was meinst du?
Das es jetzt besser wäre, wenn Du deine aktuelle Datei hier anhängst. Dann schaun wir mal weiter.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Hallo balu,

entschuldige bitte, ich bin ein wenig langsam.
Hier die überarbeitete Datei POS_Kassenbuch_Forum_2.

Ich habe Anmerkungen im Modul Artikel / Dlg_Neuer_Artikel gemacht.
Ich hoffe, die sind verständlich - für mich ist das schon eine Herausforderung.

Nicht so gut finde ich, dass auch nach dem Schließen eines Unterdialogs die zuletzt eingegebenen Daten bei Wiederaufruf erhalten bleiben und der Cursor auf dem Eingabe-Button sitzt und nicht auf dem ersten Eingabefeld.

Zum Testen schlage ich den Dialog Dlg_Flaschenverkauf vor, der dem Button "Verkauf ganzer Flaschen" hinterlegt ist.
Folgende Eingaben bieten sich an:

Artikelnummer: 167 / 168
Anzahl: egal
Füllmenge : 0,7 / 0,75 / 1
Preis: <= 50,00 €

Vielleicht hast du ja einen Vorschlag?

Liebe Nikolausgrüße von
Julia
Dateianhänge
POS_Kassenbuch_Forum_2.ods
(47.14 KiB) 181-mal heruntergeladen
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Hallo Julia,
nach dem Schließen eines Unterdialogs
Das ist nicht korrekt. Es handelt sich nicht um "Unterdialoge" sondern um eigenständige Dialoge.
Ein Unterdialog wäre, wenn Du im Dialog *Dlg_Artikel* eine weitere Seite aktivieren und mit irgendetwas befüllen würdest. Das tust Du aber nicht.

Nicht so gut finde ich, dass auch nach dem Schließen eines Unterdialogs die zuletzt eingegebenen Daten bei Wiederaufruf erhalten bleiben
[...]
Wenn du hierfür eine Lösung kennst (Eingabefelder leeren), wäre das super.
Eigentlich recht einfach.
Du trägst ja Daten aus dem Dialog in das Tabellenblatt ein. Also warum nicht gleich anschließend das dementsprechende "NumericField" leeren.
Ein Beispiel

Code: Alles auswählen

    mySheet.getCellRangeByName("D" & End_Row).Value = Val_Artikelnummer    
OBJEKT.Text = ""
 
Tja, meine Liebe, da Du ja ein und derselben Variablen ein anderes Objekt zuordnest

Code: Alles auswählen

    Ctl_Artikelnummer = Dlg_Flaschen.GetControl("Artikelnummer")
    Val_Artikelnummer = Ctl_Artikelnummer.Value()
 
kommst Du jetzt natürlich ins schleudern. Denn Du musst nämlich jetzt beim leeren der Numerischen Feldern, oder was auch immer, erstmal schauen wie das Originale Objekt in wirklichkeit heißt. Ich werd dir das mal verdeutlichen.

Bleiben wir bei der Ausgangssituation des vorigen Beispiel.

Code: Alles auswählen

    mySheet.getCellRangeByName("D" & End_Row).Value = Val_Artikelnummer    
So kannst Du nicht daher gehen und sagen: Leere mir Val_Artikelnummer.

Code: Alles auswählen

    mySheet.getCellRangeByName("D" & End_Row).Value = Val_Artikelnummer    
Val_Artikelnummer.Text = ""
 
Denn das wird gar nichts bringen, außer eine Fehlermeldung. Es muss das Originale (richtige) Objekt angesprochen werden. Also in diesem Falle.

Code: Alles auswählen

    mySheet.getCellRangeByName("D" & End_Row).Value = Val_Artikelnummer    
Ctl_Artikelnummer.Text = ""
Und das bedeutet, da Du in einem Modul irgendwo oben die Umzuordnung vorgenommen hast, musst Du jetzt immer erst schauen wo Du die Umzuordnung vorgenommen hast und das richtige Objekt beim leeren ansprechen.

Wirklich besser und übersichtlicher wäre es, wenn Du jedem Objekt, egal ob Textfeld oder NummerischesFeld einen eindeutigen Namen zuordnest. Also nach diesem Muster.

Code: Alles auswählen

    oArtikelnummer_Artikel = Dlg_Artikel.GetControl("Artikelnummer")
    oArtikelnummer_Korrektur = Dlg_Korrektur.GetControl("Artikelnummer")
    oArtikelnummer_Flaschen = Dlg_Flaschen.GetControl("Artikelnummer")
'etc. usw.
Okay, das bedeutet jetzt wieder jede Menge an mehrarbeit für dich. Aber unterm Strich zahlt sich das dann schon aus.

Code: Alles auswählen

    mySheet.getCellRangeByName("D" & End_Row).Value = oArtikelnummer_Artikel.Value    
oArtikelnummer_Artikel.Text = ""
Du sparst dir dadurch den zwischenschritt (zwischenschritte) der Umzuordnung, und vor allem siehst Du sofort auf welches Objekt Du zugreifst.

Wundere dich jetzt nicht das ich das NummerischeFeld Artikelnummer per oArtikelnummer_Artikel.Text =  "" leere, obwohl dieses Feld doch Zahlen enthält und keinen Text.
Doch das NummerischeFeld kann auch Text beinhalten, und deshalb spielt es keine Rolle ob der Inhalt so oder so geleert wird. Und außerdem haben ein TextField und ein NumericField diesen Punkt gemeinsam, man kann sie über Text = "" leeren.

Ich hab da was für dich, was dir wohl etwas hilfreich sein wird.

Code: Alles auswählen

    oArtikelnummer_Artikel = Dlg_Artikel.GetControl("Artikelnummer")
    oAnzahl_Artikel = Dlg_Artikel.GetControl("Anzahl")
    oRabatt_Artikel = Dlg_Artikel.GetControl ("Rabatt")
    
    oEP_Preis = Dlg_EP.GetControl("Preis")
    oID = Dlg_ID.GetControl("ID")
    
    oArtikelnummer_Korrektur = Dlg_Korrektur.GetControl("Artikelnummer")
    oAnzahl_Korrektur = Dlg_Korrektur.GetControl("Anzahl")
    oRabatt_Korrektur = Dlg_Korrektur.GetControl ("Rabatt")
    oPreis_Korrektur = Dlg_Korrektur.GetControl("Preis")
    
    oArtikelnummer_Flaschen = Dlg_Flaschen.GetControl("Artikelnummer")    
    oAnzahl_Flaschen = Dlg_Flaschen.GetControl("Anzahl")    
    oFuellmenge_Flaschen = Dlg_Flaschen.GetControl("Füllmenge")    
    oPreis_Flaschen = Dlg_Flaschen.GetControl("Preis")
    
    oAnzahl_Astrakiste = Dlg_Astrakiste.GetControl("Anzahl")    
    oListBox_oPreis = Dlg_Astrakiste.GetControl("Preis")
    oListBox_AusserHaus = Dlg_Astrakiste.GetControl ("Außer Haus")
Nun musst Du noch die ganzen dementsprechenden Variablen neu deklarieren, da es dadurch z.B ja nicht mehr die Dim Ctl_Artikelnummer as Object gibt, weil sie jetzt Dim oArtikelnummer_Artikel as Object heißt.

Ich beneide dich jetzt nicht um diese Arbeit, da ich schon mal versucht hatte das alles umzuschreiben, aber da mir die Übersicht fehlt wo welche Umzuordnung stattfindet, habe ich dann aufgegeben. Wurd mir jetzt doch einfach zu viel.

Wenn Du das alles erledigt hast, können wir die nächsten Punkte/Probleme angehen.



Bin dann jetzt mal im Bett
balu



p.s.
Habe das Gefühl als wenn die Boardsoftware selbständig Wörter mittendrin trennt :?
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Tja, meine Liebe, da Du ja ein und derselben Variablen ein anderes Objekt zuordnest,

Code: Alles auswählen

Ctl_Artikelnummer = Dlg_Flaschen.GetControl("Artikelnummer")
Val_Artikelnummer = Ctl_Artikelnummer.Value()


kommst Du jetzt natürlich ins schleudern.
Hehe, das hast du schön gesagt. Ich werde dich nicht enttäuschen und mache den Umbenennungs-Rundumschlag - die überarbeite Fassung folgt schnellstmöglich. Ich glaub, das meiste hab ich verstanden. Weißt ja, es kann ein bisschen dauern.

LG Julia
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von Julia NuN »

Hallo balu!

Wow, das ging viel schneller als gedacht! :D Vielen Dank für deine Vorgaben, damit war es ganz einfach.
Folgendes habe ich umgesetzt, siehe Datei:
1. Umbenennung der Elemente, sodass die Doppelbelegung wegfällt.
2. Definition aller Dialoge und deren Elemente im ersten Sub
3. Definition der Dialogtitel immer an der Stelle, wo sie aufgerufen werden.
4. Dialogfelder leeren vor dem Beenden mit oFeld.Text = ""
5. Ansteuern des ersten Dialog-Eingabefeldes mit oFeld.setfocus() vor dem Schließen. --> Yeah, selbst drauf gekommen :-D

Jetzt läuft alles wie gewünscht.
Wenn Du das alles erledigt hast, können wir die nächsten Punkte/Probleme angehen.
Das wäre ganz toll, wenn du magst. Ich nehme deine Hilfe sehr gerne an.
Offenbar gibt es noch weitere Aufräummöglichkeiten, von denen ich nichts weiß.
Ansonsten hätte ich auch noch Fragen, die würde ich dann aber gerne danach erst angehen.

Ich vermute allerdings, dass wir uns ab jetzt endgültig von dem ursprünglichen Thema entfernen. Nicht, dass das noch jemanden stört...?

Wenn die Datei chic ist, würde ich sie übrigens gerne an passender Stelle bereitstellen, damit sie auch von anderen Kneipenbetreibern genutzt werden kann, die noch eine "offene Ladenkasse" haben dürfen. Dafür würde sich ein weiteres Aufräumen auf jeden Fall lohnen.

Liebe Grüße
Julia
Dateianhänge
POS_Kassenbuch_Forum_3.ods
(42.28 KiB) 174-mal heruntergeladen
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog Aktivierungsreihenfolge fehlerhaft

Beitrag von balu »

Hallo Julia,

ja doch! Ich sehe das Du aufgeräumt hast. :)

5. Ansteuern des ersten Dialog-Eingabefeldes mit oFeld.setfocus() vor dem Schließen. --> Yeah, selbst drauf gekommen :-D
Na siehste! Habe ich doch gesagt das dieser "Befehl" zu etwas taugt. ;-)

Ich vermute allerdings, dass wir uns ab jetzt endgültig von dem ursprünglichen Thema entfernen. Nicht, dass das noch jemanden stört...?
Mit dem abdriften hast Du allerdings recht. Und ich finde das Prima das Du das selber festgestellt hast. Deshalb schlage ich vor, das Du hier die Türe zu machst und einen neuen Thread eröffnest. Vielleicht mit dem Titel:

"Verbessern eines einfachen Kassenbuch"

Oder wie auch immer Du es gern betiteln möchtest.

Und ja, zumindest ich würde dir gerne weiterhelfen wollen. Lass uns einfach mal schaun was sich daraus ergeben wird.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten