Factuur maken in acces

  • Onderwerp starter Onderwerp starter geut
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

geut

Nieuwe gebruiker
Lid geworden
6 nov 2018
Berichten
3
Hallo,

Ik ben bezig met een klein facturatie systeempje te maken met acces.
Maar ik loop nu vast.
Hopelijk krijg ik het een beetje duidelijk uitgelegd.

Ik heb :
- een tabel met klanten
- een tabel met artikels
- een tabel met facturen
- een tabel waarin de details van de facturen staan.

Dan heb ik een formulier gemaakt om een nieuw factuur aan te maken.
In dit formulier zit een sub-formulier waarin ik producten en aantallen kan ingeven (factuur details).
In dit formulier (factuur details) wordt dan in een toegevoegd veld uitgerekend hoeveel het subtotaal per product is en uiteindelijk het factuurtotaal.
Dit factuurtotaal krijg ik dan in een veldje in mijn formulier voor het nieuwe factuur, maar ik krijg het niet naar een officieel veld in de tabel facturen.

Ik zou dus de waarde van zo'n berekend veld (in een formulier) willen kopieren naar een officieel veld in een tabel

Iemand hiervoor een oplossing ?

Alvast bedankt.
 
Factuur

Berekende velden maak je in een query. M.a.w. maak een query zet daarin je tabel subfactuur en producten.
Maak een extra veld en maak daar de berekening , dus productprijs * aantal= subtotaal. Onderaan dit formulier maak je een veld met subtotalen opgeteld.
Als je nog hulp nodig hebt laat het maar weten.
Gr. Egbert
 
Ik zou dus de waarde van zo'n berekend veld (in een formulier) willen kopieren naar een officieel veld in een tabel
Je opzet is prima, je vraag eigenlijk overbodig want dit doe je dus nooit in een database :). Herleidbare gegevens sla je namelijk in beginsel nooit op. En dat geldt dus absoluut voor een totaalbedrag dat je berekent op basis van de factuurregels. In de factuur die je naar de klant stuurt staat dit totaal uiteraard wel, maar daar is het een simpel veld in de voettekst van je factuur, waarin je met de functie SOM de totalen optelt.

Kortom: wat je moet doen is simpel: zet in je formulier in de voettekst een tekstveld dat de bedragen optelt (met SOM) zodat je de totalen kunt zien, gebruik eenzelfde constructie in je rapport dat je naar je klant mailt of verzend, en sla verder niks op. Alle voor de totalen noodzakelijke gegevens heb je namelijk al opgeslagen.

Wel zou ik, omdat prijzen aan fluctuaties onderhevig zijn, de prijzen opslaan in de factuurregels. Je moet die natuurlijk niet afhankelijk maken van de prijzen in je producten tabel, want als daar de prijzen veranderen wil je niet dat ze op de oudere facturen ook veranderen. Dan kloppen je factuuroverzichten namelijk niet meer.
 
Klinkt logisch ja...
Soms willen we het moeilijker maken dan nodig... Bedankt voor de tip.

Wel zou ik, omdat prijzen aan fluctuaties onderhevig zijn, de prijzen opslaan in de factuurregels. Je moet die natuurlijk niet afhankelijk maken van de prijzen in je producten tabel, want als daar de prijzen veranderen wil je niet dat ze op de oudere facturen ook veranderen. Dan kloppen je factuuroverzichten namelijk niet meer.

Kan ik de prijs uit mijn tabel met producten halen en dan de waarde fixeren in het record ?
Dat probleem was ik nog niet tegen gekomen, de bestaande facturen mogen uiteraard niet aangepast worden na een indexatie van de productprijzen.
 
Er zijn verschillende technieken voor om de prijzen te ‘fixeren’. Ik gaf vroeger Access cursussen, waarbij dan in een formulier een artikel werd opgezocht (ArtikelID opslaan in de tabel Factuurregels) en waarbij dan in de onderliggende query de prijs werd opgehaald uit de tabel Artikelen. Dat werkt prima als de prijs niet veranderd, maar dat gebeurt natuurlijk wél. Dus dat moet je inderdaad zo niet doen.
Wat dan wel?
Methode 1:
Zet in de keuzelijst waarmee je het artikel opzoekt naast het ArtikelID en de ArtikelNaam ook het veld ArtikelPrijs. ArtikelID sla je op in de tabel. Naast deze keuzelijst heb je een veld ArtikelPrijs, dat je uiteraard ook koppelt aan de tabel Factuurregels. Dit veld vul je vanuit de keuzelijst. Op de gebeurtenis <Bij Klikken> maak je dus een actie die de prijs uit de keuzelijst haalt en in het tekstveld ArtikelPrijs zet. Dat doe je met de eigenschap cboArtikel.Column(#). Dus iets als:
Code:
Me.ArtikelPrijs.Value = Me.cboArtikel.Column(2)
En daarmee zet je dan de derde kolom in het tekstveld (overeenkomstig mijn voorbeeld dus).

Methode 2 is databasetechnisch beter (je houdt meer historie vast) maar wel lastiger te maken. Hierbij heb je een aparte tabel voor de prijsmutaties, waarbij je dus een datum opslaat naast het ArtikelID en de prijs. Dus voor elke prijswijziging maak je per artikel een nieuw record. Op die manier heb je een historie van de prijswijzigingen. Kan interessant zijn.
Als je weet wanneer een mutatie heeft plaatsgevonden voor een artikel, en je hebt de factuurdatum, dan weet je ook (kun je namelijk opzoeken) welke prijs gold op het moment van verkoop. En dat is dan de prijs die je altijd in je overzichten terug zult zien.

Zoals gezegd: de eerste methode is het makkelijkst en wordt ook het vaakst toegepast. Dus wellicht kun je daar dan mee beginnen.
 
OK, bedankt.
Dit ga ik morgen even proberen.

Groetjes,
Dieter.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan