Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Ergebnisse berechneter Felder stimmen nicht

Begonnen von Kamado, Mai 03, 2020, 13:06:47

⏪ vorheriges - nächstes ⏩

Kamado

Hallo zusammen,  ;D

seit einigen Tagen beiße ich mir an einer Stelle in meiner Vereinsdatenbank die Zähne aus.
Vielleicht kann mir jemand mal auf die Sprünge helfen.
Zu meiner Person: Ich bin kein Anfänger mehr, aber knapp darüber :)
Manchmal geht es mit dem Einrichten der Tabellenstruktur total daneben, aber sehr häufig passt es auch schon.
Ich kenne mich nicht mit Programmiersprachen aus, aber ich suche mir passende Sachen aus Foren und schreibe Sie um, soweit ich es hinbekomme.

Nun zu meinen zwei Knackpunkten:
1) In meiner Datenbank bekomme ich in der Abfrage "afgKassenbuch" bei den Gesamtwerten z.B. (Gesamt Ein Bank) falsche Ergebnisse. (Siehe Anhang "Abfrage afgKassenbuch 01"

2) Da die Abfrage "afgKassenbuch" für ein Bericht dienen soll, stören mich die Nullen in den Gesamtwerten. Wie bekomme ich diese weg? Habe schon viel probiert mit NZ() usw. .

Für einfache, verständliche Erklärungen wäre ich dankbar da "Knapp über Anfänger" mehr an Anfänger als an Profi liegt  :)
Ich bin wahrscheinlich morgen erst wieder am PC.



Grüße aus dem Münsterland

Version - Access 2016

DF6GL

#1
Hallo,

1)  setze bei allen nz()-Funktionen einen Ersatzwert ein:

nz([Feldname],0)   ,  bzw. im Abfrageentwurf:  Ergebnis: nz([Spaltenname1];0) + nz([Spaltenname2];0)

2) Formate (nicht Datentypen!) sind Schall und Rauch.  Wirf die Format-Angaben aus den Tabellen und/oder Abfragen heraus.  Formatiere die Werte dort, wo es visuell sinnvoll ist, z.B. in Berichten.


btw: zeige künftig den gesamten SQL-String (SQL-Ansicht im Abfrageentwurf) mittels C&P.
und bei Screenshots die breitenmäßig aufgezogenen Spaltennamen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Kamado

Hallo Franz, :)

erst mal Danke für deine Super schnelle Reaktion. Da fällt mir echt ein Stein vom Herzen, dass ich nicht alleine geblieben bin und mein Projekt am Ende noch in die Tonne klopp.  ;)
Ich konnte es heute Nachmittag doch nicht sein lassen und habe den Punkt 1 gelöst. Ich habe eine Wenn-Funktion eingefügt und dann ging es.

Auch die Formatierungen habe ich gelöscht. Bei den Feldern die z.B zu "Gesamt Ein Bank" zusammengezogen werden wird trotzdem noch das Währungszeichen angezeigt.
Keine Ahnung warum? Ich denke es hängt mit der Tabelle "tblBuchungen" zusammen. Da habe ich den Felddatentyp für das Feld "Betrag" natürlich auf "Währung" stehen lassen.
Es macht mich halt nur wieder stutzig, als 30%ler ;D ;D
Ist aber auch Schnuppe. Ich habe einen Probebericht erstellt und dort ließ sich alles prima Formatieren.

Was ich immer noch nicht gelöst habe ist die Sache mit den Nullen. :-\
Die NZ([...];0) Funktion habe ich nachgebessert. Hier ist die SQL Ansicht der Abfrage "afgKassenbuch":

SELECT IIf([Auswahl]=1 Or [Auswahl]=3,Nz([Ein Ideeller Tätigkeitsbereich],0)+Nz([Ein Zweckbetrieb],0)+Nz([Ein Vermögensverwaltung],0)+Nz([Ein Wirtschaftlicher Geschäftsbetrieb],0)+Nz([Ein Bank],0),0) AS [Gesamt Ein Bank], IIf([Auswahl]=1 Or [Auswahl]=3,Nz([Aus Ideeller Tätigkeitsbereich],0)+Nz([Aus Zweckbetrieb],0)+Nz([Aus Vermögensverwaltung],0)+Nz([Aus Wirtschaftlicher Geschäftsbetrieb],0)+Nz([Aus Bank],0),0) AS [Gesamt Aus Bank], IIf([Auswahl]=2 Or [Auswahl]=3,Nz([Ein Ideeller Tätigkeitsbereich],0)+Nz([Ein Zweckbetrieb],0)+Nz([Ein Vermögensverwaltung],0)+Nz([Ein Wirtschaftlicher Geschäftsbetrieb],0)+Nz([Ein Kasse],0),0) AS [Gesamt Ein Kasse], IIf([Auswahl]=2 Or [Auswahl]=3,Nz([Aus Ideeller Tätigkeitsbereich])+Nz([Aus Zweckbetrieb])+Nz([Aus Vermögensverwaltung])+Nz([Aus Wirtschaftlicher Geschäftsbetrieb])+Nz([Aus Kasse]),0) AS [Gesamt Aus Kasse], [afgVorberechnung-Kassenbuch].[Ein Ideeller Tätigkeitsbereich], [afgVorberechnung-Kassenbuch].[Aus Ideeller Tätigkeitsbereich], [afgVorberechnung-Kassenbuch].[Ein Zweckbetrieb], [afgVorberechnung-Kassenbuch].[Aus Zweckbetrieb], [afgVorberechnung-Kassenbuch].[Ein Vermögensverwaltung], [afgVorberechnung-Kassenbuch].[Aus Vermögensverwaltung], [afgVorberechnung-Kassenbuch].[Ein Wirtschaftlicher Geschäftsbetrieb], [afgVorberechnung-Kassenbuch].[Aus Wirtschaftlicher Geschäftsbetrieb], [afgVorberechnung-Kassenbuch].[Ein Bank], [afgVorberechnung-Kassenbuch].[Aus Bank], [afgVorberechnung-Kassenbuch].[Ein Kasse], [afgVorberechnung-Kassenbuch].[Aus Kasse], [afgVorberechnung-Kassenbuch].Finanzart, [afgVorberechnung-Kassenbuch].Vereinsaktivität, [afgVorberechnung-Kassenbuch].Auswahl, [afgVorberechnung-Kassenbuch].Unterkontoname
FROM [afgVorberechnung-Kassenbuch];

Die Abfrage "afgVorberechnung-Kassenbuch" habe ich als Grundlage für "afgKassenbuch" erstellt. Ich hatte immer einen Zirkelbezug und konnte ihn so umgehen.
Zu der Abfrage "afgVorberechnung-Kassenbuch" habe ich vorsichtshalber auch den SQL Code kopiert:


SELECT IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Ideeller Tätigkeitsbereich"),[Betrag],0) AS [Ein Ideeller Tätigkeitsbereich], IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Ideeller Tätigkeitsbereich"),[Betrag],0) AS [Aus Ideeller Tätigkeitsbereich], IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Zweckbetrieb"),[Betrag],0) AS [Ein Zweckbetrieb], IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Zweckbetrieb"),[Betrag],0) AS [Aus Zweckbetrieb], IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Vermögensverwaltung"),[Betrag],0) AS [Ein Vermögensverwaltung], IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Vermögensverwaltung"),[Betrag],0) AS [Aus Vermögensverwaltung], IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Wirtschaftlicher Geschäftsbetrieb"),[Betrag],0) AS [Ein Wirtschaftlicher Geschäftsbetrieb], IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Wirtschaftlicher Geschäftsbetrieb"),[Betrag],0) AS [Aus Wirtschaftlicher Geschäftsbetrieb], IIf(([Auswahl]=3) And ([tblUnterkonten]![Unterkontoname]="Bank an Kasse"),[Betrag],0) AS [Aus Bank], IIf(([Auswahl]=3) And ([tblUnterkonten]![Unterkontoname]="Kasse an Bank"),[Betrag],0) AS [Ein Bank], IIf(([Auswahl]=3) And ([tblUnterkonten]![Unterkontoname]="Bank an Kasse"),[Betrag],0) AS [Ein Kasse], IIf(([Auswahl]=3) And ([tblUnterkonten]![Unterkontoname]="Kasse an Bank"),[Betrag],0) AS [Aus Kasse], tblUnterkonten.Unterkontoname, tblFinanzarten.Finanzart, tblBuchungen.Betrag, tblVereinsaktivitäten.Vereinsaktivität, tblBuchungen.Auswahl, tblBuchungen.Wertstellung, tblBuchungen.Buchungsnotiz
FROM afgUnterkonten, tblVereinsaktivitäten INNER JOIN ((tblFinanzarten INNER JOIN tblUnterkonten ON tblFinanzarten.ID = tblUnterkonten.FinanzartID) INNER JOIN tblBuchungen ON tblUnterkonten.ID = tblBuchungen.UnterkontoID) ON tblVereinsaktivitäten.ID = tblUnterkonten.VereinsaktivitätID
GROUP BY IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Ideeller Tätigkeitsbereich"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Ideeller Tätigkeitsbereich"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Zweckbetrieb"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Zweckbetrieb"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Vermögensverwaltung"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Vermögensverwaltung"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Einnahmen") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Wirtschaftlicher Geschäftsbetrieb"),[Betrag],0), IIf(([tblFinanzarten]![Finanzart]="Ausgaben") And ([tblVereinsaktivitäten]![Vereinsaktivität]="Wirtschaftlicher Geschäftsbetrieb"),[Betrag],0), tblUnterkonten.Unterkontoname, tblFinanzarten.Finanzart, tblBuchungen.Betrag, tblVereinsaktivitäten.Vereinsaktivität, tblBuchungen.Auswahl, tblBuchungen.Wertstellung, tblBuchungen.Buchungsnotiz;

Im Anhang habe ich zur Orientierung noch drei Screenshots beigefügt.
Danke! :D

Gruß Norbert



Grüße aus dem Münsterland

Version - Access 2016

DF6GL

Hallo,

ZitatBei den Feldern die z.B zu "Gesamt Ein Bank" zusammengezogen werden wird trotzdem noch das Währungszeichen angezeigt.

Auch Abfragespalten habe eine Format-Eigenschaft.....

Zitatstören mich die Nullen in den Gesamtwerten.
Was meinst Du genau damit?

Soll, wenn das Ergebnis numerisch 0 ist, "nichts" (NULL, leer) angezeigt werden ?

Das könnte z. B. in einem Bericht mit der Bedingten Formatierung gelöst werden.



btw:  Solche IIF-Exzesse sind eher hinderlich, nicht transparent und folgen nicht db-technischer Verfahrensweise.


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Kamado

Hallo Franz,

bei den Abfragen hatte ich die Formatierung herausgenommen. Absolut leeres Feld bei der Eigenschaft Format. Trotzdem bleibt es beim Euro in der Datenblattansicht.
Macht aber nichts. Stört mich nicht weiter.

Ja. Die 0 soll im Bericht nicht angezeigt werden.
Der Tip mit der Bedingten Formatierung war sehr gut. Alle Nullen sind verdeckt durch weiße Farbe ;D Kannte ich schon aus Excel. Es war mir bei Access nur noch nicht so geläufig, da ich mit der Layoutansicht wenig arbeite.

Alle Probleme gelöst. ;D ;D ;D ;D ;D ;D ;D ;D

Die Berechnungen in den Abfragen waren mir bei der Datenbankplanung schon bewußt. Das Sie allerdings so umfangreich werden, hatte ich ehrlich gesagt nicht mit gerechnet. Der Knackpunkt liegt darin, dass eine Buchung (meinentwegen "Zweckbetrieb") eine Einnahme oder eine Ausgabe sein kann. Dementsprechend wird bei der Bank oder Kasse gebucht: Zweckbetrieb rein Bank rein oder Zweckbetrieb raus Kasse raus usw. . 
Andersherum ist es z.B. bei der Buchung "Bank an Kasse". Bank raus Kasse rein. Oder "Kasse an Bank" = Kasse raus Bank rein.

Was hätte ich bei der Planung anders machen sollen?

  - Mit Excel Arbeiten, da die Rechnerei für Access zuviel ist?
  - Zusätzliche Felder in den Tabellen einbauen um WIE zu kombinieren?
  - Andere Tabellen einfügen und die Struktur der Datenbank ändern?
  - Die Audrücke in den Abfragen anders Formulieren?

Fahrrad fahren habe ich auch nicht an einem Tag gelernt. :D :D

Vielen Dank für deine Mühen!!
Grüße aus dem Münsterland

Version - Access 2016

DF6GL

#5
Hallo,
Zitat
Der Knackpunkt liegt darin, dass eine Buchung (meinentwegen "Zweckbetrieb") eine Einnahme oder eine Ausgabe sein kann

Ich sehe nicht, wo diese Unterscheidungen geführt werden. Woher weiß man die Bedeutung von "Auswahl"?


Ich denke, der Knackpunkt liegt eher in der Darstellungsweise, die an Excel erinnert.

Evtl. käme eine Kreuztabellenansicht in Betracht.

Berechnungen sind nicht zu komplex, lediglich der Versuch der Umstellung von vertikaler nach horizontaler Darstellung mit Hilfe dieser IIF-Konstruktionen.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Kamado

#6
Hallo Franz,

die Idee mit der Kreuztabellenabfrage hatte ich vor 5 Tagen auch schon mal.
Hätte ich diesen Gedanken doch mal weiter verfolgt und nicht über Bord geworfen. ::)
Ich hatte Probleme beim Entwurf der Kreuztabelle und habe dann einen anderen Weg gesucht.

Der Gedanke mit der Drehung der Darstellung, von Horizontal nach Vertikal macht Sinn. Die Kreuztabellenversion werde ich auf jeden Fall nochmal aufgreifen.

In der Sache mit dem Feld "Auswahl">>> Ein dickes Sorry. :-[
Ich habe die Datenbank zwischenzeitlich optimiert und dir nicht den Ursprungs-SQL Code gegeben. 

  >:( Kardinalfehler >:(

In der Ursprungsversion hatte ich in dem Formular "frmBuchungen" und dementsprechend in der Tabelle "Buchungen" drei Kontrollkästchen "Bank, Kasse und Neutral", um eine Auswahl treffen zu können.

Diese habe ersetzt durch eine Optionsgruppe mit dem Ergebnis "1, 2 oder 3". Diese Optionsgruppe habe ich "Auswahl" genannt. ::)

Grüße aus dem Münsterland

Version - Access 2016

Beaker s.a.

Hallo Norbert,
Doppelte Buchführung ist dir ein Begriff?
Ich halte das Datenmodell für falsch. Eine Buchung besteht neben Betrag,
Datum und Verwendung aus einem Konto und einem oder mehreren Gegen-
konten; - zwei schon, wenn MwSt. im Spiel ist. Eine Buchung erfolgt auf
beiden Konten mit dem entsprechenden S&H-Kennzeichen (zum Rechnen
besser ein Faktor 1/-1).
Geldbewegungen würde ich zudem über ein Zwischenkonto "Geldtransit"
verbuchen. Man hat zwar eine Buchung mehr, aber bessere Kontrolle über
die Banklaufzeiten bei Bargeldeinzahlung.
Damit sollte es auch mit einer Kreuztabelle besser klappen. Wobei ich eine
horizontale Darstellung von Kontenblättern ziemlich gewöhnungsbedürftig finde.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Kamado

#8
Hallo Ekkehard,

danke für die Teilnahme am Thema.
Siehe Dateianhang ,,Projektziel" weiter oben. Doppelte Buchführung kenne ich als Maurermeister. Ich habe das Problem mit der Abfrage mittlerweile gelöst.

Irgendwo habe ich im vorbeihuschen einen Schalter "Thema gelöst" gesehen. Ich kann ihn aber nicht mehr wiederfinden. Wo finde ich diesen Schalter hier im Forum? Bin noch Newbie ;D.

Ich habe noch ein Problem mit dem Bericht der zu meiner DB gehört.

https://www.access-o-mania.de/forum/index.php?topic=24828.msg146848#msg146848

Gruß Norbert
Grüße aus dem Münsterland

Version - Access 2016