referentienummer van factuur

Status
Niet open voor verdere reacties.

Dj NRG

Gebruiker
Lid geworden
22 mrt 2009
Berichten
49
Hey

ik zoek een manier om een volgnummer toe te kennen aan men facturen...
hetgeen ik heb is het volgende:

een tabel en formulier met de te factureren gegevens.
als ik op een knop klik maak access de factuur aan (via query worden klantgegevens en facturatiegegevens opgezocht).
het enige probleempje dat ik nu nog heb, is dat access niet vanzelf een factuurnummer aanmaakt.
hoe lossen jullie dit op?
aangezien ik het niet volledig automatisch wil laten gaan (ja kan vb op de knop "factuur maken" klikken, maar beslissen om deze factuur toch niet af te printen, of om ze toch af te printen, maar niet op te sturen) dacht ik het volgende te doen:

ik heb een checkbox waar ik kan aanvinken of die klant gefactureerd is (die checkbox wordt ook gebruikt om oa te controleren welke klanten nog moeten gefactureerd worden).
nu heb ik ook een tabel aangemaakt "factuurnummer" die 2 velden bevat, een autonummering (niet echt nodig) en het veld factuurnummer.
wat ik dacht te doen is van zodra de factuur gemaakt is, wordt de checkbox aangeklikt, en zou ik in de tabel factuurnummer de vorige waarde met 1 willen vermeerderen (als vb nieuwe record).
volgende keer als ik dan een factuur aanmaak, zoekt access de hoogste waarde uit men tabel met factuurnummers. is de factuur aangemaakt, wordt weer dat veld met 1 vermeerderd, en heb ik dus de factuurnummer weer klaar voor de volgende factuur...

nu had ik enerzijds graag jullie mening over dit systeem (voor en nadelen?) en ook een beetje hulp over hoe ik door die checkbox aan te klikken de factuurnummer kan verhogen...

alvast bedankt

mvg

Dj NRG
 
Persoonlijk zou ik geen aparte tabel gebruiken voor de factuurnummers, omdat je ze immers ook opslaat in de tabel met facturen. Je kunt dus altijd al het hoogste factuurnummer opvragen, daar heb je geen aparte tabel voor nodig, en het maakt de constructie nodeloos ingewikkeld.

Je kunt m.b.v. de functie DMax het hoogste factuurnummer opvragen en met 1 verhogen, om een nieuw factuurnummer te genereren. Bij opslaan van de factuur wordt bij een nieuwe factuur dan het nieuwe hoogste nummer opgehaald en met 1 verhoogd, zodat je altijd een net factuurnummer krijgt.

Ik denk dat het maken van een factuur losstaat van het printen of versturen van een factuur. Ik neem aan, dat de klant een aantal dagen binnen het ontvangen van de factuur geacht wordt te betalen, dus je zult ook de verzenddatum vast willen leggen als controlepunt. Alleen een checkbox is dan niet voldoende.
Hooguit kun je die checkbox gebruiken om te voorkomen dat dezelfde factuur nog een keer wordt gemaakt, bijvoorbeeld door het opslaan onmogelijk te maken als een factuur eenmaal is aangemaakt, en opgeslagen. Maar die check kun je ook al doen door te kijken of er een factuurnummer is toegewezen aan een factuur.

Zet, als je wil dat we wat gerichter kunnen adviseren, een testvoorbeeldje neer, dan kunnen we wat beter adviseren!

Michel
 
Hey Michel


alvast bedankt voor je antwoord.

er is misschien nog wat meer info nodig over wat ik al heb. een voorbeeldje is moeilijk, aangezien men database al redelijk uitgebreid is, en er info van verschillende tabellen gebruikt wordt om de factuur te maken, maar zal proberen om zo veel mogelijk info te geven...

in de tabel facturatiegegevens staat vermeld in hoeveel schijven de klant zijn factuur zal betalen (max 5), en per schijf is er een optie om aan te klikken of de schijf er is (als de klant maar 3 schijven heeft worden schijf 4 en 5 niet aangeklikt), het bedrag van die schijf, een checkbox om te checken of die schijf gefactureerd is, en een checkbox om te checken of de schijf betaald is.

verder is er een tabel met klantgegevens waaronder de klant zijn gegevens in staan zoals naam en adres, alsook de offertenummer en datum.

in de tabel met installatiegegevens staan gegevens over de installatie die geplaatst is bij de klant (die worden ook op de factuur vermeld).

verder komt er op de factuur nog de huidige datum, en de huidige datum +14 dagen (de uiterste betaaldatum).

als ik op men formulier facturatiegegevens kom, kan ik per schijf op een knop "factuur maken" klikken, en dan wordt er een rapport gegenereerd, met bovenstaande gegevens.

het enige dat dus nog ontbreekt is de factuurnummer.

de factuurd wordt nergens opgeslagen, enkel wordt het rapport gemaakt, en dan kan de factuur eventueel geprint worden, en opgestuurd.

wat ik dus wou is dat van zodra op de knop geklikt wordt, en er beslist wordt om de factuur te printen en te versturen, wordt er ook aangeklikt dat die schijf gefactureerd is, en dan zou er dus bij het volgnummer van het factuur eentje bij moeten komen.

dit zou dus voor 5 checkboxen moeten gebeuren (5 mogelijke schijven)

ik wou voor deze optie kiezen omdat het hier relatief makkelijk is om manueel het factuurnummer aan te passen indien nodig (gewoon enkele records uit de tabel factuurnummer verwijderen of een record bijmaken met een hogere waarde).

mss nog een klein probleempje: de volgnummer ziet er uit als F00000, F00001, F00002, ...

vormt die F een probleem om er elke keer eentje bij te tellen?

alvast bedankt voor alle hulp

mvg

Dj NRG
 
nog een kleine bijkomende vraag...

als ik de checkbox "gefactureerd" aanklik, zou ik ook de huidige datum willen opslaan in men tabel met facturatiegegevens.
hiervoor heb ik al een veld aangemaakt (datum1gefactureerd, datum2gefactureerd, ... tot 5)
maar hoe laat ik de huidige datum wegschrijven als de checkbox aangeklikt wordt? dit zal wss in VBA code moeten gebeuren, maar daar ken ik dus niks van :s

kan je me hiermee ook helpen? :s

alvast bedankt!

mvg

Dj NRG
 
ok, dat van die datum heb ik al deels kunnen oplossen...
via

Code:
If Me.ctl1_gefactureerd.value = true 
  then

   forms.item("facturatiegegevens").controls("datum1gefactureerd).value = date$

  else

   forms.item("facturatiegegevens").controls("datum1gefactureerd).value = null

end if

lukt dat al, het enige probleem is dat ik deze datum wil gaan vergelijken met die datum binnen 14 dagen, maar als ik in men query datum1gefactureerd + 14 gebruik, krijg ik #fout...

hoe kan ik die datum met 14 vermeerderen? ik denk dat het probleem ligt aan het formaat waarin de datum weggeschreven wordt, dit is nu mm dd yyyy en zou (denk ik) dd mm yyyy moeten zijn...

kan ik dit in men VB code aanpassen?

mvg


Dj NRG
 
De opmaak van een veld heeft niks te maken met je probleem; een datum blijft namelijk altijd hetzelfde getal in de tabel, dus je zou altijd een berekening moeten kunnen maken. Je kunt proberen om de datum te converteren door er de functie CDate() omheen te zetten, al vraag ik me af of het probleem ermee op te lossen is.

Je kunt ook nog de functie DateAdd proberen, daarmee kun je een aantal dagen, weken, maanden etc toevoegen aan een datum:

DateAdd("d";14;[tblboek]![datum1gefactureerd])

zou het moeten doen.

Michel
 
Hey Michel

bedankt voor je antwoord...

had al eens geprobeerd met de functie dateadd; maar vond de juiste syntax niet...

als ik het probeer zoals in jouw voorbeeldje, dan krijg ik geen foutmelding, maar krijg ik als datum altijd 01/12/1900 :s

nog tips?

Greetz

Dj NRG
 
Als ik de uitkomst zo zie, dan lijkt het alsof de datum niet herkend wordt; de telwaarde wordt opgeteld bij het getal 0; en levert dan die datum op. Zoals je misschien weet, begint de jaartelling volgens Microsoft (wanneer wordt die eindelijk eens officieel ingevoerd :) ) op 1 januari 1900 met het getal 1. Nul is dan dus 31 december 1899. En ziedaar de uitkomst!

Wat je kunt proberen is om met CDate([Faktuurdatum]) de datumwaarde alsnog te vertalen naar een datum. Maar het kan ook te maken hebben met de veldinstellingen, want het lijkt erop alsof je voor de datum een tekstveld gebruikt i.p.v. een datumveld.

Maar Cdate zou van een tekstvelddatum alsnog een datum moeten kunnen maken. Anders zou je het datumveld moeten converteren met DateSerial, maar dat is een wat lastigere constructie.

Michel
 
Hey Michel

bedankt voor je antwoord...

ben er bijna uit denk ik;

ik heb dat veld veranderd in datum veld ipv text veld, en werk in men query met [datum1gefactureerd]+14

en dit zou lukken, op voorwaarde dat access men dag en maand wil omdraaien

nu staat er 06/02/2009 ipv 02/06/2009...

als resultaat krijg ik dus 20/02/2009...

is er een manier om dag en maand om te draaien als access deze waarden invult?

mvg

Dj NRG
 
ook het probleem met de volgnummers ben ik nog niet helemaal uit...
hoe ziet de code er uit om eentje te laten bijtellen als ik die checkbox aanklik, en ook terug eentje aftrekken als ik de checkbox uit klik?

mvg

Dj NRG
 
Daar was ik al bang voor... ;)
Je zult de datums van het tekstveld vrees ik via een conversieslag met een bijwerkquery moeten toevoegen aan een nieuw datumveld.
Daarvoor gebruik je dan de functie DateSerial([Jaar];[Maand];[Dag]), waarbij je het jaar dus moet filteren uit de tekstdatum, de maand uiteraard ook, en ook nog de dag.

Een voorbeeldje zou kunnen zijn:

Dateserial(Right([Datum];4);Left([Datum];2);Mid([Datum];4;2))

Deze code zet je in het nieuwe datumveld in de regel <Wijzigen in>.
Dit zou moeten werken, waaarbij je uiteraard de tekst [Datum] vervangt door je eigen veldnaam.

Kom je er niet uit: zet een klein voorbeeldje op het forum, en dan zal ik er een voorbeeldquery bij zetten.

Michel
 
Hey Michel

alweer bedankt voor je antwoord...

maar ik ben niet helemaal mee :s

ik maak dus een nieuw datumveld aan? dit noem ik datum1...
dan kan ik die code zetten bij "bij gewijzigd" of "bij wijzigen", "wijzigen in" zie ik niet staan :s

en als die code bij het nieuwe veld staat, dan moet ik bij het oude veld een query laten runnen als daar iets gewijzigd wordt? dus daar zet ik dat achter "bij gewijzigd"? en wat moet er juist in die query staan? :s

mvg

Dj NRG
 
Ging waarschijnlijk iets te snel, heb ik wel vaker last van :rolleyes:

Je ziet het goed dat er een extra veldje bijkomt waar je straks de datum in kunt zetten.
Het idee is: met een Bijwerkqeury de datum omzetten naar een datum, die je opslaat in een ander veld. Zodra je van een Selectiequery (de standaard) een Bijwerkquery maakt, krijg je er een regeltje bij. Dat is de regel <wijzigen in> waar ik het eerder over had. Als resultaat zal de query een datum per record wegschrijven, waarbij (als het goed is) alle tekstdatums dus een echt datumequivalent hebben in het nieuwe veld.

Als dat is gelukt, zou je het oude datumveld kunnen verwijderen, en de nieuwe de juiste naam geven, zodat alles weer up-to-date is.

Ik zal een klein voorbeeldje maken, en straks neerzetten. Kun je zien wat ik bedoel.

Michel
 
En hier heb je een voorbeeld. In tabel 1 heb je een veld datumtekst, en een veld datumnieuw. Datumtekst is uiteraard een tekstveld, en datumnieuw een echt datumveld. Met query1 kun je de datum uit datumtekst converteren naar het veld datumnieuw.

Is dit wat je bedoelt?

Michel
 
ik snap ongeveer wat je bedoeld, maar die bijwerk query, runt die vanzelf?

heb het gedaan zoals je beschreven hebt, maar er gebeurt niet veel :s

ik heb dus een 2de veld aangemaakt (datumveld) en van het eerste een textveld gemaakt.
dan heb ik een bijwerkquery gemaakt, met als enige veld het textveld met de datum. bij wijzigen in heb ik jou code staan...

maar als ik de datum wijzig in iets anders, komt er totaal niks in men datumveld te staan... doe ik ergens iets verkeerd?

mvg

Dj NRG
 
Kun je de tabel met wat voorbeeldgegevens hier neerzetten? Waarschijnlijk hebben we het dan een stuk sneller getackeld.... Een bijwerkquery moet namelijk als je hem uitvoert met de knop met het uitroepteken direct de gegevens bijwerken. Daar hoef je verder weinig aan te doen. Het maakt wel uit of je de goede knop gebruikt, want met de knop Weergeven zie je inderdaad alleen maar de originele gegevens, en wordt er niks bijgewerkt.

Als je een nieuwe db maakt, en alleen de juiste tabel importeert, is het al genoeg, want de rest heeft er toch geen invloed op.

Michel
 
Hey Michel

heb ff enkele dingetjes uit men database geexporteerd naar een andere. alle tabellen en formulieren dat je nodig hebt zitten er normaal in. je krijgt wel enkele meldingen dat de db niet werkt, maar dat is logisch, er ontbreekt een heleboel.. maar goed, hier gaan we

open formulier klantgegevens, vervolgens kies je een klant, en klik je op "facturatiegegevens openen". daarmee kom je op het formulier facturatiegegevens van die klant.
per schijf zie je dan enkele checkboxen en een knop. de knop maakt het factuur op (deze werkt nu niet, maar is ook niet nodig denk ik.wat ik dus wil is, dat als ik de checkbox "is schijf 1 gefactureerd" aanklik, de datum van vandaag in "datum1gefactureerd" komt (datum1nieuw) is om de datum om te zetten.

wat er ook zou moeten gebeuren met die checkbox, is dat in de tabel "factuurnummer" de vorige (hoogste) waarde met 1 vermeerderd wordt... als de checkbox uitgeklikt wordt moet die waarde terug met 1 verminderd worden...

de db is te groot om hier te posten, dus zet ik ze even op men webspace...

hier is de link

mvg

Dj NRG
 
Ik ga er naar kijken!

Michel
 
Wat ik dus wil is, dat als ik de checkbox "is schijf 1 gefactureerd" aanklik, de datum van vandaag in "datum1gefactureerd" komt (datum1nieuw) is om de datum om te zetten.

De functie die je hebt op de checkbox doet het prima, maar je ziet het resultaat er niet van op het formulier. Dat komt, doordat Access gegevens op een formulier niet automatisch ververst.

Door de regel
Me.Refresh
onder de End If te zetten, zul je zien dat de veranderingen netjes op het formulier getoond worden.

Michel
 
bedankt voor de tip, nu kwam het resultaat er enkel op als ik men formulier sloot en trug opende, maar dit lost het datum probleem nog niet op :s

mvg

Dj NRG
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan