🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

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

Brechnung in Formular durchführen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Helles58
Beiträge: 115
Registriert: Mo 17. Jul 2017, 19:51

Brechnung in Formular durchführen

Beitrag von Helles58 » Mi 21. Apr 2021, 15:56

Hallo zusammen,

ich brauche etwas Hilfe bei Base.
Im Hauptformular in dem ein Unterformular (Tabellen-Steuerelement) eingebettet ist soll eine Berechnung durchgeführt und der Wert angezeigt werden.
Im Unterformular stehen Projektnr, Datum, Beginn und Ende im Zeitformat (HH:MM), hieraus soll die Arbeitszeit berechnet werden. Die DS im Unterformular sollen noch nach Datum gefiltert werden können.

Ich bin dankbar für jeden Tip.

Gruß Helles58

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

Re: Brechnung in Formular durchführen

Beitrag von RobertG » Mi 21. Apr 2021, 16:31

Hallo Helles58,

die normalen Lösung dafür ist, dies nicht im Hauptformular sondern im Unterformular zu erledigen. Schließlich liegen die dazu zugehörigen Daten im Unterformular. Im Hauptformular reicht es nicht aus, das Formular mit einer Abfrage auszustatten. Du muss dabei dann auch noch beständig die Abfrage aktualisieren und das Formular aktualisieren und wieder auf den entsprechenden Datensatz springen - geht nicht ohne Makros.

Du baust das Unterformular auf einer Abfrage auf. Du nimmst alle Felder der betreffenden Tabelle in diese Abfrage auf. Wichtig sind hier der Primärschlüssel (da sonst die Abfrage nicht zur Eingabe genutzt werden kann) und der Fremdschlüssel zum Hauptformular (da sonst das Abfrageergebnis nicht zum Hauptformular passt.)

So ein Code für die Abfrage könnte z.B. sein:

Code: Alles auswählen

SELECT "Tabelle".*, DATEDIFF('hour',"Beginn", "Ende") AS "Stunden" FROM "Tabelle"
Bei der HSQLDB muss 'hour' in einfachen Anführungszeichen stehen, bei Firebird hast Du jetzt bereits das erste Problem: die Anführungszeichen müssen weg, das Ding funktioniert dann nur in direktem SQL und damit ist die Abfrage nicht mehr für Eingaben funktionstüchtig.

Also: Erst einmal ein paar mehr Informationen und dann nachschauen, wie da überhaupt mit wenig Aufwand etwas möglich ist.

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

Helles58
Beiträge: 115
Registriert: Mo 17. Jul 2017, 19:51

Re: Brechnung in Formular durchführen

Beitrag von Helles58 » Mi 21. Apr 2021, 17:36

Hallo Robert,
danke für die schnelle Beantwortung.
Ich probier das mal aus.
Wenn es noch klemmt melde ich mich wieder.

Gruß Helles58

Helles58
Beiträge: 115
Registriert: Mo 17. Jul 2017, 19:51

Re: Brechnung in Formular durchführen

Beitrag von Helles58 » Do 22. Apr 2021, 13:47

Hallo Robert,

hab den SQl-Code in eine abfrage eingebaut. Funktioniert soweit, nur der Wert wird nicht richtig berechnet.
Es werden nur die vollen Stunden berücksichtigt.
Würde passen wenn die Stunden im UF angezeigt werden und im HF die Summe der angezeigten Daten aus dem UF.
Im HF ist ein Kontrollfeld für die Datumsauswahl daneben ein Textfeld für die Summenanzeige.

Im Anhang ist die DB mit ein paar Daten.

Gruß Helles58
Stundenabrechnung.rar
Testdatei
(19.8 KiB) 144-mal heruntergeladen

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

Re: Brechnung in Formular durchführen

Beitrag von RobertG » Do 22. Apr 2021, 16:37

Bei den Zeiten kommt es darauf an, wie Du sie am besten präsentiert haben willst.

Code: Alles auswählen

… DATEDIFF( 'mi', "Beginn", "Ende" )/60.00 AS "Stunden" …
Gibt Dir die Stundenb und die Minuten als Stundenbruchteile an. Die Anzahl der Nachkommastellen kannst Du über die Zusätzlichen Nullen im Nachkommabereich der '60' regulieren.

Für die Abfrage der Summe benutze so etwas wie

Code: Alles auswählen

SELECT "ID", "ProjektNr.", "Datum", "Beginn", "Ende", "Tätigkeit", DATEDIFF( 'mi', "Beginn", "Ende" )/60.00 AS "Stunden", (SELECT SUM(DATEDIFF( 'mi', "Beginn", "Ende" )/60.0000) FROM "T-Zeiterfassung" WHERE "ProjektNr." = "a"."ProjektNr.") AS "Stunden_Projekt" FROM "T-Zeiterfassung" AS "a" ORDER BY "ProjektNr." ASC, "Datum" ASC, "Beginn" ASC
als komplette Abfrage.

Das mit dem Hauptformular hatte ich Dir vorher schon geschrieben: Änderungen, die Du im Unterformular machst, kannst Du nur mit vielen Klimmzügen auch im Hauptformular sehen. Viel einfacher ist es, die im Unterformular mit anzuzeigen. Das hat mit der Position des Feldes aber nichts zu tun. Du kannst das Feld also auch einfach über den Formularnavigator ins Unterformular verschieben und dann mit "Stunden_Projekt" verbinden. Nur zeigt das Feld nur dann etwas an, wenn auch im Unterformular bereits die Berechnung erfolgt ist. Bei Neueingaben steht da dann grundsätzlich nichts. Schließlich wird die Berechnung nach der Eingabe gemacht.

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

Helles58
Beiträge: 115
Registriert: Mo 17. Jul 2017, 19:51

Re: Brechnung in Formular durchführen

Beitrag von Helles58 » Do 22. Apr 2021, 17:29

Hallo Robert,

Danke für deine Hilfe.
Ich denke ich komme jetzt zurecht.
Zumindest mit diesem Problem.

Gruß
Helles58

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Brechnung in Formular durchführen

Beitrag von F3K Total » Fr 23. Apr 2021, 14:21

Moin,
ich hätte da noch folgende Idee: Wenn man

Code: Alles auswählen

DATEDIFF( 'mi', "Beginn", "Ende" )/(60.00000*24) AS "Stunden"
nimmt, kann man im Formular ein "Zeitfeld" oder ein zur Zeit formatiertes "formatiertes Feld" verwenden, das zeigt dann die Zeit z.B als 7:20 an.

Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO


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