vraag facturatie

Status
Niet open voor verdere reacties.

Bolleke10

Gebruiker
Lid geworden
5 feb 2017
Berichten
19
ik heb een hoofdformulier en een subformulier. de relaties werken ook'

Na invullen van hoofdformulier en subformulier, ga ik naar een nieuw record in het hoofdformulier, en wanneer ik terug ga naar het vorig record van het hoofdformulier , staan de records in het subformulier soms door elkaar:

bv:

naam naam
adres adres
ed ed

a1 a1
a2 a3
a3 a2

wie kan mij helpen
 
Je voorbeeldje helpt niks, want ik heb geen idee waar ik naar zit te kijken. Kun je de db niet posten? Als een subformulier niet de goede gegevens laat zien, is er ofwel iets mis met de relaties, ofwel met de koppeling tussen hoofd- en subformulier.
 
1ste foto; invullen gegevens
Dan op opslaan gedrukt
Dan knop volgende offerte
Dan knop vorige offerte
2de foto: anders dan 1ste foto

Meestal in orde, maar soms ook niet, raar he
facturatie voor.JPG
facturatie na.JPG
 
Je zegt het, maar ik kan het nog steeds niet controleren want ik heb de db niet :). Sowieso snap ik de knop <Opslaan> niet (is namelijk niet nodig) en ik zie ook niet wat er verkeerd is; het eerste plaatje is ontstaan tijdens het invoeren, en kijkt dus nergens naar, en het tweede plaatje laat het opgeslagen record zien, en blijkbaar heb je een sortering op tabel of formulier gezet, dus je ziet de records nu gesorteerd. Al weet ik niet waarop, want logisch vind ik de sortering niet.
 
ik heb nergens een sortering opgezet en db is 22mb groot, kan anders via wetransfer doen
 
Lijkt mij een goed plan :). Eventueel comprimeren, en zippen, dat wil de grootte nog wel eens aanzienlijk verlagen.
 
Ik zit nu naar je db te kijken, maar ik snap er niet zoveel van. Om te beginnen: waarom een subformulier voor je klanten op het Offerte formulier? Waarom een veld FN in de tabel Klanten? Waarom hangt de tabel [FactOmschr] aan de tabel [Klanten] en niet aan de tabel [Factuur]? In mijn optiek bevat de tabel [FactOmschr] de detailrecords die bij een factuur horen, en moet die tabel dus aan de tabel [Factuur] zijn gekoppeld. Die dan weer geen sleutelveld bevat, wat het koppelen onmogelijk maakt. Datzelfde geldt voor de tabel [Offerte] (waar je vraag volgens mij over gaat), die ook geen sleutelveld heeft, en dus zo nooit aan de tabel [OffOmschr] kan worden gekoppeld. In de tabel [Offerte] zit gek genoeg geen veld [KlantID], dus hoe je die koppelt, is mij eigenlijk ook een raadsel :). Niet namelijk, als ik het goed bekijk. Kijk ik met een scheef ook, dan zie ik in de tabel [Klanten] naast het veld [FN] ook nog een veld ON, en dat mag natuurlijk ook niet. Dat veld hoort in de tabel [Offerte] thuis, en daar hoort ook een veld KlantID te staan.
De bedoeling lijkt mij namelijk toch, dat één klant meerdere offertes kan aanvragen, en niet één.
 
Heb de facturatie volledig vernieuwd, ben er nog volop aan bezig
Heb nog enkele vraagjes:
Hoe link je Hoofdformuler factuur aan subformulier factuuromschrijving
Hoe vul je automatisch bedrag excl BTW over via subformulier
 

Bijlagen

  • Facturatie Duff.zip
    132,3 KB · Weergaven: 65
Je hebt nog wat werk voor de boeg, vrees ik :).
- Om te beginnen zou ik nooit keuzelijsten met invoervak gebruiken in een tabel. Enige uitzondering: keuzelijsten op basis van korte lijsten met een paar opties. Denk aan een veld als Geslacht, waar je hooguit 2 of 3 opties hebt. OK, we gaan wellicht naar 5, maar dan heb je het ook wel gehad. In een tabel moet je altijd kunnen zien wat er is opgeslagen, nooit een alias.
- In de tabel Klanten heb je geen code staan, maar alleen namen. Zou ik niet doen; verzin een code, of gebruik een Autonummerveld als sleutel.
- De tabel Factuur (en dat geldt ook voor de andere tabellen) is niet gekoppeld aan de tabel FactuurOmschrijving (in Relaties). Dat moet wel.
- Het formulier FormFactuur zou ik baseren op de tabel Factuur, niet op de query QSEFactuur. Nergens voor nodig.
- Je hebt de detailgegevens van de Facturen in de Koptekst gezet i.p.v. in de voettekst. Daardoor zie je, wat je ook doet, altijd het eerste record in de koptest. Gebruik kopteksten bij voorkeur alleen voor tekstvelden, niet voor tabelvelden. Nu heb je de 2 nog wel gekoppeld op basis van Factuurnummer, maar kijk je altijd naar hetzelfde record.
 
Ik heb je db opgeschoond, (lees: sleutels toegevoegd en gekoppeld) en hij staat hier. Ik heb alle overtollige queries en rapporten weggegooid, want dat hoort natuurlijk niet zo. Je maakt één rapport en één query voor één taak, en als je een filter wilt op dat rapport of formulier, dan zorg je ervoor (met een filterformulier met datumvelden bijvoorbeeld) dat je dat rapport gefilterd opent. Kijk maar eens in de cursus hoe je dat maakt, daaar is dat uitgebreid behandeld.
 
Ik kan de db niet downloaden, lukt niet, hij blijft steeds staan op connecting to sender
 
Ik ben ondertussen nog even verder gegaan met kijken naar de db, maar er moet nog wel een hoop aan gebeuren, vind ik. Om te beginnen: je gebruikt de tabellen [FactuurOmschrijving] en [OfferteOmschrijving] verkeerd; daar zitten resp. 616 en 546 lege records in! Waar is dat nu weer goed voor? Een tabel gebruik je om data op te slaan, niet om lege regels te maken! Die heb ik er dus inmiddels uitgegooid. Verder heb je het rapport [RappFactuur] verkeerd gemaakt. Om te beginnen had je dat rapport nog helemaal niet moeten maken natuurlijk, want rapporten maak je als laatste, als je eerst de tabellen en queries, gevolgd door de formulieren in orde hebt. Een rapport is de output van de (correct werkende) database, en dat vereist dus dat de db klaar is. Nu kun je net zo goed opnieuw beginnen met het rapport, want er moet dus nog van alles gebeuren. Als ik mijn zin krijg tenminste :).

Wat ik eerder zei voor de queries (één query en formuier maken niet 300 die hetzelfde doen) geldt ook voor rapporten: met één goed rapport kun je alles doen. Dat betekent dat dat rapport in beginsel alle facturen moet kunnen laten zien op de correcte wijze. En dat houdt dan weer in, dat je een rapport moet groeperen. En dat doe je dus niet. Bij facturen is een logische groep het Factuurnummer. In zo'n groep wil je dan alle factuurgegevens zien, en het rapport baseer je dan ook op een query waarin alle factuurgegevens zitten, dus ook de factuurdetails. Die factuurdetails vormen dan de detailsectie. Je hebt dus geen subrapport nodig (gelukkig, want ik heb daar een schurfthekel aan). Totalen per factuur wil je natuurlijk ook zien, en die komen dan in de extra Voettekst (op basis van het factuurnummer). Kortom: een compleet nieuw factuurrapport!

Maar nogmaals: je moet nog helemaal niet aan het rapport beginnen, want er zitten nog genoeg fouten in de db die je eerst moet oplossen. Zo snap ik heus wel waarom je die lege regels hebt toegevoegd :). Je wilt namelijk witruimte hebben tussen de verschillende offerteblokken en factuurblokken. En je dacht slim te zijn door dan een paar lege records toe te voegen, want dan héb je lege rijen. Maar zo moet je dus niet (willen) werken. Als je gegevens wilt groeperen, dan heb je daar blijkbaar een reden voor, en die reden moet je in een database beschrijven. Ik dacht in eerste instantie dat de tekstregels die met "Betreft:" beginnen daarvoor te gebruiken zijn, maar die zijn al teveel gespecificeerd om in een tabel te zetten. Al kun je daar wellicht nog eens over nadenken, want je hebt nu onderwerpen als 'buitenmuren', 'binnenmuren', 'plaatsen vouwgordijnen', 'dakgoot en houten ballustrade' etc.
Stel dat je factuurregels bij elkaar wilt hebben die betrekking hebben op binnenmuren, plafonds en ballustrades. Dan moet je die regels dus uit elkaar kunnen houden. (Nee, niet door lege rijen toe te voegen ;) ). Je kunt dan bijvoorbeeld een extra veld opnemen in de tabel [Factuuromschrijving] waarin je een Categorie zet. Het mooist zou dat zijn als je daar een tabel voor kunt gebruiken, maar dat kon wel eens lastig zijn gezien je werkwijze. Een voorbeeldje:
PHP:
FactuurNummer	Omschrijving	Aantal	Totaal
404	Betreft: Deuren (31st)		
404	# Afhalen van deuren + klinken		
404	# Het mat schuren + afstoffen		
404	# Het ontvetten (tinner)		
404	# Schilderen van 1ste laag met universele primer		
404	# Lichtjes schuren + afstoffen		
404	# Schilderen van een 2de laag met Aqua PU satin		
404	# Lichtjes schuren + afstoffen		
404	# Het schilderen van een 3de (laatste) laag		
404	# Aanhangen van deuren
Wat hier opvalt is, dat er a) prima een categorie is te verzinnen (Deuren) en b) dat je een veld [Aantal] hebt dat je niet gebruikt! Je hebt het aantal deuren in de omschrijving gezet. Ja, zo kun je natuurlijk nooit berekeningen laten maken door Access! Die hekjes zijn dan blijkbaar bedoeld om de gegevens te 'groeperen' tot de volgende "Betreft:" regel, maar die gaan er dus sowieso uit. Er komt dus een veld [Categorie] bij, en daarin staat dan de tekst: "Deuren schilderen". Of zoiets. Die tekst moet bij alle detailregels komen te staan, anders gaat het niet werken. Maar dat is simpel te doen, ook als je een tekstveld gebruikt. Op je invulformulier kun je namelijk op een tekstveld een standaardwaarde laten zetten. En daarmee herhaal je dan de laatste waarde die je hebt ingevoerd. Dus zolang je schilderwerk aan deuren invoert, komt daar "Deuren schilderen" te staan, en pas als je aan een nieuw blok begint, vervang je de standaard tekst door de nieuwe tekst. Dus na het deurenblok typ je dan: "Tegenkanten deuren badkamer" (uiteraard weer zonder aantal, want daar heb je gewoon een veld voor). En vervolgens maak je alle detailregels die hier mee te maken hebben. In dit geval was het er één, maar je snapt hopelijk het principe.

Uiteindelijk heb je dan alle factuurregels ingevoerd, met categorieën (en één prijsveld; berekeningen kun je prima in Access maken, dus waarom zou je dat zelf invullen?) en dan pak je het rapport er weer bij. Dat is inmiddels gegroepeerd op Factuurnummer, zodat elke factuur op een nieuwe pagina begint, en nu maak je daar een tweede groep op basis van het veld [Categorie]. En in de koptekst daarvan zet je dan een label met de tekst "Betreft:" en het veld [Categorie]. En eventueel de witruimte die je zo graag wilt hebben. Kwestie van de koptekst sectie hoger of lager maken.

Kijk, nu begint het op een database te lijken :).
 
dat is nu juist het probleem
elke factuur en offerte is anders dan de vorige factuur en offerte.
Geen 2 offertes en 2 facturen zijn dezelfde he, dus met je werkwijze ben ik niets.
 
elke factuur en offerte is anders dan de vorige factuur en offerte.
Dat kan toch niet? Elke factuur bestaat toch uit dezelfde basisgegevens? Die moet je goed vastleggen, dat klopt. Maar daarnaast is flexibiliteit nu net het kenmerk van een database. Binnen het kader dat je vastlegt, (tabellen, velden) vul je dan de gegevens in. Doorgaans heeft een factuur een datum, een nummer, een klant etc. Dat zijn vaste gegevens. Daarnaast heeft een factuur regels die specificeren hoe een factuur is opgebouwd. Ook dat zijn vaste gegevens: een factuurnummer (uit Facturen), een een veld product (wat heb je geleverd, wat heb je gedaan), een veld Aantal (31 deuren, 4 kamers) , een veld Prijs etc. Lever je per factuur 45 producten, dan zijn dat 45 records. Echt, mijn werkwijze is bijzonder normaal. Als jij geen vaste producten hebt, maar alleen handelingen factureert (wat je lijkt te doen) dan nóg moet je mijn werkwijze overnemen. In dat geval gebruik je een memoveld voor de omschrijving, want daar kun je regeleindes in maken. Het voorbeeldje hierboven zou dan één record worden met het product "Deuren schilderen" met de prijs € 100,- per deur en het aantal 31. Totaal hoeft niet, want 31 x 100 = 3100. Simpele berekening dus. En daarnaast in het memoveld Omschrijving zet je dan alle regels vanaf "Afhalen van deuren + klinken" t/m "Aanhangen van deuren". Eén product, één record. Zo hoort het te werken. Mijn eerste vertaling was dat je "Deuren schilderen" als categorie hebt, en alle records eronder als aparte prijsvelden gebruikt. Maar dat hoeft dus niet.
Zeker niet als je eigenlijk geen factuur levert (je specificeert immers nergens een prijs, dus hoe moet de klant weten wat "Het ontvetten (tinner)" hem kost?) maar een werkbeschrijving.
 
Ik zie eigenlijk niet zoveel verschil met wat ik zelf heb opgestuurd. Zelfs de lege records zitten er nog in :). Waar moet ik naar kijken?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan