10.9k Aufrufe
Gefragt in Datenbanken von Einsteiger_in (83 Punkte)
Hallo Access-ler ,

Ich krieg einfach keine laufende Summe in Access 2003 auf die Reihe.
Ich lade mal ne Beispieldatei hoch, damit ihr seht wo ich hänge.

Trotz Google-Suche und inzwischen tagelang rumprobieren krieg ich keine laufende Summe für jeden Datensatz in der Abfrage hin.
Dabei war ich schon froh, eine laufende Nr hinzukriegen, die auch gelöschte Datensätze aus der Haupttabelle wieder durch nummeriert.
Zeilensumme (Buchungssatz) ist ja noch einfach, aber schon bei Summe nach Datum gelang mir nur die Gesamtsumme eines Bereichs (im Beispiel "EinHaben") aber nicht nach Datensatz und schon gar nicht zusammen mit "AusSoll".
Mir wäre am liebsten neben der Spalte "Buchsumme" eine mit "LaufSumme" in der eben der Saldo nach jeder Buchung erscheint (wie bei einem Kontoauszug)
In Excel hab ich das schon, aber mit access hätte ich bessere Möglichkeiten zur weiteren Bearbeitung.
Wer kann helfen?
Einer meiner Versuche wird mit Fehler 3075 - Syntaxfehler (Komma) in Abfrageausdruck – abgelehnt:
Format(DomSumme("EinHaben";"Abrechnung";"[AbrNr]<=" & [EinHaben] & "");"0.000,00 Euro")-("AusSoll";"Abrechnung";"[AbrNr]<=" & [AusSoll] & "";"0.000,00 Euro")
Und da blick ich nicht mehr wirklich durch :-(

Danke für die Hilfe

15 Antworten

0 Punkte
Beantwortet von
Hallo!

In einer Abfrage mit herkömmlichen Rechenfunktionen einen Saldo hinzubekommen ist mir leider nicht gelungen, zumal immer der Hinweis (Fehlermeldung) kam ich hätte ein Feld nicht mitgenommen.
Die Tagesumsätze jedoch hab ich auch hingebracht.
Ich glaube, dass ist nur mit Programmierung zu lösen, aber davon habe ich leider keine Ahnung.

In einem Bericht wäre es zu machen (da gibt es aber keine Datenblattansicht):

>Bericht Entwurfsansicht
>Im Detailbereich dementsprechendes Feld anklicken
>Steuerelementinhalt Formel eingeben:
=[Einnahmen] - [Ausgaben]
>anschließend In den Eigenschaften des Textfeldes
>"Laufende Summe". auswählen
>auf "Über Alles" stellen

Im Bericht ist dann in jeder Zeile der Tagessaldo zu sehen.

Eine Lösung im Sinne der Frage kann ich leider nicht anbieten.

Schöne Grüße

Paul1
0 Punkte
Beantwortet von Einsteiger_in (83 Punkte)
Hallo Paul1,

erst mal danke für deine Mühe - das geht schon so im Bericht wie von dir vorgeschlagen - siehe mein
Beispiel-Update.
Aber ich hätte schon gerne die Abfrage oder ein Formular mit diesem Ergebnis
Mit Hilfe dieses Beitrags (aus der Google-Suche) habe ich versucht die Formel
DomSumme("C-D";"Tabelle";"DATUM<=" & ZLong([DATUM]))
(von Karl Donaubauer - die vorletzte Antwort des Threads) auf meine Tabelle wie folgt umzubauen:
DomSumme("EinHaben - AusSoll";"Abrechnung";"AbrDatum<=" & ZLong([AbrDatum]))

Was da jetzt dabei rauskam ist aber nicht wirklich –für mich- erhellend (siehe mein Beispielupdate).
Wie kann evtl. die LaufNr aus der Abfrage mit dem Datum so verbunden werden, daß sich die gewünschte Reihenfolge und korrektes Ergebnis - wie im Bericht - ergibt?

Kann jemand der anderen supportler weiter helfen?

Marie hat doch mal geschrieben ich soll fragen, fragen, fragen...

Nun, es dauert vielleicht immer etwas, bis ich durchprobiert hab und zum Feedback komme aber es kommt bestimmt :-)

Danke und Gruß

Gringo
0 Punkte
Beantwortet von
Hallo Gringo!

Deine Beispieldatei habe ich mir angesehen und mußte feststellen, daß alles sehr gründlich aufbereitet ist.
Ich könnte sogar damit leben, daß im Formular der Saldo "nur" per Tag aufgelistet wird (das ist ja schon was!).

Deine Vorstellung ist aber, dass auch innerhalb eines Tages neben jeder Bewegung (Datensatz) ein Saldo ausgeworfen wird, am liebsten in einer Abfrage und im Formular.

Dazu wäre eine Formel mit Einbeziehung der LaufNr.(in der Beispieldatenbank, Felddatentyp Autowert und mit einem Primärschlüssel versehen) erforderlich.
Wie bereits erwähnt habe ich diesbezüglich derzeit noch keine Ahnung, aber ich habe die Absicht es zu lernen.

Auch bei Recherchen im Web konnte ich kein ähnliches Problem mit Lösungsvorschlägen finden.
Wie Du schon angesprochen hast, wären für dieses Problem versiertere AntworterInnen gefragt.

Ich bin überzeugt, dass es hierfür auch eine Lösung gibt.


Schöne Grüße

Paul1
0 Punkte
Beantwortet von Einsteiger_in (83 Punkte)
Hallo Paul1,

Danke dir schon mal mit der Beschäftigung meines Problems. Auch ich bin ja ein Access-Neuling und dabei, mir so nach und nach die Thematik anzueignen.
Und da braucht man schon ab und an Hilfe :-)

Das mit der LaufNr hast du schon richtig erkannt (das sie in der Saldo-Formel mit dem Datum verknüpft werden muß), da es ja für ein Tagesdatum auch mehrere Buchungen geben kann.

Schwierigkeiten bei der Saldoberechnung mit der Primär-ID entstehen dann, wenn ein Datensatz mal gelöscht wird, da mit Felddatentyp "Autowert" natürlich diese Zahl nicht mehr ersetzt wird.
Folglich würde der gesamte Saldo nicht mehr stimmen.

Daher habe ich (nach längerer Web-Suche) diese Seite gefunden und hier speziell "FAQ 3.11: Laufende Nummer/Summe in Abfragen" für meine Abfrage!
- also nicht in der Tabelle – bearbeitet.
Wenn du die abf in meiner Beispiel-Update-db in der Entwurfsansicht öffnest siehst du eine Formel im Feld "LaufNr" der Abfrage! für die DomAnzahl einer fortlaufenden Nummer die sich zwar auf die "AbrNr" der Tabelle bezieht, aber im Gegensatz zu deren "Autowert" bei einem gelöschten Datensatz in der Tabelle, die "Laufnr" in der Abfrage beim folgenden Datensatz wieder anschließen läst.

Zu sehen in diesem Datensatz:
Feldnamen: "AbrDatum" 04.02.2010, "EinHaben" 20,00 €
In der Tabelle hat dieser Datensatz die "AbrNr 3" und der Datensatz von 151,00 € zum gleichen Datum die "AbrNr 1" (hier wurde ein Datensatz dazwischen gelöscht). In der Abfrage hat derselbe Datensatz ("AbrDatum" 04.02.2010, "EinHaben" 20,00 €) aber die richtige Reihenfolge und so die "LaufNr 2"
Nun sollte es möglich sein (und ist auch möglich) diese "LaufNr" aus der abf in Verbindung mit AbrDatum sowie Ein- und Ausgang einen fortlaufenden Saldo pro Datensatz zu errechnen und anzuzeigen.
Nur da bin ich eben bis dato (wie man am Formular sieht) noch nicht wirklich durchgestiegen.

Die einzelnen Datensätze beinhalten verschiedene Positionen und durch gezielte Abfragen können Bestände sowohl nach Haben- als auch nach Soll-Summen (bezahlt oder noch nicht bezahlt) abgefragt werden, daher die einzelnen Datensätze pro Position. In der Beispiel-db sind diese natürlich nicht extra aufgeführt, da sie für diese Anfrage (nach meiner Meinung) nicht relevant sind.

Vielleicht fällt ja dir oder anderen Supportlern nach dieser Erklärung noch etwas dazu ein

MfG

Gringo
0 Punkte
Beantwortet von
Hallo Gringo!

Du wirst es nicht glauben, ich bin draufgekommen.
In der Entwurfsansicht der Abfrage muß folgende Formel stehen, zumal ja in der Lauf Nr auf die AbNr.bezug genommen wurde:

LaufSumme:DomSumme("EinHaben-AusSoll";"Abrechnung";
"AbrNr<=&ZLong([AbrNr]))

oder einfach das in der vorherigen Formel angegebene " Abr.Datum" durch "AbrNr" ersetzen.

Es ist jetzt der Saldo in jeder Zeile der Abfrage ersichtlich, so wie Du es wolltest.

Ich habs getestet und es hat funktioniert.

Wie das eventuell mit dem Formular geht, muß ich mir erst anschauen.

Schöne Grüße

Paul1
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Kann jemand der anderen supportler weiter helfen?

Marie hat doch mal geschrieben ich soll fragen, fragen, fragen...


Ja sorry, habe ich eben erst gelesen aufgrund deines Privatpostings. Dazu muss ich folgendes sagen:
Erstens lade ich mir grundsätzlich keine fremden Datenbanken auf den Rechner,
zweitens könnte ich vermutlich Deine Datenbank gar nicht öffnen, je nachdem welche Version Du hast,
drittens ist das ein Forum, wo die Fragen und Antworten bestehen bleiben und Deine hochgeladene Datenbank ist nach 120 Tagen weg, also kann keiner mehr mit der Antwort etwas anfangen.

Ich mache hier Support auch für diejenigen, die später mal dasselbe Problem haben wie Du und ärgere mich persönlich tierisch, wenn ich selbst mal was suche, finde mein Problem mehrfach im Internet und die zugehörigen Antworten sind nicht brauchbar, weil überall auf tote Links verwiesen wird.

Einer meiner Versuche wird mit Fehler 3075 - Syntaxfehler (Komma) in Abfrageausdruck – abgelehnt:
Format(DomSumme("EinHaben";"Abrechnung";"[AbrNr]<=" & [EinHaben] & "");"0.000,00 Euro")-("AusSoll";"Abrechnung";"[AbrNr]<=" & [AusSoll] & "";"0.000,00 Euro")
Und da blick ich nicht mehr wirklich durch :-(


Diesen Syntaxfehler kann ich Dir sicher beheben, wenn Du mir mal schreibst was das für Felder sind (Textfelder, Zahlenfelder?), wenn es eine Abfrage ist wäre mir der SQL-Ausdruck lieber. Ich könnte mir vorstellen, dass der Fehler hier ist: "[AbrNr]<=" & [EinHaben] , dahinter und davor hast Du Schlussstriche. Aber ich habe halt keine Ahnung was [EinHaben] ist (Tabellenfeld, Formularfeld??). Und wo steht diese Abfrage?

gruß marie
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Äh, irgendwelche Felder müssten auch Datumsfelder sein, keine Ahnung welche. Ich muss dazusagen, ich habe von Buchhaltung nicht die Bohne einer Ahnung. Wäre super, wenn Du einfach ein Beispiel dazuschreibst. Also welche Daten Du wo eingibst und was das Ergebnis sein müsste.

Gruß marie
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Hobby-Sammler,

ich lade DBs und finde es hilfreich, nicht alles verbal beschreiben zu müssen, und wozu gibt es Virenscanner. OK, soviel dazu.

Ich will mal ganz anders anfangen. Die Sache mit DSum etc. ist furchtbar ineffektiv! Mein Ansatz geht über ein kleines Modul mit einer Prozedure "calcSaldo". Ich habe in deine Tabelle "Abrechnung" noch ein Feld "Saldo" vom Typ Währung aufgenommen. Die Prozedur berechnet dann den Saldowert (Sortiert nach AbrDatum und Abrnr) und legt die laufende Summe in dem Feld "Saldo" ab. Die Berechnung ist schnell und effektiv, gerade bei vielen Datensätzen. Der Nachteil: Du muss, nachdem neue Daten eingegeben worden sind, den Soaldo neu berechnen. Dies kann z.B. vor dem Aufruf eines Reports oder nach der Übernahme von Daten passieren. Hier die Prozedure:
Option Compare Database
Option Explicit

Public Sub CalcSaldo()

Dim rec As New ADODB.Recordset
Dim tmpSaldo

tmpSaldo = 0
rec.Open "SELECT * FROM Abrechnung Order by AbrDatum, Abrnr", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
While Not rec.EOF
tmpSaldo = tmpSaldo + rec!Einhaben - rec!Aussoll
rec!saldo = tmpSaldo
rec.Update
rec.MoveNext
Wend
rec.Close
Set rec = Nothing
End Sub

Falls zu Fragen dazu hast, melde dich.

Gruß
Ralf
0 Punkte
Beantwortet von Einsteiger_in (83 Punkte)
Hallo Marie,
danke erst mal für deine Antwort. Tja so unterschiedlich sind die supportler hier …
Einer will 'ne Beispieldatei, andere wieder nicht – wobei ich deine Begründung aber durchaus verstehe und auch nachvollziehen kann.
Daher Antwort1: Ich habe Office 2003 pro
Nun versuch ich mal deine Fragen zu meiner Datei zu beantworten:

A-Die Tabelle

Beschreibung der Tabellenfelder:

1) Feldname: "AbrNr" Felddatentyp: "Autowert"
2) Feldname: "AbrDatum" Felddatentyp: "Datum/Uhrzeit" Format: " ttt tt mmm jjjj"
(hier sind meist mehrere Buchungen an einem AbrDatum)
3) Feldname: "BuchHinweis" Felddatentyp: "Text"
(die Art bzw. der Name der Verbuchung)
4) Feldname: "EinHaben" Felddatentyp: "Währung" Format: "Euro"
(bezahlte Artikel bzw. Buchungseingang)
5) Feldname: "AusSoll" Felddatentyp: Währung" Format: "Euro"
(gelieferte Artikel bzw. Buchungsausgang)

B-Die Abfrage

Beschreibung der Abfragefelder:

1) "LaufNr":

FeldCode:
LaufNr: DomAnzahl("AbrNr";"Abrechnung";" AbrNr<" & [AbrNr])+1

SQLCode:

SELECT DCount("AbrNr","Abrechnung"," AbrNr<" & [AbrNr])+1 AS LaufNr, Abrechnung.AbrDatum, Abrechnung.EinHaben, Abrechnung.AusSoll, ([EinHaben]-[AusSoll]) AS BuchSumme, DSum("EinHaben - AusSoll","Abrechnung","AbrDatum<=" & CLng([AbrDatum])) AS LaufSummeA
FROM Abrechnung;

2) "AbrDatum"
3) "EinHaben"
4) "AusSoll"
5) "BuchSumme" (hier wird die einzelne Datensatzsumme ausgegeben)

FeldCode:
BuchSumme: ([EinHaben]-[AusSoll])

6) LaufSummeA: (hier sollte eigentlich ein laufender Saldo erscheinen)

FeldCode:
LaufSummeA: DomSumme("EinHaben - AusSoll";"Abrechnung";"AbrDatum<=" & ZLong([AbrDatum]))



Es sind in der Musterdatei 6 Datensätze belegt – Reihenfolge der Felder:

Tabelle: AbrNr – AbrDatum – BuchHinweis – EinHaben – AusSoll

1) 1 - Mo 04 Jan 2010 - Artikel 1 - 151,00 € - 0,00 €
2) 3 - Mo 04 Jan 2010 - Artikel 2 - 20,00 € - 0,00 €
3) 4 - Di 05 Jan 2010 - Artikel 1 - 0,00 € - 225,00 €
4) 5 - Di 05 Jan 2010 - Artikel 1 - 1.180,00 € - 0,00 €
5) 6 - Di 05 Jan 2010 - Artikel 1 - 0,00 € - 485,30 €
6) 7 - Mi 06 Jan 2010 - Artikel 2 - 0,00 € - 3,50 €


Abfrage: LaufNr – AbrDatum – EinHaben – AusSoll – BuchSumme - LaufSummeA


1) 1 - Mo 04 Jan 2010 - Artikel 1 - 151,00 € - 0,00 € - 151,00 € - 171
2) 2 - Mo 04 Jan 2010 - Artikel 2 - 20,00 € - 0,00 € - 20,00 € - 171
3) 3 - Di 05 Jan 2010 - Artikel 1 - 0,00 € - 225,00 € - -225,00 € - 640,7
4) 4 - Di 05 Jan 2010 - Artikel 1 - 1.180,00 € - 0,00 € - 1.180,00 € - 640,7
5) 5 - Di 05 Jan 2010 - Artikel 1 - 0,00 € - 485,30 € - 485,30 € - 640,7
6) 6 - Mi 06 Jan 2010 - Artikel 2 - 0,00 € - 3,50 € - -3,50 € - 637,2

Bis hier war ich bei meiner Anfangsfrage im supportnet und es kam zu diesen falschen Berechnungen.
Mit der umgestellten Formel von Paul1 - FeldCode:

LaufSummeB: DomSumme("EinHaben-AusSoll";"Abrechnung";"AbrNr<=" & ZLong([AbrNr]))

Wurde zwar das Ergebnis in "LaufSummeB" (hab ne neue Spalte genommen) korrekt als Zahl dargestellt - Danke Paul! - , scheint aber als Text so formatiert zu sein,das ich kein Währungsformat mehr einstellen kann.
In der Entwurfsansicht bleibt unter "Eigenschaften" --> das Auswahlfenster "Format" leer (sowohl in der Abfrage ais auch im Formular)

Jedenfalls danke ich erst mal bis hierher für alle Hilfe und hoffe doch noch, das auch die letzte "Kleinigkeit" noch gut behoben werden kann.

Gruß und noch einen schönen Rest-Sonntag

Gringo
0 Punkte
Beantwortet von Einsteiger_in (83 Punkte)
@Ralf,

Danke auch dir erst mal ein für deine Mühe :-)

Ich wäre wirklich froh, wenn ich schon ein wenig Ahnung von VBA hätte (deine Prozedur ist doch VBA oder?)
Wo und wie muß dieses "kleine Modul" eingetragen werden?

Bisher war ich auch immer der Meinung, Berechnungen in access sind nur in Abfragen, Formularen oder Berichten möglich und nicht in den Tabellen.
Aber scheinbar ist mit VBA doch einiges möglich ...

Könntest du mir nicht die db mit deiner Änderung zukommenlassen?
Dann kann ich mich intensiver damit auseinander setzen :-)

Auch dir wünsche ich noch einen schönen Sonntag abend sowie allen anderen supportlern

Gruß

Gringo
...