Mai 20, 2022, 15:11:16

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


[GELÖST] Teilsumme aus den Werten im UF das bereits gefilterte Werte anzeigt

Begonnen von Jakomo, November 03, 2021, 12:19:19

⏪ vorheriges - nächstes ⏩

Jakomo

November 03, 2021, 12:19:19 Letzte Bearbeitung: November 03, 2021, 13:58:05 von Jakomo Grund: GELÖST
Problem anders ausgedrückt: In DomSumme nur die angezeigten Datensätze des Formular nutzen

Problemstellung:
Das HF zeigt einen (wählbaren) Monatsreport aus verschiedenen Konten.
Dieser Report enthält nicht nur bereits erledigte Buchungen, sondern auch Tage im Vorlauf, also Forecast.
Das HF besitzt dafür 6 UF.
Diese sind alle entsprechend über Monat und Jahr verknüpft.

Die Transaktionen/Kontobewegungen haben
zwei Felder die bei diesem Problem von Relevanz sind
1. Das Feld für das jeweilige Buchungsdatum über [tb_Flex_Datum]
2. Das Feld für den jeweiligen Betrag [tb_Flex_Betrag]

Einnahmen/Ausgaben-Summen aller angezeigten Transaktionen sind banal über bspw.
"=Summe(Wenn([tb_Flex_Betrag]>0;[tb_Flex_Betrag];0))" realisiert

Die Formular-Formel berücksichtigt dabei automatisch nur die Datensätze des UF, die bereits durch die Verknüpfung mit dem HF gefiltert sind. super.

Es werden je UF zwei Gesammtsummen-Felder benötigt:

1. Die Gesamtsumme aller angezeigten Buchungen, die banal über "Summe([tb_Flex_Betrag])"  ermittelt wird.
Auch hierfür nutzt die Formularformel bereits automatisch nur die Datensätze des UF, die durch die HF-Verknüpfung gefiltert sind.

2. Die Gesamtsumme aller angezeigten Buchungen, aber nur bis zum heutigen Datum
Dafür muss das Datumsfeld [tb_Flex_Datum] in die Formel rein.

Für Excelfreunde: eine "SummeWenn", bietet Access im Formular quasi die DOMSUMME

Dies Formel wäre also (Für Daten aus der Tabelle tb_Flex_R):
=DomSumme("[tb_Flex_R].[tb_Flex_Betrag]";"[tb_Flex_R]";"[tb_Flex_R].[tb_Flex_Datum]<" & Str(ZDouble(Datum())))

Problem: Die Formularformel nutzt alle Datensätze und nicht nur diejenigen, die durch die Verknüpfung bekannt sind.

Nun könnte man meinen, anstelle auf die Tabelle zu verweisen, könnte auf eine Abfrage verweisen, welche bereits die Filter (also Monat, Jahr) anwendet.
Das kann man natürlich auch. Anstelle also ;"[tb_Flex_R]"; ein ;"qry_FLEX_R_MY";.

Das ganze hat aber 2 Haken:
1. Da diverse Tabellen genutzt werden müssen, müsste für jede eine eigene Qry erstellt werden UND
2. die Abfragen müssten alle laufend dynamisch Filtern, der SQL-Code also ständig (zb über VBA) in allen Queries angepasst werden.

Mir stellt sich noch das Problem, wie ich das im VBA-Code so umsetze, das alle queries lfd. angepasst werden. Das wäre sicher rein logisch recht schnell lösbar.
Vielmehr sehe ich - schon aus Performance-Gründen - Probleme. Schon weil es 6 UF betrifft.

Es müsste doch einen einfacheren Weg geben, um ohne Query in der DomSumme nur die Datensätze als Grundlage zu nehmen, die bereits im UF gefiltert sind. Mit Summe, etc. geht das ja auch.

Jemand eine Idee für mich?
Danke.




Jakomo

[GELÖST]


Bereits durch meine Beschreibung ist der Knoten geplatzt.
Im Grunde, habe ich die Lösung selbst schon geschrieben: Wie bei den Transaktions-Teilsummenfeldern für einnahmen und Ausgaben, habe ich eine WENN im einfachen Summenfeld eingebaut.
Ein einfaches
=Summe(Wenn([tb_Flex_Datum]<=Datum();[tb_Flex_Betrag];0))

ist die Lösung.