none
Kassenbuch Bericht Saldo Vortrag monatlich

    Frage

  • Hallo,

    nachdem mir hier vor kurzem so schnell geholfen wurde bitte ich um einen Lösungsansatz bei meinem neuen Problemchen. Mein Problem mal wieder der Übertrag des saldo von einem zum anderen Monat.

    Im Bericht berechnet mir das Feld Bestand einen Tagessaldo. Gruppiert wird nach Datum (monatlich). Neuer Monat neue Seite. Funktioniert auch Super.

     

    Doch soll mein Kassen-Bericht gefiltert durch ein Textfeld in einem Formular nur einen Monat ausgeben. Wenn die abfrage nach datum gefiltert wird kann ja kein Saldo übertrag vom vorigen Monat berechnet werden. 

    Kann mir da jemand helfen.


    Thomaselll
    Mittwoch, 16. Februar 2011 09:16

Antworten

  • hi Thomas,

    da wird Jet die Abfrage wohl zu komplex... Einfach umbauen:

    SELECT Q.Monat, Avg(Q.SaldoVormonat) AS SaldoVormonat
    FROM (
      SELECT   DateAdd("m",1,
        DateSerial(Year(O.Zeitpunkt),Month(O.Zeitpunkt),1)
        ) AS Monat,
        (SELECT  SUM(Betrag)
         FROM    vwKasse I
         WHERE   DateValue(I.Zeitpunkt) <=
           DateSerial(YEAR(O.Zeitpunkt), MONTH(O.Zeitpunkt), 31)
        ) AS SaldoVormonat
      FROM vwKasse AS O) Q
    GROUP BY Q.Monat;

    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 14:38
    Moderator
  • hi Thomas,

    deine Datenquelle im Unterbericht braucht auch ein künstliches Datumsfeld anlog zum Hauptbericht

    DateSerial(YEAR(Zeitpunkt), MONTH(Zeitpunkt), 1) AS Monat

    mit dem du die Verknüpfung zwischen Haupt- und Unterbericht machst.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 15:45
    Moderator

Alle Antworten

  • hi Thomas,

    das kommt ganz darauf an, wie dein Saldo auf dem Bericht berechnet wird.

    Aber wie gesagt, für das Kassenbuch ist das Saldo ein wichtiges Attribut, welches trotz Berechenbarkeit gespeichert werden darf. Im Besonderen gilt bei sämtlichen steuerlich relevanten Zahlen, das oftmals das Speichern besser ist, da du sonst auf Grund von Rundungen in das Problem läufst inkorrekte Summen zu bekommen: Summe der einzelnen Werte <> Summe Total auf Rechnung.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 09:44
    Moderator
  • Berechnet wird der Saldo im Bericht in einem ungebundenden Feld Bestand mit Summe über alles.

    Speichern wollte ich vermeiden.

    Dachte an sowas wie Abfrage2 (Monatsdaten) holt sich daten einer Abfrage1 (Alle Buchungen).

    Problem ist halt die weitergabe und berechnung des Tagessaldo in abfrage 1 und 2.

    Oder sollte ich ne andere lösung suchen.

    An eine Union abfrage von Abfrage 1 dachte ich auch schon Problem halt mit der weitergabe und berechnung 

     

    Oder ganz raffiniert meinen bestehenden Kassenbericht öffnen und nur die Seit(en) anzeigen die mit dem Formularfilter (also irgendein Monat) ausgewählt wurde.


    Thomaselll
    Mittwoch, 16. Februar 2011 10:24
  • hallo Thomas,

    ohne es jetzt zu testen ist es ein bischen schwierig zu bewerten, aber mit einer UDF auf dem Bericht ist es wohl am einfachsten gelöst. D.h. anstatt der Laufenden Summe ein =Monatssaldo(idEintrag) mit einer Funktion ungefähr so (Luftcode):

    Private m_PreviousBalance As Currency
    Private m_CurrentData As DAO.Recordset
    Private m_CurrentMonth As Long
    
    Public Function Monatssaldo(idEintrag As Long) As Currency
       Dim Result As Currency
       Result = 0
       If m_CurrentData Is Nothing Then
        ' Initialisieren der Private Variablen
      End If
       m_CurrentData.FindFirst "idEintrag = " & idEintrag
      If m_CurrentData.NoMatch Then
        ' Falscher Monat
        ' Initialisieren der Private Variablen
      End If
       Result = m_PreviousBalance
      Do While Not m_CurrentData.Bof
        Result = Result + m_CurrentData![Betrag]
        m_CurrentDate.MovePrevious
      Loop
       Monatssaldo = Result
    
    End Function

    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 11:50
    Moderator
  • Hallo,

    danke erstmal.

    so wie ich als mehr oder weniger besserer anfänger die Funktion deute soll der IDEintrag bei mir meine BuchungsposNr sein. Richtig?

    Mein Bericht beruht auf einer gruppierten Abfrage:

    SELECT DISTINCTROW Sum(qry_Kassendaten.Betra) AS [Summe  von  Betra], qry_Kassendaten.Nummer, qry_Kassendaten.Datum, qry_Kassendaten.Text, qry_Kassendaten.PositionKassenbuch
    FROM qry_Kassendaten
    GROUP BY qry_Kassendaten.Nummer, qry_Kassendaten.Datum, qry_Kassendaten.Text, qry_Kassendaten.PositionKassenbuch
    ORDER BY qry_Kassendaten.Datum;

    Denke das funktioniert so nicht.


    Thomaselll
    Mittwoch, 16. Februar 2011 12:13
  • sevus Thomas,

    Wie gesagt ohne es komplett jetzt zu lösen ist es schwierig zu beurteilen. Ein anderer möglicher Weg:

    Haupt-Bericht mit Unterbericht anstatt Gruppierung

    Der Hauptbericht basiert auf eine gruppierten Abfrage.

    SELECT  DateAdd("m",1 ,
              DateSerial(YEAR(O.Datum), MONTH(O.Datum), 1)) AS [Monat] ,
            (SELECT  SUM(Betra)
             FROM    qry_Kassendaten I
             WHERE   DateValue(I.Datum) <=
               DateSerial(YEAR(O.Datum), MONTH(O.Datum), 31)
               ) AS [SaldoVormonat]
    FROM    qry_Kassendaten O
    GROUP BY DateAdd("m",1 ,
              DateSerial(YEAR(O.Datum), MONTH(O.Datum), 1)) ;

    Der Unterbericht zeigt dann die entsprechenden Monatsdaten an und du kannst das Saldo über Me.Parent![SaldoVormonat] im Unterbericht nutzen.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 12:48
    Moderator
  • Sorry bin halt doch Anfänger.

    Hört sich gut an.

    Ich sehe was die Hauptbericht Abfrage machen soll:

    SELECT  DateAdd("m",1 ,
              DateSerial(YEAR(O.Datum), MONTH(O.Datum), 1)) AS [Monat] ,
            (SELECT  SUM(Betra)
             FROM    qry_Kassendaten I
             WHERE   DateValue(I.Datum) <=
               DateSerial(YEAR(O.Datum), MONTH(O.Datum), 31)
               ) AS [SaldoVormonat]
    FROM    qry_Kassendaten O

    Monat              SaldoVormonat

    01.02.2011       678,-

    01.03.2011       345,-

    usw.

    Sobald ich aber gruppiere mit :

    GROUP BY DateAdd("m",1 ,
              DateSerial(YEAR(O.Datum), MONTH(O.Datum), 1)) ;

    Kommt die Meldung
    Sie wollten eine Abfrage ausführen, die den Ausdruck"tbl_Buchungen.Datum" nicht als Teil derAggregatfunktion einschließt.


    Thomaselll
    Mittwoch, 16. Februar 2011 14:17
  • hi Thomas,

    da wird Jet die Abfrage wohl zu komplex... Einfach umbauen:

    SELECT Q.Monat, Avg(Q.SaldoVormonat) AS SaldoVormonat
    FROM (
      SELECT   DateAdd("m",1,
        DateSerial(Year(O.Zeitpunkt),Month(O.Zeitpunkt),1)
        ) AS Monat,
        (SELECT  SUM(Betrag)
         FROM    vwKasse I
         WHERE   DateValue(I.Zeitpunkt) <=
           DateSerial(YEAR(O.Zeitpunkt), MONTH(O.Zeitpunkt), 31)
        ) AS SaldoVormonat
      FROM vwKasse AS O) Q
    GROUP BY Q.Monat;

    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 14:38
    Moderator
  • Funkioniert aber gleich nächste Prob. Sorry

     

    Will ich mit dem Assistenten den Bericht mit Unterbericht erstellen kommt:

    Sie haben Felder von Datenherkünften gewählt, die der Assistent nicht verbinden kann. Sie haben möglicherweise Felder aus einer Tabelle und einer auf dieser Tabelle basierenden Abfrage gewählt. Sollte dies der Fall sein, versuchen Sie bitte Felder nur aus der Tabelle oder nur aus der Abfrage zu wählen



    Thomaselll
    Mittwoch, 16. Februar 2011 15:37
  • hi Thomas,

    deine Datenquelle im Unterbericht braucht auch ein künstliches Datumsfeld anlog zum Hauptbericht

    DateSerial(YEAR(Zeitpunkt), MONTH(Zeitpunkt), 1) AS Monat

    mit dem du die Verknüpfung zwischen Haupt- und Unterbericht machst.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 16. Februar 2011 15:45
    Moderator
  • Hi,

    Hauptbericht und Unterbericht funktioniert jetzt.

    Filtere nun mit einem Kombi in einem Formular.

    Doch wie Saldo mit Me.Parent![SaldoVormonat] nutzen.

     


    Thomaselll
    Mittwoch, 16. Februar 2011 21:39
  • hi,

    siehe

    http://www.accessmonster.com/Uwe/Forum.aspx/access-reports/8917/Reference-MainReport-Control-in-Subreport


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Donnerstag, 17. Februar 2011 10:08
    Moderator
  • Hi,

      das war klar das ich den Saldo so auf den Unterbericht bekomme,  so ist es ja aber nur ein "Übertrag".

    Einen Bericht, der mir für jeden neuen Monat eine neue Seite macht, einen Übertrag (Monatssaldo) und fortlaufenden Tagessaldo (Summe über alles) habe ich ja.

    Mein Prob war ja z.B.: Vergehen jetzt sag ich mal 12 Monate mit je 2 Seiten habe ich 24 seiten und muß dem Drucker sagen  druck mir x -y.

     

    Ich dachte ich kann den Monatssaldo als Anfangsbestand nutzen um in dem gefiltertem Bericht wieder einen Tagessaldo mit Summe über alles zu berechnen.


    Thomaselll
    Donnerstag, 17. Februar 2011 11:24
  • Hallo zusammen,

    bin beim stöbern auf diesen doch etwas älteren Beitrag gestoßen und würde ihn gerne aufgreifen.
    Denn ich habe ein ganz ähnliches Problem nur einen etwas anderen Ansatz.
    Bei diesem wurde mir auch schon geholfen an anderer Stelle.
    Auch ich filtere mir den gewünschten Monat aus einem Formular heraus und öffne dann einen Bericht (rptCashBook).
    Im Berichtskopf habe ich zwei Textfelder mit folgenden Dateninhalten:
    AktSaldo =Summe([betrag])
    GesSaldo =DomSumme("Betrag";"qryCashBook")
    Im Seitenkopf dann ein Feld txtCarryOver =[gesSaldo]-[AktSaldo].
    Hier stimmt die Berechnung schon nicht.
    Als Datenquelle für den Bericht habe ich die folgende Abfrage:

    SELECT a.crid, 
           a.receiptnumber, 
           a.bookingtypeid, 
           a.amount, 
           Iif([faktor] = 1, [amount])             AS Einnahme, 
           Iif([faktor] = -1, [amount])            AS Ausgabe, 
           [amount] * [faktor]                     AS Betrag, 
           a.recipient, 
           a.usage, 
           a.account, 
           a.place, 
           a.dateofpayment, 
           a.notes, 
           a.confirmation, 
           a.timestamp, 
           b.bookingtype, 
           b.faktor, 
           Year(Dateadd("m", -2, [dateofpayment])) AS GJ 
    FROM   tblbookingtypes AS b 
           INNER JOIN tblcashregister AS a 
                   ON b.bookingtypeid = a.bookingtypeid 
    ORDER  BY a.dateofpayment; 

    Ich habe hier mal ein Beispiel hochgeladen. Ist vielleicht einfacher. Bei Fragen gerne melden.
    mcCashBook_Entwurf

    Freue mich über jeden Rat.

    Viele Grüße aus Hamburg

    Armin

    P. S.: Wie es aussieht gibt es auch ein kleines Problemchen beim Wechsel des Geschäftsjahres welches in diesem Fall am 01.03. anfängt.


    • Bearbeitet armin.gregor Mittwoch, 6. April 2016 16:08 Nachtrag
    Mittwoch, 6. April 2016 13:21
  • Am 06.04.2016 schrieb armin.gregor:

    bin beim stöbern auf diesen doch etwas älteren Beitrag gestoßen und würde ihn gerne aufgreifen.
    Denn ich habe ein ganz ähnliches Problem nur einen etwas anderen Ansatz.

    Dieser Thread ist als erledigt markiert und dieser Thread ist sehr alt
    und er ist nicht von dir. Fremde Threads kapert man nicht.

    Erstelle bitte einen neuen eigenen Thread und liefere mehr Infos zum
    OS und zur verwendete Access-Version, Danke.

    Servus
    Winfried


    Access-FAQ: http://www.donkarl.com/AccessFAQ.htm Access-Stammtisch: http://www.access-muenchen.de
    NNTP-Bridge für MS-Foren: http://communitybridge.codeplex.com/
    vbeTwister: http://www.vbetwister.com/

    Mittwoch, 6. April 2016 16:09
  • Moin Winfried,

    mach ich Danke. :)


    Viele Grüße aus HH Armin 1 If Problem > Wissen Then 2 UseSuFu(Problem) 3 UseGoogle(Problem) 4 End If

    Mittwoch, 6. April 2016 16:14