Berekening binnen een formulier op basis van twee variabelen

Status
Niet open voor verdere reacties.

stokking

Gebruiker
Lid geworden
18 okt 2010
Berichten
7
Ik ben vrij nieuw met access. Ik wil een assortiments voorraadlijst maken. Waarbij ik de consumenten-verkoopwaarde wil berekenen.

Deze komt als volgt tot stand:

Consumenten verkoopwaarde = (inkoopwaarde*2)*(1+BTW-percentage)

Nu gelden er voor mijn assortiment twee verschillende BTW tarieven. Standaard staat deze op laag tarief van 6 procent en maar er zijn ook producten die een hoog tarief kennen van 19%

In het formulier dat ik heb ontwikkeld kan men kiezen voor hoog of laag tarief in een dropdown. Men krijgt dan de opties BTW HOOG of BTW LAAG.

Nu wil ik graag dat de waarde direct binnen het forumlier wordt berekend. En weet ik niet wat ik moet doen. Kiest men in de dropdown voor hoog moet er een berekening worden gemaakt als:

((inkoop * 2)*1,19)

Kiest men voor BTW laag:

((inkoop * 2)*1,06)

Wie kan en wil me helpen?
 
Het lijkt mij op zich vrij makkelijk; is de BTW artikel-afhankelijk, dan sla je de BTW op in je tabel met artikelen. De formule heeft dan geen keuzelijst nodig. Wil je wel met een keuzelijst werken, dan vervang je in je formule het veld {BTW-percentage] door je keuzelijst. De formule op het tekstveld ziet er dan zo uit:
Me.Consumenten_verkoopwaarde = ([inkoopwaarde]*2)*(1+cboBTW)
Daarbij noem ik de keuzelijst cboBTW,zoals je kunt zien. Het is altijd aan te bevelen om keuzelijsten een herkenbare naam te geven, zodat je kunt zien wat ze doen.
 
Ik krijg het niet voor elkaar :confused:

In het tabel ontwerp heb ik een veld [BTW-tarief] dat verwijst naar een keuzelijst met maarliefst twee opties :rolleyes:. Maar daar gaat het waarschijnlijk mis. Ik weet niet hoe je moet aangeven dat wanneer je kiest voor "hoog" hij gaat rekenen met 19% en voor laag 6%. Zou je mij een voor beeld willen maken?
 
Ik zou liever zien wat jij gemaakt hebt; kun je daar geen voorbeeld van maken?
 
Je db staat er; ik moet alleen nog even een nieuwe Office installeren...
 
zou je voor mij een tabel kunnen maken met drie velden?
ik krijg geen optie in access om als 2003 of zo op te slaan, maar zou je voor mij een tabel willen maken met drie velden?

[inkoopprijs] inkoopprijs met valuta notatie en 2 decimalen
[btw] met een keuze lijst van de twee opties: hoog laag (hoog impliceert 19% laag 6%) standaard waarde 6%
[verkoopprijs] ([inkoopprijs]*2)*(1+[btw])
 
Ik heb even naar je db gekeken, en ik snap eigenlijk niet waarom je een keuzelijst hebt gemaakt voor je BTW met de opties Laag en Hoog; het is veel handiger om daar de waarden 6% en 19% in te zetten. Of, als je meer controle wilt over de percentages, kun je een aparte tabel maken met daarin drie velden: een BTW_ID veld (type Autonummering) om op te slaan in je tabel [voorraad_db], een tekstveld met daarin de waarden Hoog en Laag (waarden die gekozen worden) en een Waardeveld (type Numeriek, Enkele precisie, Notatie 0,0%) waarin je de feitenlijke waarde opslaat. Deze tabel gebruik je als opzoektabel voor je tabel [voorraad_db], zodat je met Hoog en Laag je percentages kunt kiezen in de tabel.
Om de prijzen te berekenen, maak je vervolgens een query met daarin de berekening: Verkoopprijs: ([Inkoopwaarde]*2)*(1+[BTW_Waarde])
Hierbij vermenigvuldig je de inkoopprijs dus gelijk met het juiste btw-percentage, omdat je in de tabel hebt aangegeven of het hoge of lage tarief moet worden gebruikt.
 
Ik heb een nieuwe tabel aangemaakt. Echter wanneer ik in die tabel 19 invoer bij percentage krijg ik 9100%. 0,19 wordt automatisch omgezet naar 0. Wat zie ik over het hoofd?
 
De veldeigenschappen zijn waarschijnlijk niet goed. Standaard krijgt een numeriek veld meestal de eigenschap Lange Integer. Je kunt de veldlengte instellen op <Enkele precisie>, en de notatie bijvoorbeeld op <0%>. Je kunt dan een percentage invoeren als 0,19 of 19%. In beide gevallen slaat hij de goede waarde op.
 
Ik heb nu een tabel waar je kan kiezen uit twee btw percentages. Hoog staat als eerste waarde genoteerd en laag als tweede. Wanneer ik nu een berekening laat uitvoeren dan telt hij voor hoog waarde 1 en laag waarde 2. Hij vermenigvuldigt dan met 2 resp. 3. ipv. 1,19 en 1,06

Zou je me als je blieft een klein access databaseje willen maken waarin de berekening wordt gemaakt zoals ik die graag voor elkaar wil hebben? Want ik heb duidelijk het een en ander horen klepelen maar weet niet hoe de klok klingelt.Bekijk bijlage verkoopprijs.zip
 
Laatst bewerkt:
Ik heb even een voorbeeldquery gemaakt in een ander voorbeeldje dat ik momenteel gebruik in een draadje... Let dus niet op de rest in de db (mag uiteraard wel; misschien zit er wat bruikbaars tussen :) )
In de tabellen heb ik een tabel [Artikelen], een tabel [ArtikelGroepen] en een tabel [BTW]. De btw is gekoppeld aan de tabel [ArtikelGroepen]. In de tabel [Artikelen] worden de inkoopprijzen vastgelegd. De Verkoopprijzen worden berekend met jouw formule in de query [qPrijzen].
 

Bijlagen

waarom is er een aparte query noodzakelijk en kan ik niet binnen een tabel de berekening uitvoeren? Ik heb je bestand uitgeplozen. Zie inderdaad binnen de query de gewenste berekening. Kan hem niet aanroepen in mijn tabel. Maar ik zou die berekening in mijn tabel willen hebben. :confused:
 
Niet doen.... Berekeningen maak je in een query, en niet in een tabel. Tabellen zijn bedoeld voor de opslag van gegevens, niet voor berekeningen. Dat is ook één van de grondregels van een database: Gegevens die kunnen worden afgeleid van andere gegevens, worden niet opgeslagen in een tabel. Dit voorkomt het opslaan van nodeloze hoeveelheden gegevens, waardoor de db dus ook nodeloos veel groter wordt.
Er zijn overigens wel uitzonderingen te bedenken, voor bepaalde gegevens. Zo kan een verkoop van een bepaald artikel een bepaalde verkoopprijs opleveren, die is gebaseerd op een inkoopprijs die gold op die specifieke verkoopdatum. Als op een later tijdstip de prijzen worden verhoogd/verlaagd, zou de verkoopprijs dus ook worden veranderd als je niks doet. Om dat probleem te ondervangen zou je kunnen overwegen om in je uiteindelijke verkoopgegevens de op dat moment geldende prijs op te slaan. Waarmee je de db dus strijdig maakt met een niet onbelangrijke regel....
Een technisch nettere oplossing is dan ook om de verkoopprijs te relateren aan een datum, door bij elke prijsmutatie een nieuw record te maken met de datum en de nieuwe prijs. Op je formulieren werk je dan met de laatste prijs (op basis van de laatste datum). Je kunt dan voor je eerdere facturen, bestellingen etc. de prijs terughalen door in de tabel met prijzen de juiste record te zoeken.

Deze techniek wordt straks in de cursus gehanteerd; hou die dus in de gaten ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan