berekende waarde als standaardwaarde in een tabel

Status
Niet open voor verdere reacties.

tkint

Gebruiker
Lid geworden
5 dec 2011
Berichten
776
Ik heb een tabel met 4 velden : artikelnummer, omschrijving, inkoopprijs en verkoopprijs. Ik wil bij het ingeven van een artikel voor de verkoopprijs de aankoopprijs*1,65 automatisch als standaardwaarde hebben. Een getal invoeren bij de veldeigenschappen lukt (geen foutmelding) maar een formule bv. [inkoopprijs]*1.65 invullen, geeft een foutmelding.

Het is de bedoeling dat ik de standaardwaarde kan editeren bij het invoeren van de gegevens in de tabel.

In bijlage het gezipte bestand. Hoop ik.
 

Bijlagen

Je wilt dat in een tabel? Nooit doen, heel slecht idee. Dat soort zaken regel je op een formulier. Door een formule te hangen aan het (tekst)veld [Inkoopprijs] die de inkoopprijs vermenigvuldigt met 1,65. Ik zou daar trouwens ook een afronding op zetten die nette verkoopprijzen oplevert, want je wilt natuurlijk niet elke inkoopprijs met 1,65 vermenigvuldigd in de winkel leggen.
 
Bedankt voor het advies. Maar met de aangehaalde methode maak je een berekend veld waarvan je de waarde niet kan wijzigen bij het invoeren van de gegevens. Of heb ik het mis?
 
Ja, dat heb je mis. Berekende velden zijn velden in een tabel die een berekening maken. (Nooit gebruiken; velden zijn voor het opslaan van gegevens. Berekeningen doe je in een query). Je kunt je überhaupt afvragen of je in jouw geval de verkoopprijs wel moet opslaan, omdat het een afgeleid gegeven is, en ook die sla je in beginsel nooit op in een tabel. Want, zoals je zelf al aangeeft, de verkoopprijs is een berekening op basis van de inkoopprijs. En het is ook nog eens een berekening die niet verandert. Er is dus geen enkele reden om die verkoopprijs op te slaan. Maar goed, wie ben ik om jou advies te geven? :).
Wat ik zei, en nu hopelijk wat duidelijker, is dat je op een formulier een berekening maakt op de gebeurtenis <Na bijwerken> van het veld [Inkoopprijs] die het berekende bedrag in het veld [Verkoopprijs] zet. Op je formulier is het tekstveld txtVerkoopprijs dus gewoon gekoppeld aan het veld [Verkoopprijs]. Alleen krijgt dat veld nu dus een waarde vanuit het veld [Inkoopprijs]. Dus zodra je een bedrag intypt, zie je in [Verkoopprijs] de berekening terug. En dat wordt dan gewoon opgeslagen, en is altijd te bewerken.

Maar zelf zou ik het dus heel anders doen; ik zou een tabel maken met verkoopprijzen die ik terug wil zien in het systeem, met daarin dus de verkoopprijs, en de begin- en eindwaarde van de berekende inkoopprijzen die de juiste verkoopprijs moeten opleveren. Volgend tabelletje geeft wellicht aan waarom ik dat zou doen: de berekening van de bedragen uit de linker kolom met 1,65 leveren soms rare bedragen op in de middelste kolom. Met een kleine afronding kom je al wat beter uit (rechterkolom).
PHP:
 € 5,99 	 € 9,88 	 € 9,90 
 € 6,25 	 € 10,31 	 € 10,40 
 € 4,95 	 € 8,17 	 € 8,20 
 € 8,66 	 € 14,29 	 € 14,30 
 € 9,47 	 € 15,63 	 € 15,70 
 € 12,69 	 € 20,94 	 € 21,00
Met een aparte tabel waarin je de berekende prijs opzoekt, kun je de prijzen veel nauwkeuriger bepalen. Maar goed, het is jouw systeem :).
 
Beste,

Ik heb in de ontwerpweergave van het formulier in de eigenschappen van het veld verkoopprijs [inkoopprijs]*1,65 ingevuld bij de gebeurtenis <Na bijwerken>. Ik krijg geen foutmelding maar ik krijg de berekende waarde niet te zien in het formulier bij het aanmaken van een artikel. Ik werk met Office 2007. Wat doe ik verkeerd?
 
Wat doe ik verkeerd?
Je leest niet goed. Ik schreef: "op een formulier een berekening maakt op de gebeurtenis <Na bijwerken> van het veld [Inkoopprijs] die het berekende bedrag in het veld [Verkoopprijs] zet.". Jij hebt de Na bijwerken actie op het veld [Verkoopprijs] gezet. dat wordt echter niet bijgewerkt.
 
Beste,

De formule bij de gebeurtenis <Na bijwerken> in het veld Inkoopprijs wordt dus [Verkoopprijs]=Round([Inkoopprijs]*1,65). Juist?
 
Dat zou juist kunnen zijn, als je een punt gebruikt in je berekening. Want in VBA moet je de Amerikaanse notatie gebruiken.
Ik zou, als ik jou was, toch ook naar mijn voorstel kijken waarbij je de berekende prijs opzoekt in een tabel en dus altijd met vaste verkoopprijzen kan werken die verder niet afgerond zijn en waar je volgens mij ook veel minder werk aan hebt.
 
Beste,

Ik zou graag in mijn opzet slagen maar ik krijg volgende foutmelding :foutmelding access.jpg.
Mocht ik dit niet werkende krijgen, hoe zou de zoektabel met verkoopprijs per artikel er moeten uitzien?
Ik voeg het bestand nogmaals bij de vraag.
 

Bijlagen

Gebeurtenissen zijn ofwel macro's (beurhhh...) ofwel VBA procedures, maar nooit directe opdrachten zoals jij nu hebt gemaakt. In de keuzelijst achter een actie vind je ook dat soort keuzes. En met een druk op de knop met de 3 puntjes kom je vanzelf (als je voor Gebeurtenis kiest) in het VBA venster waar je de code kunt neerpennen. Dan ziet dat er zo uit:
Code:
Private Sub inkoopprijs_AfterUpdate()
    Me.verkoopprijs = Round(Me.inkoopprijs * 1.65)
End Sub
 
De oplossing met de tabel is niet zo moeilijk, maar dan mag je wel een voorbeeldje maken. Dat moet er dan ongeveer zo uitzien:
tabel tVerkoopprijzen
Veld: VerkoopID - Autonummering
Veld: Prijs_Van - Valuta
Veld: Prijs_Tot - Valuta
Veld: Verkoopprijs - Valuta

En die vul je dan met de door jou gewenste ranges. Dus tussen 0-5 wordt dan 7,95 bijvoorbeeld. Hoe kleiner de ranges (je vermenigvuldigt best wel stevig tenslotte) hoe mooier de output. Als je zo'n tabel toevoegt, maak ik de query wel :).
 
Beste,

Bedankt voor het verhelderd antwoord. Ik had zo'n een vermoeden dat ik een VBA-procedure moest schrijven maar heb ik daar alleen ervaring mee in Excel. Ik maak de gevraagde tabel en stuur opnieuw mijn bestand door.
 
Ik heb even een voorbeeldje in Excel gemaakt (simpel; verkoopprijs gepakt als basis (4,95) en daar € 5,- bij opgeteld om een reeks verkoopprijzen te maken, vervolgens in een kolom dat bedrag gedeeld door 1,64 om de Prijs_Van te te berekenen en vervolgens in een andere kolom de waarde uit de cel erboven gepakt om de Prijs_Van te pakken) en die in Access geplakt. Daarmee maak je dan deze query:
PHP:
SELECT artikelnummer, omschrijving, inkoopprijs, Verkoopprijs
FROM tblArtikelen, tblVerkoopprijzen
WHERE ([Prijs_Van] <=[inkoopprijs] AND [Prijs_Tot] >=[inkoopprijs])
ORDER BY artikelnummer, Verkoopprijs;
En dat levert dus de verkoopprijs op in de query. Nogmaals, ik heb het eerder gezegd: er is geen enkele noodzaak om de prijs op te slaan. Als de inkoopprijs verandert, krijg je gelijk de goede nieuwe verkoopprijs. Google maar eens op 'dataredundantie' om het principe hierachter te doorgronden. Uiteraard heb ik het ook in de Access cursus uitgebreid uitgelegd :).
 
Ik heb het voorbeeldje even gemaakt, zoals ik het dus zou doen. Dus zonder veld [Verkoopprijs] in de tabel, maar wel in een query. Hij opent met een doorlopend formulier op basis van die query. Als je op een artikel klikt kun je de prijs aanpassen in het formulier [frmArtikelen] wat daartoe is aangepast. Met een knop <Nieuw artikel> open je hetzelfde formulier, maar nu in Toevoegmodus zodat je nieuwe artikelen kunt toevoegen. Kijk maar eens of je het snapt.
 

Bijlagen

Beste,

Zou het kunnen dat jouw voorbeeld gemaakt is met Access 2016 want ik kan het niet openen met de versie 2007. Ik moet mij momenteel behelpen met een laptop met Office 2007. Het is mij gelukt om via de VBA-code de voorgestelde verkoopprijs in te vullen en ik heb ook de gevraagde tabel ingevoegd. Mocht het ene strijdig zijn met het andere, dan verwijder je het maar.
 

Bijlagen

Beste,

Het zit vernuft in elkaar maar ik krijg een foutmelding dat bepaalde besturingselementen niet kunnen geladen worden bij het openen van een formulier. Vanaf het moment dat ik mijn toestel met office 2016 terug heb, probeer ik de ontvangen bestanden uit. Je hoort nog van mij.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan