kwartaalrapport Noordenwind fout

Status
Niet open voor verdere reacties.

Dencar77

Gebruiker
Lid geworden
15 mrt 2013
Berichten
131
Beste allen,

afgelopen week heb ik de database Noordenwind mbt het "Dialoogvenster Verkooprapport" in mijn eigen database nagebouwd. Natuurlijk heb ik velerlei verschillende velden dan Noordenwind. Dat is geen probleem.

Het is mij gelukt om de "dialoogvenster Verkooprapporten" bij mij ook werkend te krijgen. Schouderklopje bij mezelf ;)

ECHTER...wat ik miste was bij de kwartaalrapporten de cijfers bij het 3e kwartaal!. Ik begreep even niet waarom deze niet mijn gegevens naar boven haalde.
Ik liep de gegevens na in de VBA modules welke betrekking hadden op de kwartalen. Vervolgens bekeek ik de standaard database Noordenwind en zag dat daar dezelfde fout in zat. Daar liep ik vervolgens wat gegevens na en kwam tot de conclusie dat de fout in de vba zit gecombineerd met een "maandvankwartaal"veld van de query.

Dit viel me op:

VBA kwartaalrapport

Code:
Option Compare Database
Option Explicit

Private Sub Report_Open(Cancel As Integer)
    On Error GoTo ErrorHandler
    Dim strSQL As String
    
    If IsNull(TempVars![Weergeven]) Or IsNull(TempVars![Jaar]) Or IsNull(TempVars![Kwartaal]) Or IsNull(TempVars![Groeperen op]) Then
        DoCmd.OpenForm "Dialoogvenster Verkooprapporten"
        Cancel = True
        Exit Sub
    End If
    
    strSQL = "TRANSFORM CCur(Nz(Sum([Verkoop]),0)) AS X"
    strSQL = strSQL & " SELECT [" & TempVars![Weergeven] & "] as SalesGroupingField FROM [Verkoopanalyse] "
    strSQL = strSQL & " Where [Kwartaal]=" & TempVars![Kwartaal] & " AND [Jaar]=" & TempVars![Jaar]
    strSQL = strSQL & " GROUP BY [" & TempVars![Groeperen op] & "], [" & TempVars![Weergeven] & "]"
    strSQL = strSQL & " Pivot [Verkoopanalyse].[MaandVanKwartaal] In (1,2,3)"
    
    Me.RecordSource = strSQL
    Me.SalesGroupingField_Label.Caption = TempVars![Weergeven]

    Dim iMonth As Integer
    Dim iStartMonth As Integer
    Dim iEndMonth As Integer
    iStartMonth = ((TempVars![Kwartaal] - 1) * 3) + 1
    iEndMonth = iStartMonth + 2
    For iMonth = iStartMonth To iEndMonth
        Me.Controls((iMonth - iStartMonth + 1) & "_Label").Caption = Format(DateSerial(2005, iMonth, 1), "mmm")
    Next iMonth
    
Done:
    Exit Sub
ErrorHandler:
    ' De opdracht Resume wordt uitgevoerd bij foutopsporing
    If eh.LogError("Kwartaalverkooprapport_Open", "strSQL = " & strSQL) Then
        Resume
    Else
        Cancel = True
    End If
End Sub

QUERY behorende bij kwartaalrapport
-verkoopanalyse
In deze query wordt de datum (orderdatum) gebruikt voor andere velden, namelijk jaar en maand en kwartaal en
maandvankwartaal, in dezelfde query. Deze velden worden dus automatisch uit de datum gehaald.
Nu zal je merken dat in maandvankwartaal de cijfers; 0 en 1 en 2 voorkomen (dus geen 1,2,3...CRUCIAAL!)

Nu zou maand 0 dus de eerste maand van het kwartaal moeten zijn, maar dat is het dus niet. Maand 1 is de eerste maand van het kwartaal, 2 is de tweede maand van het kwartaal en 0 is de derde maand van het kwartaal.
Deze 0 zou dus terug moeten komen in het kwartaalrapport, maar daar zit dus de fout in en ik kom er even niet uit hoe ik de juiste VBA codering moet maken om dus maand 3 (0) terug te laten komen in het kwartaalrapport.

Wie kan mij dus helpen om de VBA code correct te maken waarbij de 0 uit de queryveld terug te zien is in de VBA code van het kwartaalrapport als zijnde de 3e maand van de kwartaal?
 
Er bestaat geen kwartaal 0; kwartalen lopen echt van 1-4. Maar doe er een voorbeeldje bij, zou ik zeggen...
 
Ik zou graag je de gehele database dan wel alleen het nodige willen sturen, maar ik voer nog steeds een strijd uit tegen mijn anti-ik-wil-delen programma's op mijn computer :(

Maar onderstaande zijn de gegevens. Probeer deze maar eens uit op een reguliere datumgroep. Dan merk je dat in het MaandvanKwartaal je wel degelijk de cijfer 0,1 en 2 te zien krijgt.

dit is de code die gebruikt wordt voor de maand uit de kwartalen te halen.
Code:
MaandVanKwartaal: (Month([datum]) Mod 3)

Maand volledig code
Code:
Maandnaam: Format([datum];"mmmm")

Kwartaalcode
Code:
Kwartaal: DatePart("q";[datum])

Maandcode:
Code:
Maand: Month([datum])

Jaarcode:
Code:
Jaar: Year([datum])

Dit is het (query)veld waaruit ik de bovenstaande gegevens haal.
[datum]
 
Laatst bewerkt:
Behalve dat de functie MaandVanKwartaal een ongelukkige uitkomst geeft (0 mag natuurlijk niet, moet 3 zijn) klopt het rapport gewoon. Ik snap je probleem niet helemaal. Overigens is het geen kruistabel op basis van kwartalen, maar van maanden binnen een kwartaal. Dus de records gegroepeerd op Januari-April-Juli-Oktober, Februari-Mei-Augustus-November etc. Of je daar wat aan hebt?
Ik zou dus, voor een kwartaal query dit gebruiken:
Code:
PIVOT Verkoopanalyse.Kwartaal In (1,2,3,4);
En voor een betere berekening van de MaandVanKwartaal deze formule:
Code:
MaandVanKwartaal: IIf(Month([Orderdatum]) Mod 3=0;3;Month([Orderdatum]) Mod 3)
 
Klopt idd dat het rapport wel klopt. Het euvel heb je idd goed, ik wil de maanden uit de kwartaal halen. Deze berekening welke in noordenwind 2007 in het kwartaalrapport staan berust inderdaad op de 0 ipv de 3.de 1 en 2 staan goed. Dus er komen geen gegevens in het 3e kolom zo. Helaas heb ik nu niet de computer bij me en reageer middels smartphone. Ik zal straks wanneer ik thuis ben je code proberen. michel enorm bedankt voor het meehelpen van het oplossen van mijn probleem.
 
En jawel, redder in nood. Net je code
Code:
MaandVanKwartaal: IIf(Month([Orderdatum]) Mod 3=0;3;Month([Orderdatum]) Mod 3)
geplaatst in de query ipv
Code:
MaandVanKwartaal: (Month([datum]) Mod 3)
en het werkt!

Super bedankt Michel.:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan