Neuigkeiten:

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

Mobiles Hauptmenü

alle Werte des Recordset ansprechen

Begonnen von MaxP, März 28, 2019, 17:02:44

⏪ vorheriges - nächstes ⏩

MaxP

Hallo zusammen,

mein Ziel ist es, ein Endlos-Formular einer monatlichen Ausgabenübersicht zu erstellen, die "automatisch" sowohl alle fälligen Datensätze einer Tabelle namens Vorgabewerte sowie entsprechend verknüpfte Datensätze aus der Tabelle Buchungen anzeigt (s. Beispiel-DB). Sinn und Zweck des Ganzen ist es, im Vorraus einen Überblick über die entsprechenden Kosten eine Monats zu bekommen. (Ich hatte vorher hierfür eine Exceltabelle genutzt.)

Die Tabelle Vorgabewerte, die nur einmal jährlich kopiert und überarbeitet werden soll, besteht i.W. aus der Ausgabenart, dem Ausgabenbetrag und der Fälligkeit innerhalb eines Jahres. Dieser Ausgabenbetrag kann ein fester Wert sein, für Kostenarten, die sich über das Jahr nicht ändern (z.B Miete). Ansonsten ist es ein kalkulatorischer Wert, der vorgegeben wird und i.d.R. monatlich korrigiert wird (z.B. Telefonkosten). Über die Fälligkeit (01-04-07 ...) sollen die Datensätze heraus gefiltert werden (z.B. *04*), die in dem gewählten Monat nicht anfallen.

Die Tabelle Buchungen enthält nur die Datensätze der korrigierten Ausgabenbeträge und des korrigierten Buchungsdatums.

Da die festen Werte etwa 50 % der Ausgabenarten ausmachen, braucht der Ausgabenbetrag in der Monatsansicht auch nicht korrigiert werden.

Schließlich ist es möglich, dass z.B. die Kostenart "Spritkosten" mehrmals im Monat vorkommen kann. Dann muss z.B. im Monat März der Datensatz 2x kopiert werden und der vorgebene Ausgabenbetrag korrigiert werden, im Monat April evtl. 3x.

Ich bin die ganze Zeit schon mit einer 1:n-Beziehung am Herumdoktern. Mir ist unklar, ob ich hierfür nicht doch eine n:m-Beziehung benötige.

Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

Gruß
Max
Win 10 pro 64 bit, Access 2003

MaxP

#1
Hallo zusammen,

ich beziehe mich auf meinen gestrigen Post Themen zusammengeführt MzKlMu

Nun habe ich eine neue Idee:
Die Vorgabentabelle bleibt unverändert.
Die Buchungstabelle erhält Korrekturfelder für jeden Monat, sowie einen Dummy für den gerade aktuellen Monat. Beide Tabellen in einer Abfrage verknüpft

Je nach gewählten Monat wird der korrigierte Wert per VBA vom Dummyfeld namens Kx in das Monats-Korrekturfeld geschrieben. Das klappt.
Nun soll's auch umgekehrt funktionieren. Beim Öffnen des Forms bzw. nach Wahl eines anderen Monats über Kombifeld sollen alle Wert der Monats-Korrekturfelder in die Dummy-Felder Kx geschrieben werden. Und das funzt nur beim ersten DS des Endlos-Forms bzw. nur bei einem Einzelnen Form.

Hier der Code für die ersten 2 Monate:

Private Sub Monat_AfterUpdate()

If Me.Monat = "01" Then Me.Kx = Korrekturwert_1
If Me.Monat = "02" Then Me.Kx = Korrekturwert_2
'...
Refresh

End Sub


Da fehlt noch was, damit das kompl. Recordset durchlaufen wird.
Wer kann helfen?

Gruß
Max
Win 10 pro 64 bit, Access 2003

MzKlMu

#2
Hallo,
warum fängst Du da ein neues Thema an ?
Ich habe das zusammengelegt.

Zum Thema:
Ich würde die Vorgabewerte und die echten Buchungen in einer Tabelle führen.
Mit einem Kennzeichen "Vorgabewert z.B.)
Wenn Du eine Buchung machst, wird (per Code) nachgesehen ob es für den Buchungsmonat und die Kostenart einen Eintrag, wenn ja, wird der Buchungsbetrag vom Vorgabewert abgezogen. Am Monatsersten werde die alten Vorgabewerte gelöscht.
Bei der Saldenbildung bleiben die Vorgabewerte außen vor.
Ist jetzt nur mal eine Idee, musst Du mal nachdenken. Scheint mir aber die
einfachste Lösung zu sein.

Nebenbei, ein Monat ist eine Zahl, (1) und kein Text ("01").
Gruß Klaus

MaxP

Hallo Klaus,

bei 2 Tabellen kann ich die DS der Vorgabentabelle jedes Jahr kopieren und anpassen. Und außerdem möchte ich Speicherplatz sparen, da bei 50 % der DS die 12 Monatszellen leer blieben.

Aber mein eigentliches Problem ist ja, unabhängig ob 1 oder 2 Tabs, wie ich alle DS im Recordset aktualsieren kann.
Die Monatszahl muss aber 2-stellig sein, um diese bei der Monatsfälligkeit über z.B. wie *02* herauszufiltern

GrußMax
Win 10 pro 64 bit, Access 2003

MzKlMu

#4
Hallo,
aus Deiner Beschreibung lässt sich erkennen, dass der von Dir vorgesehene Aufbau für eine Datenbank völlig unbrauchbar ist. Du machst eine Exceltabelle aber keine Datenbank. Bei Access darf es keine Monatszellen geben, die Buchungen und die Vorgabewerte werden mit einem Datum als je ein Datensatz erfasst., also nicht quer, sondern hochkant.
Die Buchung braucht dann noch ein Fremdschlüssel zum Konto und ein FS zur Kostenart.
Dann geht das auch mit der einen Tabelle wie von mir vorgeschlagen. Und leere Felder kann es nicht geben, weill nur dann ein Datensatz angelegt wird, wenn es eine Buchung oder ein Vorgabewert gibt. Und kopieren geht auch ganz einfach. Und filtern auf einem Monat kannst Du dann auch ganz einfach mit der Monatszahl und dem Jahr.

Löse Dich von der Exceldenke, eine Datenbanktabelle hat mit einer Exceltabelle nichts gemeinsam.

Zu Deinem gegenwärtigen Vorhaben wirst Du auch keine Hilfe bekommen, weil es da für Access keine brauchbaren Lösungen gibt und die demzufolge keiner hat.
Ich bin da auch komplett raus.

Zeige mal ein Bild des Beziehungsfensters.
Gruß Klaus

MaxP

Hallo,
soweit ich Dich richtig verstanden habe, müsste meine Beispiel-DB, die ich mit dem ersten Post hochgeladen habe, entsprechend Deiner Beschreibung aufgestellt sein.

Die Werte lassen sich alle editieren, okay, jedoch werden im Formular nur dann alle fälligen Vorgaben angezeigt, solange zum DS noch keine Buchungen in den Vormonaten existieren. Ob es an den Einstellungen in der Abfrage/Beziehungen liegt oder auf diese Weise gar nicht funktioniert, weiß ich halt nicht.

Gruß
Max
Win 10 pro 64 bit, Access 2003

MzKlMu

Hallo,
das würde ich dann doch deutlich anders machen.
Die Buchungen sollten mit einem Datum gebucht werden.
Dann sollte es für die Kostenart eine Tabelle geben.
Die Vorgabewerte würde ich mit einem Feld für die Häufigkeit pro Jahr versehen.
Ein Feld für das Jahr braucht es in dieser Tabelle nicht.
Zu Beginn des Jahres werden alle Vorgabewerte auf einen Schlag mit einer Anfügeabfrage übertragen. In dieser Abfrage wird auch abgefragt für welches Jahr.
Anzahl Datensätze je nach eingetragener Häufigkeit.
Wenn eine Buchung gemacht wird, wird automatisch nachgesehen ob es für diese Kostenart und den Monat eine Vorgabe gibt, wenn ja, wird der Buchungsbetrag von der Vorgabe abgezogen.
Dadurch muss nur die Tabelle mit den Buchungen gruppiert werden und Du hast jederzeit einen aktuellen Saldo unter Berücksichtigung der Vorgabewerte.


Geändertes Datenmodell anbei.
Gruß Klaus

MaxP

Hallo,
irgendwie funktioniert das nicht so, wie ich mir das vorgestellt habe.

Meine Lösung besitzt nun i.W. 2 Tabellen (Vorgabewerte und Buchungen). Im Form, das auf eine Abfrage aus den genannten Tabs basiert, werden alle fälligen Vorgabewerte gezeigt. Je nachdem welcher Monat gewählt wird, wird mittels Code bzw. Aktual.-Abfrage ein etwaiger Buchungswert zwischen Tabellenfeld und einem neutralen Buchungsfeld (Dummy) hin- und herkopiert. So bleibt das Form sehr übersichtlich.

Trotzdem Danke für die Hilfe.

Gruß
Max
Win 10 pro 64 bit, Access 2003

MzKlMu

Hallo,
Zitatirgendwie funktioniert das nicht so, wie ich mir das vorgestellt habe.
was funktioniert nicht ?

Ein Formular mit meinem Vorschlag wird garantiert übersichtlicher.
Ich würde es jedenfalls nach meinem Vorschlag machen.
Gruß Klaus