Neuigkeiten:

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

Mobiles Hauptmenü

Datensatz duplizieren in Endlosformular und beide anzeigen

Begonnen von Heidegeist2000, Februar 22, 2024, 17:22:39

⏪ vorheriges - nächstes ⏩

Heidegeist2000

Hallo zusammen,
ich versuche mal meine Unkenntnis in einer Kurzfassung zu schildern, es handelt sich nämlich wahrscheinlich für die meisten um kein Problem...

Ich habe mir eine kleine Datenbank zur Finanzverwaltung gstrickt. Ich hole mir die Daten hiefür von der Bank (quasi das was auf dem Kontoauszug steht in elektronischer Form) und sortiere dann die Umsätze bestimmten Kategorien zu. Zusätzlich erfasse ich zu manchen Umsätzen auch Rechnungsdaten. Also als Beispiel, Versicherung bucht die Versicherungsprämie vom Konto ab, ich hinterlege für den Umsatz in der Datenbank das es sich um einen Versicherungsbeitrag handelt und die Rechnungsnummer 12345 dazu gehört.

Jetzt kommt es vor das ich den Umsatz splitten muss weil z.B. via Paypal verschiedene Sachen zusammen gekauft wurden und ich mehrere Rechnungen einem Umsatz zuordnen muss.

Ganz bewusst habe ich jetzt auf eine 1:n Beziehung zwischen Umsatz und Rechnung verzichtet und arbeite hier mit einer 1:1 Beziehung weil es für mich einfacher in der Handhabung ist.

Das Datenmodell besteht aus

tblUmsätze - wird über die Bankdaten befüllt
tblRechnungen
tblHauptkategorie
tblKonto
tblProjekt
tblUnterkategorie

tblUmsätze - tblRechnungen 1:1
alles andere 1:n zu tblUmsätze


Jetzt habe ich ein Formular "frmAusgaben" basierend auf einer Abfrage, in dem ich dem Umsatz die Kategorie zuweise und eine Rechnungsnummer sowie weitere Daten.

Aus dem Formular kann ich per Button "splitten" ein Endlosformular "frmUmsatz_splitten" öffnen


DoCmd.OpenForm "frmUmsatz_splitten", acNormal, , "UmsatzID=" & Nz(Me.UmsatzID, 0), , acWindowNormal

Das Endlosformular "frmUmsatz_splitten" öffnet sich mit dem Datensatz der gerade in "frmAusagaben" gezeigt wurde.

Hier gibt es den Button "neuer Splittbetrag" mit dem ich es hinbekomme einige Daten aus dem Datensatz zu kopieren und als neuen Datensatz anzulegen.


Private Sub neuer_Splittbetrag_Click()

Me.Orig_Betrag = Me.Betrag

Dim DB As DAO.Database
Dim rs As DAO.Recordset

Set DB = CurrentDb
Set rs = DB.OpenRecordset("tblUmsaetze")

   
    rs.AddNew
        rs!KontoID_FS = Me!KontoID_FS.Column(1)
        rs!Auftragg_Empf = Me!Auftragg_Empf
        rs!Verwendungszweck = Me!Verwendungszweck
        rs!Buchungstag = Me!Buchungstag
        rs!Wertstellung = Me!Rechnungsdatum
        rs!Orig_Betrag = Me!Orig_Betrag
       
        rs.Update
 
        rs.Close
        Set rs = Nothing
        Set DB = Nothing
       
        Me.Orig_Betrag = Me.Betrag
       
   
       
       
     
       
End Sub

Die neuen / kopierten Daten stehen in der Tabelle, aber im Endlosformular wird nur der ursprüngliche Datensatz gezeigt.
Was muss ich tun damit der neue Datensatz ebenfalls angezeigt wird?

Ich würde dann im nächsten Schritt einen weiteren Button anlegen, mit dem ich das Endlosformular "frmUmsatz_splitten" wieder schließe und zum "frmAusgabe" zurückkehre oder auch die Daten wieder verwerfen kann.

Die "Goldlösung" wäre natürlich, dass ich im Endlosformular den Betrag nicht nur 1x splitten kann, aber wir wollen mal nicht übermütig werden. ;-)










MzKlMu

#1
Hallo
mache aus der 1:1 Beziehung 1:n und du kannst splitten wie du lustig bist und so oft du willst.
Ohne irgendwelche Verrenkungen machen zu müssen und ohne einen Buchstaben VBA. Wenn der Buchungsbetrag auch zu verschiedenen Kategorien gehören kann müssten diese auch in der Rechnungstabelle erfasst werden.
Darstellung der Rechnungspositionen in einem Endlosunterformular.
Gruß Klaus

Beaker s.a.

Hallo,
ZitatDarstellung der Rechnungspositionen in einem Endlosunterformular.
Die braucht er wahrscheinlich nicht, die kommen ja auch nicht von der Bank.
Ich würde das mit einen Selfjoin der Tabelle "Umsaetze" machen. Da kann ich dann
die Splitbuchungen in ein UFo packen.

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)

Heidegeist2000

Vielen Dank für deine schnelle Rückmeldung. Im Prinzip hast du vollkommen recht und es müsste sogar eine m:n Beziehung sein weil manchmal auch mehrer Umsätze zu einer Rechnung gehören. Diese Datenmdell hatte ich in der Vergangeheit in einer anderen Version meiner Finanzverwaltung, aber das wird so aufwendig für mich, dass ich es nur mit viel Hilfe aus dem Forum ändern kann.

Wenn ich deinen Vorschlag befolge, müsste ich die Rechnungsdaten im Umsatzformular als Unterformular darstellen. Zudem wird die Auswertung für mich aufwendiger. Daher habe ich mich für dieses Modell entschieden, gebe dir aber vollkommen recht das mein Datenmodell eine Krücke für meine bescheidenen VBA Kenntnisse ist. Im Übrigen sind es vielleicht 10 - 20 Umsätze pro Jahr die gesplittet werden. Dafür lohnt sich tatsächlich der Aufwand nicht.

Aber die gute Nachricht ist, ich habe es gerade selber hinbekommen und zwar mit folgenedem Code:


Me.Orig_Betrag = Me.Betrag

DoCmd.RunCommand acCmdSelectRecord
     DoCmd.RunCommand acCmdCopy
     DoCmd.RunCommand acCmdRecordsGoToNew
     DoCmd.RunCommand acCmdSelectRecord
     DoCmd.RunCommand acCmdPaste
     Me.Orig_Betrag = Me.Betrag

Heidegeist2000

Passt zwar gerade nicht zum Thema, trotzdem versuche ich mal mein Glück. Im Formular habe ich die Kategorie als Kombifeld . Datenherkunft ist die Tabelle: Hauptkategorie, Steuerelement: HauptkategorieID_fs,
dann zwei Spalten  und  Spaltenbreite auf 0;5cm und es funktioniert hervorragend, aber wie um Himmelswillen bekomme ich die Einträge von A-Z sortiert und nicht nach der Reihenfolge der ID?

MzKlMu

Hallo,
das Kombi hat doch eine Abfrage, dort kannst du sortieren.
Gruß Klaus

Beaker s.a.

Hallo,

Dein erster Code gefiel mir besser. Das DoCmd-Objekt gibt es m.W. nur noch aus
Komptabilitätsgründen zu früheren Versionen.
ZitatWas muss ich tun damit der neue Datensatz ebenfalls angezeigt wird?
Wenn du einen DS per VBA anfügst bekommt das Formular das gar nicht mit. Du musst
also die DS-Herkunft erneut abrufen
Me.RequeryIch frage mich allerdings wie du die Splitbuchungen dem DS von der Bank zuordnest, -
mit der RechnungsNr ?
ZitatWenn ich deinen Vorschlag befolge, müsste ich die Rechnungsdaten im Umsatzformular als Unterformular darstellen.
Nein, m.E. einfach als Kombi. Ins UFo kommen die Splitbuchungen.
D.h. HFo und UFo haben die gleiche DS-Herkunft (Umsaetze). Wenn meine o.a. Annahme
richtig ist werden die dann über die RechnungsNr verknüpft.

Zeige doch mal ein Bild des Beziehungsfensters.

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)

Heidegeist2000

Moin,
mein erster Code war sicherlich "eleganter" wenn man VBA beherrscht, der zweite funktioniert aber... ;-)
Ich bin wirklich eine Null was Code angeht und meistens nicht mal in der Lage einen "allgemein" gehaltenen Tip aus dem Forum auf meine Situation anzuwenden. Wenn ich etwas Zeit habe, versuche ich aber deinen Vorschlag mit Me.Requery umzusetzen.

Die Zuordnung der Splittbuchung zur Bank ist eigentlich nicht gegeben. Ich verändere auch den DS von der Bank, allerdings gibt es ein Ja/Nein Feld "Splittbuchung"  das ich markiere bei einem Splitt und zusätzlich speichere ich den Originalbetrag des Bank DS in dem Feld "Orig_Betrag".

Das ist keine elegante Lösung, reicht für meine Zwecke aber aus.

Die Idee mit dem Komi finde ich sehr interessant. Ich muss mal sehen ob ich das umsetzen kann. Ich bin allerdngs fast fertig mit meiner Version der DB und weiß nicht ob ich die Zeit finde nochmal von vorne anzufangen mit dem geänderten Datenmodell.

Anbei noch des Beziehungsfenster.

Vielen Dank für eure Unterstützung.