ungebundenes Formularfeld füllen/auslesen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

ungebundenes Formularfeld füllen/auslesen

Beitrag von WSO »

Hallo Forum,
Auf einem Formular habe ich Felder, die nicht an die Datenbank gebunden sind.
Über Makro1 werden diese Felder vorbelegt, z.B. so:

Code: Alles auswählen

ThisComponent.DrawPage.Forms.getByIndex(0).getByName("X_projekt_betrag_1").text = stBetrag
Das Makro2 holt sich die (ggf. durch Eingabe veränderten) Felder wieder aus dem Formular und führt die Datenbankverarbeitung durch.

Code: Alles auswählen

	oFeld=oForm.getByName("X_projekt_betrag_1")	
	nBetrag = oFeld.getCurrentValue()
        ...
Problem: Felder, die nicht manuell überschrieben wurden, sind leer. Die von Makro1 vorgenommene Vorbelegung ist weg.
Ich weiss, dass Makro1 die Vorbelegungen im Formular auch speichern muss, nur wie?
Mit:

Code: Alles auswählen

	ThisComponent.DrawPage.Forms.getByIndex(0).getByName("X_an1_betrag").text = stBetrag
	nName = oForm.findColumn("X_an1_betrag")	
	oForm.updateString(nName)	
        oForm.updateRow()

geht es nicht: "Message: Der Spaltenname 'X_an1_betrag' ist ungültig.."
Kann mir bitte jemand einen Hinweis geben was ich da anders machen muss.
Gruss,
WSO
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: ungebundenes Formularfeld füllen/auslesen

Beitrag von RobertG »

Hallo WSO,

wie wird denn die Datenbankverarbeitung durchgeführt? Du hast, so scheint es, doch eine Datenquelle dem Formular zugrunde liegen - nur für einige Felder nicht. Mit der Eigenschaft "Text" gibst Du nur etwas an der Oberfläche wieder. Wenn Du etwas auf ein anderes feld umlesen willst und dort auch so hineinfügen willst, dass die zugrundeliegende Tabelle das mit bekommt, dann musst Du mit

Code: Alles auswählen

oFeld.BoundField.updateString()
arbeiten. Der Betrag darf nicht nur auf der Oberfläche des Formulars erscheinen. Er muss auch auf das Tabellenfeld übertragen werden. So etwas geschieht bei Änderungen eines Wertes oder eben, indem Du direkt dort hinein schreibst.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: ungebundenes Formularfeld füllen/auslesen

Beitrag von WSO »

Hallo RobertG,
danke für die Antwort, es ist wohl doch schwieriger, als ich dachte.
Ich muss etwas ausholen:
Das Formular ist eine Buchungsmaske für eine Finanzbuchhaltung. Keines der Felder ist an ein Datenbankfeld gebunden!
Die eigentliche Verarbeitung ist vollständig in Makros ausgelagert.

Das Formular soll von einem Anwender bedient werden, der kein Buchhalter ist und auch keinen korreten Buchungssatz im betriebswirtschftlichen Sinn formulieren könnte.
Ich habe daher eine Tabelle der vorkommenden Geschäftvorfälle angelegt. Hier ist je Geschäftvorfall der entsprechende Buchungssatz über Parameter logisch definiert.

Programm-Ablauf:
1. In der Buchungsmaske wählt der Anwender einen Geschäftsvorfall aus.
2. Auswahl per Buttom bestätigen: Makro1 wird aufgefufen, liest den Geschäftsvorfall und generiert aus den Parametern die wesentlichen Datenfelder des Buchungssatzes (Kontonummers, Soll/Haben, Kostenstelle, ...) insgesamt ca. 20 Felder.
Diese werden von Makro1 in die Formularbelder geschrieben und können jetzt vom Anwender geprüft, ergänzt, oder überschieben werden.
3. Buttom "Buchen": Makro2 liest die Formularfelder wieder aus und prüft die Daten auf korrekte Syntax.
Falls fehlerfrei, ruft Makro2 das Makro3 auf und übergibt alle Felder als Parameter.
Makro3 führt dann die Buchung durch.

Dieser modulare Aufbau soll so bleiben, insbesondere soll Makro3 unabhängig von der Oberfläche sein (wird von verschiedenen Stellen aufgerufen).

Wenn es nicht möglich sein sollte, meine von Makro1 befüllten Felder mit den korrekten Inhalten aus dem Formular erneut zu lesen brauche ich wohl einen anderen Lösungsansatz: Ich könnte eine neue Tabelle definieren, in der alle Formularfelder enthalten sind, und das Formular auf dieser Tabelle arbeiten lassen. Ich bin diesen Weg nicht gegangen, um die damit verbundenen zusätzlichen DB-Zugriffe zu vermeiden.

Muss ich diesen Weg gehen?

Dank und Gruss,
WSO
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: ungebundenes Formularfeld füllen/auslesen

Beitrag von RobertG »

Hallo WSO,

die Fehlermeldung in Deinem Makro 3 beruht ja darauf, dass in dem entsprechenden Formular wohl gar keine Tabelle im Hintergrund liegt. Auf welche Spalte soll sich dann die Variable beziehen?

Da ich das Ganze hier nicht weiter nachvollziehen kann: Ich rate Dir zu einer Tabelle mit einem Datensatz. Die Daten für die Tabelle füllst Du beim Starten des Formulars und speicherst sie gleich ab. Dann hast Du immer das Parat, worauf sich die Eingaben beziehen sollen. Ist sozusagen Deine temporäre Tabelle.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: ungebundenes Formularfeld füllen/auslesen

Beitrag von WSO »

Hallo Robert,
danke für die Information.
Ich verstehe das so, dass man den aktuellen Bildschirmbuffer nicht auslesen kann, sondern nur die aktuellen Tabellenwerte.
Ich folge somit deinem Rat und baue das Formular um (Referenz auf eine temporäre Tabelle).

Da die aktuellen Werte von Feldern ohne Tabellenanbindung Formular richtig angezeigt werden (auch ohne Tabellenanbindung), sind sie logischerweise auch igendwo gespeichert. Darauf zugreifen zu können, halte ich für einen sinnvollen change request.
Wie siehst du das?

Herzliche Grüße,
Wolfram
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: ungebundenes Formularfeld füllen/auslesen

Beitrag von RobertG »

Hallo Wolfram,

ein einfaches Beispiel zum Nachvollziehen wäre hier für mich sinnvoll. Ich kann dass aufgrund der genannten Makros nicht. Solange ein Text in einem Formularfeld erscheint sollte er natürlich auch verfügbar sein. Aber Dein Makro 3 bezieht sich ja auf eine Anbindung des Formulars an eine Datenbanktabelle (oForm.findColumn) - und das kann doch nicht sein, wenn keine Tabelle im Hintergrund liegt.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: ungebundenes Formularfeld füllen/auslesen

Beitrag von WSO »

Hallo Robert,
das "oForm.findColumn" hatte ich nur versuchsweise eingebaut, als ich nicht mehr weiter kam.
Die Sache wird für mich gerade immer merkwürdiger.
Ich habe ein Miniaturbeispiel des Themas extrahiert mit nur 2 Feldern ohne DB-Anbindung:
Keine Probleme, die Feldinhalte werden beide korrekt ausgelesen.

Im Original wird für einige wenige Felder bei auslesen permanent der NULLWERT zurückgegeben.
Das Original ist mit über 30 Felder auf dem Formular deutlich mächtigern, als das funktionierende Testbeispiel. Hinzu kommt, dass die Feldattribute (visible, color, open ...) für jedes Feld per Makro angepast werden, teilweise auch mehrfach.
Ich habe alle Makros nach den Feldnamen gescannt. Es gibt keine ungewollte Zuweisungen und auf dem Bildschirm werden ja auch die die korrekten Werte angezeigt.

Ich kann das Original leider kaum noch anonymisieren. Es läuft zudem auf MySql.
Habe das Gefühl mit meinem Lösungsansatz auf etwas dünnem Eis zu stehen und stelle das Formular jetzt auf Datenbankfelder um.

Danke für deine Mühe.
Herzliche Grüße,
Wolfram
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

gelöst: ungebundenes Formularfeld füllen/auslesen

Beitrag von WSO »

Hallo Robert,
das Thema hat mir doch keine Ruhe gelassen:
Ich habe alle Felder, die nicht ausgelesen werden konnten aus dem Formular gelöscht, das Formular gespeichert, LO neu gestartet und die Felder wieder eingebaut.
Resultat: Der Fehler ist weg!
Sieht danach aus, als wenn der Fomulareditor etwas "zerschossen" hatte.
Baue die Funktion trotzdem um, so kann ich die temporäre Tabelle als eine Art Trigger für den Verbucher verwenden und erspare mir das Handling einer extrem langen Parameterleiste beim Aufruf des Verbuchers.

Schönen Tag noch,
Wolfram
Antworten