variable in rapport

Status
Niet open voor verdere reacties.

jwaque

Verenigingslid
Lid geworden
16 aug 2006
Berichten
440
ik wil in VBA een berekening uitvoeren (ik kan het wel in een query maar met sql wordt het zo snel onoverzichtelijk).

Hoe krijg ik het resultaat van mijn berekening in een rapport.

bv in mijn tabel heb ik een aantal en prijs. en in mijn rapport wil ik dan aantal, prijs en kosten. kosten is via een vba code berekend als prijs*aantal
 
Ik snap eerlijk gezegd niet waarom je de berekening niet in een query maakt; kwestie van een extra veld aanmaken met daarin de formule Kosten:=[Prijs]*[Aantal]. In je rapport heb je het veld dan gewoon in je lijst met velden staan, en kun je hem in je rapport zetten. Bovendien kun je dan in de voettekst van de sectie sommeren op basis van het veld Kosten. Lijkt mij meer dan voldoende.... Bovendien zit je nu ook met het probleem dat je de berekende prijs vermoedelijk niet opslaat in een tabel, dus wat doe je dan met de facturen etc. als je prijswijzigingen hebt doorgevoerd? Dan laten je rapporten ook ineens hele andere waarden zien. Dus hoe los je dat op?
 
Bedankt octafish,
inderdaad zou het hierbij kunnen. De berekening die ik wil doen is echter een stuk ingewikkelder. Ik kan die ook wel in een query zetten maar doordat het wat in gewikkeld is denk ik dat het overzichtelijker zou zijn in een vba code omdat ik er dan ook per stap bij kan schrijven wat ik doe. maar dan moet ik wel iets met de uitkomst kunnen doen. het lukt me wel om de uitkomst van deze simpele berekening in een msgbox weer te geven maar niet in een rapport of tabel.

kort wat ik wil. Ik heb een dosis. deze kan worden samengesteld uit grote of kleine flacons. dit wil ik zo nauwkeurig mogelijk zodat ik weinig verlies heb. (dit is gelukt in een query) echter indien de dosis door verlaging met max 10% tot ' helere' flacons lijdt dan wil ik een aangepaste dosis gebruiken. Ook wil ik als meerdere kleine flesjes het zelfde opleveren als 1 grote toch een grote gebruiken. ondertussen moeten dosissen nog omgerekend worden naar eenheden afhankelijk van het soort.
een voorbeeld:

dosis 1000 flacons 500 en 100 dus 2 grote
dosis 1150 2 groot en 1 klein afronden naar 1100
dosis 950 2 grote
 
Ik neem aan dat je een functie hebt gemaakt voor die berekening, want je geeft aan dat je de uitkomst wel in een msgbox krijgt. Hoe ziet die functie er uit?
 
ik was helemaal in beslag genomen door andere werkzaamheden. Mijn excuses daarvoor. Terug naar mijn wens. Aie mijn SQL query onderaan. Hij werkt maar is nog niet volledig. Ik hoop dat je het met mij eens bent dat het onleesbaar is (zeker voor een onervaren iemand als ik). Ik hoopte mbt een VBA code het zelfde te bereiken maar dan leesbaarder opgeschreven.
Dus ik ben begonnen met een simpele berekening. Ik weet alleen niet hoe ik het antwoord in een rapport/tabel oid kan wegschrijven. in een msgbox lukt dus het rekenen gaat goed.
Code:
Private Sub Knop0_Click()

With CurrentDb.OpenRecordset("ATC")
    .MoveFirst
    Do While Not .EOF
        'defineren ontvanger en actienemer met veld uit recordset
        Groot = !CTGgroteflacon
        factor = !declaratiefactor
        ATC = !ATC
        'report openen voor eerste naam
strSQL = Groot * factor
MsgBox "ATC:" & ATC & strSQL
       
       'voorgaande herhalen
        
        .MoveNext
    'herhalen tot einde van de recordset
    Loop
End With

    
End Sub
Code:
SELECT [ATC codes CTG addon].Dagberekening, [ATC codes CTG addon].[Omschrijving declaratiecode], [ATC codes CTG addon].Declaratiecode, Qmedicatieselectie.medPID, DatePart("m",[MedDatumStart]) AS StartDatum, Qmedicatieselectie.medDatumStart, IIf([medDosEh]="ml",[medDosDag]*[Conversiefactor],[medDosDag]) AS MedAantal, IIf([Drankberekening]="ja",[DrankEenheden]/[declaratiefactor]*[ATC codes CTG addon].CTGgroteflacon,[Declareer]/[declaratiefactor]) AS DeclaratieEenheid, [ATC codes CTG addon].[Tarief in €], [DeclaratieEenheid]*[Tarief in €] AS CTGDeclaratie, [ATC codes CTG addon].Dagberekening, IIf([Dagberekening]="ja" And [Drankberekening]="nee",[CTGDeclaratie]*[AantalDagen],[CTGDeclaratie]) AS CTGgecorrigeerd, DateDiff("d",[medDatumStart],[medDatumStop])+1 AS AantalDagen, Fix([MedAantal]/[ATC codes CTG addon]!CTGgroteflacon) AS GroteFlacons, [MedAantal]-([ATC codes CTG addon]!CTGgroteflacon*[GroteFlacons]) AS AantalOver, -Int(-([AantalOver]/[CTGkleineflacon])) AS kleineFlacon, [kleineflacon]+[groteflacons] AS SubAantal, ((-Int(-([MedAantal]/[ATC codes CTG addon]!CTGgroteflacon))*[CTGgroteflacon]))-[MedAantal] AS Verschil, IIf([Verschil]<[CTGomslag],-Int(-([MedAantal]/[ATC codes CTG addon]!CTGgroteflacon))*[ATC codes CTG addon]!CTGgroteflacon,[DeclareerEenheden]) AS Declareer, ([kleineflacon]*[ATC codes CTG addon]!CTGkleineflacon)+([groteflacons]*[ATC codes CTG addon]!CTGgroteflacon) AS DeclareerEenheden, Qmedicatieselectie.artsNaam, IIf([MedAantal]=0,[medDos1] & [medDos2] & [medDos3] & [medDos4] & [medDos5] & [medDos6],"") AS toelichting, Qmedicatieselectie.medDatumStop, [ATC codes CTG addon].Drankberekening, IIf([Drankberekening]="ja",-Int(-(([MedAantal]*[AantalDagen])/[ATC codes CTG addon]!CTGgroteflacon))) AS DrankEenheden, [ATC codes CTG addon].NietDeclareerbaar, Qmedicatieselectie.medArtikelNr
FROM [ATC codes CTG addon] LEFT JOIN Qmedicatieselectie ON [ATC codes CTG addon].ATC = Qmedicatieselectie.artATCCd
WHERE ((([ATC codes CTG addon].Dagberekening)="nee") AND ((DatePart("m",[MedDatumStart]))=DatePart("m",DateAdd("m",-1,Now()))) AND ((Qmedicatieselectie.medDatumStart)>DateAdd("m",-2,Now()) And (Qmedicatieselectie.medDatumStart)<DateAdd("m",2,Now())) AND (([ATC codes CTG addon].NietDeclareerbaar) Is Null))
ORDER BY [ATC codes CTG addon].[Omschrijving declaratiecode], Qmedicatieselectie.medPID, DatePart("m",[MedDatumStart]);
 
Laatst bewerkt:
Resultaten van een berekening wegschrijven is niet nodig, als de gegevens zelf niet veranderen. Als de declaratiefactor en de CTGgroteflacon vast liggen in de tabel, en dus niet muteren a.d.h. bijvoorbeeld prijsmutaties op basis van datum, dan hoef je de uitkomst van die berekening niet op te slaan. Je kunt hem uiteraard wel laten zien, en dat is denk ik ook wat je wilt.

In een rapport maak je berekeningen op basis van de eigenschap <Bij opmaken> van de Detailsectie. Je berekening zou er dan zo uit kunnen zien:
Code:
Private Sub Details_Format(Cancel As Integer, FormatCount As Integer)
Dim Groot As Integer, Factor As Integer
    Groot = Me.CTGgroteflacon
    Factor = Me.declaratiefactor
    Me.ATC = Groot * Factor
End Sub
 
Beste Michel,
gelukkig is het nog niet zo simpel als ik dacht te lezen. Ik heb ik mijn tabel al een veld ATC staan. Deze naam was in mijn voorbeeld dus wat ongelukkig gekozen. Maar als ik me.ATC wijzig in me.resultaat dan moet ik een veld resultaat in mijn rapport opnemen want ik wil inderdaad het resultaat zien.

Dit levert een compileerfout: kan de methode of gegevenslid niet vinden

waarschijnlijk omdat het veld 'resultaat' geen onderdeel is van de tabel die als input voor het rapport dient. Dus resultaat veld in de tabel erbij zetten, al lijkt me dit niet nodig omdat het een berekend veld is en geen invoer.

Ik kan nu wel een tekstvak 'resultaat' op mijn rapport zetten. maar krijg nog steeds de error
 
Je wilt het resultaat zien, zeg je. Dat is wat anders dan het resultaat Opslaan. Nogmaals: berekeningen sla je in beginsel nooit op in een database: alles wat kan worden berkend, laat je berekenen (en zien uiteraard!).
 
hoi michel,
niet opslaan is prima. maar als ik het resultaat in mijn rapport wil zien zal ik toch een veld in mijn rapport moeten maken?? Hoe noem ik dit veld (controle source) zodat het resultaat er in terrecht komt?
 
Kijk naar mijn voorbeeldcode en je hebt het antwoord! Ik heb een veldnaam genomen waarvan ik dacht dat het bedoeld was voor de berekening; die moet je veranderen. Verder werkt de code zoals in het voorbeeld.
 
hoi Michel,
Super dat je blijft helpen ondanks dat ik je niet begrijp. Blijkbaar lukt het met niet te lezen wat je schrijft. Ik krijg nog steeds de uitkomst niet zichtbaar. Ik doe mij database er even bij, wellicht kan je dan ziet wat ik niet lees.
 

Bijlagen

  • helpmijveld.zip
    25,8 KB · Weergaven: 17
Het is niet zozeer mijn code die je niet kunt lezen, alswel je eigen ;)
Je tekstveld heet in het rapport resultaat, maar in je formule gebruik je: Me.result= Groot * Factor
Als je de naam aanpast, doet-ie precies wat hij moet doen :)
 
Sorry te veel gespeelt en niet de laatste versie opgeslagen. maar ook als ik de naam in de formule gelijk maak aan de naam van het veld (bij besturingselementbron) krijg ik de error: kan de methode of gegevenslid niet vinden

dus bij de detailsectie van het rapport (eigenschappen bij opmaak) in de formule me.result = groot*factor
in rapport bij een veld besturingselementbron: result

heb ook me.result , [result] geprobeert maar geen verbetering. in de ontwerpweergave staat er ook een uitroepteken bij het veld met de melding: ongeldige eigenschap van het besturingselement: besturingselementbron
 
Hier de werkende versie van je eigen voorbeeld.
 

Bijlagen

  • helpmijveld.rar
    24,5 KB · Weergaven: 15
Dank je wel. De fout zat hem dus in de naamgeving van het veld en het vermelden van een besturingselementbron. Zonder bron en met naam werkt het inderdaad. Super ik ga me nu storten op de echte formule.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan