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
.