Mutaties invoeren dmv Formulier op basis van een query

Status
Niet open voor verdere reacties.

renew000

Gebruiker
Lid geworden
7 feb 2009
Berichten
151
Hallo mensen,

Ben nog steeds in de beginfase van mijn accesskennis en hoop dat jullie mij kunnen helpen met de volgende vraag.

Ik was verrast door het gemak waarmee je formulieren maakt op basis van tabellen en het gemak van het wegschrijven van nieuwe record dmv zo'n formulier.

Nu ben ik echter bezig om op basis van een query een formulier te maken waarmee je eigenlijk hetzelfde kunt doen.
Hetgeen ik mee bezig ben is een voorraadprogramma en nu wil ik een formulier voor het opboeken en afboeken van gegevens. In dit formulier wil ik echter ook element dat de huidige voorraad weergeeft. Volgens de regels van normalisatie zou ik voor de huidige voorraad geen veld in te hoeven richten aangezien dit afgeleid kan worden uit de velden StuksPlus (bv geleverde voorraad) en StuksMin (bv Verkochte artikelen).

In de query waarmee ik het zogenoemde op- en afboek formulier wil maken heb ik dit inmiddels voor elkaar, maar wanneer ik er een formulier van wil maken dan heb ik ineens ontzettend statische informatie. Alle velden worden juist gevuld, het probleem is alleen dat ik er nieuwe opboekingen mee wil doen en dat lukt me niet. Btw het veld "StuksPlus" (in het geval van opboekingen) wil ik als invoerveld gebruiken.

Wie o wie kan mij helpen om toch een invulformulier te maken. Heb me namelijk al helemaal suf zitten lezen en diverse voorbeelden als inspiratie geraadpleegd maar ieder voorbeeld heeft weer een andere manier om dit op te lossen en vele voorbeelden bevatten wel een veld voor huidige voorraad (sommige zelfs voor oude voorraad).

Als extra informatie kan ik wel aangeven dat ik onderstaande tabellen en velden voor de query gebruik.

Tabel: Artikelen - Velden: Artikelnummer, Artikelomschrijving, Prijs, Ondergrens, Bovengrens
Tabel: Leveranciers - Veld: Bedrijfsnaam
Tabel: Mutaties - Velden: Datum, StuksPlus, StuksMin, Boekingsomschrijving

Alvast bedankt voor jullie hulp

Greetz
 
In de query waarmee ik het zogenoemde op- en afboek formulier wil maken heb ik dit inmiddels voor elkaar, maar wanneer ik er een formulier van wil maken dan heb ik ineens ontzettend statische informatie.
Dit is niet helemaal waar; (eigenlijk: helemaal niet ;) ) want middels de query kun je denk ik ook geen records toevoegen, muteren of verwijderen. Een formulier is in beginsel niet meer dan een visueel velletje dat je over je tabel of query heenlegt. Dus wat je query kan, kan je formulier ook. Blijkbaar heb je nog niet alles goed doorgelezen (zeker mijn cursus niet) want dan had je geweten dat een query aan bepaalde eisen moet voldoen wil je hem kunnen gebruiken voor gegevensinvoer. Zonder de query te zien, kunnen we de vinger niet op de zere plek leggen, maar je geeft zelf al aan dat hij niet werkt voor invoer, dus je hebt tegen minstens één van de regels gezondigd. Ik zou zeggen: een voorbeeldje, of de query!
 
Hallo Michel,

Het lijkt er inderdaad op dat ik gezondigd heb :) Heb namelijk hoofdstuk 7 nog eens doorgenomen.

Voor de berekening van de voorraad per artikel (zonder gebruikt te maken van een veld "voorraad") heb ik inderdaad de knop "Totalen" aan staan.
Nu is dit waarschijnlijk de reden dat ik geen gegevens kan invoeren.

Wel zit ik nu een beetje vast. Moet ik dan toch een veld aanmaken voor de voorraad? of kan het toch door bijvoorbeeld een andere manier zonder dat veld?

Hopelijk wil je me een beetje op weg helpen

Greetz
 
Je zult je voorraad op een andere manier moeten gaan berekenen, bijvoorbeeld op het formulier zelf. De huidige voorraad van een artikel is gebaseerd op de aantallen die je toevoegt minus de aantallen die je er uit haalt. Dat zijn twee gegevens die je op verschillende manieren kunt vastleggen, bijvoorbeeld door de ingeboekte artikelen uit Bestellingen te sommeren met DSUM, waarbij je het ArtikelID als criterium gebruikt, en de verkochte artikelen uit de tabel Verkopen, waarbij je ook weer met DSUM het totaal per artikel ophaalt. DSUM(Inkoop)-DSUM(Verkoop) is dan je voorraad.
Dit is natuurlijk een simpele voorstelling van zaken, de praktijk zal wat weerbarstiger zijn.

Andere oplossing: gebruik de query die je toch al hebt om via een DLookup op je formulier op basis van het artikelID de actuele voorraad te tonen. Wil je wat gerichtere tips, dan is een voorbeeldje onontbeerlijk ;)
 
Thanks Michel,

Als ik je goed begrijp (kijkende naar de 2de oplossing) dan kan ik dus een formulier maken op basis van een query om de invoer te bewerkstelligen. Aan dit formulier kan ik dan wel een label toevoegen, op basis van mijn voorraadquery, die de voorraad van dat betreffende artikel laat zien. Zowel de invoervelden alsook het label zullen dan afhankelijk van een keuzelijst gemaakt moeten worden zodat ze beide het juiste artikel laten zien.

Vanacht heb ik weer een nachtdienst en hopelijk wordt het rustig zodat ik beide oplossingen eens kan uitproberen.

Mocht ik er na jouw tips niet uitkomen dan zal ik zeker een voorbeeldje posten, maar voor nu alvast superbedankt.

Greetz
 
Nou Michel,

Heb beide suggesties uitgeprobeerd, maar zoals je al in je bericht aangaf is de praktijk idd weerbarstiger dan de theorie :) ... dus hierbij dan toch het beloofde voorbeeld met daarin de query.

Het doel dat ik dus voor ogen heb is een invoerformulier, waarmee ik opboekingen kan doen (het liefste wil ik voor de invoer van opboekingen en de invoer voor afboekingen 2 aparte formulieren)
Ik had in het voorbeeld wel een formulier willen opnemen waarin de gegevens staan die ik wil gebruiken voor het opboeken, maar ik weet (nog) niet precies welk idee jij hierbij had.

Het opboekformulier zou velden moeten bevatten uit de tabellen:

VoorraadMutaties (met velden: Mutatiedatum, StuksPlus)
Artikelen (met velden: ArtikelNummer, ArtikelNummerLev, ArtikelNaam)
Leveranciers (met veld: BedrijfsNaam)

Naast de velden hierboven dan ook nog waar ik op stuk loop, namelijk een label of tekstvak met daarin de actuele voorraad voor dat product.

Een formulier op basis van 3 tabellen dus neem aan dat je hiervoor een Query in gedachte hebt.

Hoop dus dat je me hierbij een stuk gerichter kan helpen.

Alvast bedankt voor alle hulp... greetz
 

Bijlagen

Hallo Michel,

Zou je behalve bovenstaande ook nog eens kunnen kijken naar mijn opvatting van jouw uitleg over queries gebruiken voor een invoerformulier. Volgens mij hoor ik namelijk met onderstaande rekening te houden:

  • Query moet gebasseerd zijn op 1 invoertabel.
  • Er moet worden voldaan aan de voorwaarden van het tabel (verplichte velden/ validatieeisen)
  • Alle velden uit het invoertabel moeten worden gebruikt
  • er mogen geen sleutelvelden uit andere tabellen worden gebruikt
  • totaalknop moet uit staan
  • unieke waarden moet uit staan

Ben benieuwd of ik dit alles goed heb geinterpreteerd..

greetz
 
Zelf zou ik voor de mutaties maar één getalveld gebruiken; d.m.v. een - teken geef je dan aan of een transactie de voorraad verhoogt of verlaagt (in geval dus van - teken). Het berekenen van de voorraad is dan simpel het veld per artikel optellen met SUM of DSUM. Door aparte velden te gebruiken verhoog je ook de kans op fouten, want in één record tegelijk toevoegen en uitgeven is dan mogelijk, terwijl dat een doorgaans onwenselijke handeling is: een artikel komt er bij (bestelling geleverd) of gaat er af (artikel verkocht).

In bijgaande db zit een query <qVoorraadmutaties> waarin e.e.a. is gebruikt op basis van één veld, en een selectie op de juiste mutatiecategorie. Want voor bestellingen gebruik ik hetzelfde veld Aantal, maar dat moet uiteraard niet worden opgeteld bij de voorraad.

Het is overigens nog niet perfect, maar dat zul je zelf ook wel constateren :)
 

Bijlagen

Super Michel,

Vanavond ga ik gelijk aan de slag om eens verder te knutselen met jouw oplossing.

De opvatting om slecht 1 veld voor aantallen te gebruiken is zoveel makkelijker, want naast de twee velden die ik al had, heb ik in het originele bestand ook nog een te bestellen veld dat nu ook overbodig is gemaakt... nogmaals superbedankt.

Wel zit ik nu nog met 1 dingetje en dat is het volgende.
In het formulier dat ik over de query heen wil leggen zal ook de naam van de leverancier moeten komen te staan. Nu is dit niet direct met een relatie aan het tabel voorraadmutaties gekoppeld, maar er bestaat wel weer een relatie tussen de tabellen artikelen en voorraadmutaties en een relatie tussen de tabellen leveranciers en artikelen.
Eigenlijk ben ik alleen op zoek naar een ja of een nee, maar is de indirecte relatie voldoende om de leveranciersgegevens op te halen? Zo nee, kan ik het leverancierstabel niet beter koppelen aan het voorraadmutatietabel?
 
Een bestelling is in mijn ogen in beginsel geen mutatietransactie, maar je kunt bestellingen wel op deze manier in je mutatietabel zetten. Zodra een artikel geleverd is, verander je dan de status van het artikel van In bestelling naar Ingeboekt. Maar dat principe levert toch een paar problemen op. Om te beginnen: een besteldatum is geen leverdatum. Gebruik je de Mutatiedatum als besteldatum, dan raak je ofwel de besteldatum kwijt als je goederen inboekt (de mutatiedatum moet worden aangepast bij inboeken) of je hebt geen inboekdatum. Bovendien: als een bestelling niet in één keer wordt geleverd, hoe ga je dan de reeds geleverde artikelen inboeken? Dus ik zou de mutaties alleen gebruiken voor plussen en minnen van de voorraad, en bestellingen en leveringen bijhouden in aparte tabellen.
Bovendien heeft een leverancier helemaal niks te maken met jouw voorraad beleid. Vraag jezelf af of het voor het aantal artikelen in een magazijn uitmaakt bij wie ze gekocht zijn. Ik dacht van niet...
Bij het leveren van de goederen kun je dan wel automatisch een record triggeren in mutaties, want je wilt de goederen uiteraard wel inboeken. Maar hou bestellingen (met uiteraard een tabel BestelRegels waarin je de bestelde artikelen opslaat) los van voorraadmutaties. Overigens heb ik weinig tot geen ervaring met de winkelbranche an sich, dus als er wel goede redenen zijn om het te doen, moet je het vooral blijven doen; ik ben nogal sterk afhankelijk van (al dan niet) logisch nadenken :)
 
Ben er bijna uit

Goededag Michel,

Wegens jouw goede duw in de juiste richting heb ik het inmiddels voor elkaar gekregen om een formulier in elkaar te draaien dat de gegevens mbt de voorraad ed keurig laat zien en toch ook bijna al waarden goed wegschrijft. Eigenlijk maak ik 2 formulieren. 1 voor het opboeken en 1 voor het afboeken (dit heeft als reden dat het huidige programma ook zo werkt)

Ik loop nog tegen 2 dingetjes aan (waarvan ik vraagstuk 2 waarschijnlijk al wel opgelost heb, maar slechts bevestiging zoek)... Wellicht kan jij hier nog een lichtje op schijnen.

Vraagstuk 1:

Zoals ik al had aangegeven wilde ik graag een apart tabel met daarin de mutatiesoorten. Nu ben ik erachter gekomen dat ik hieraan eigenlijk niet genoeg heb. Ik heb natuurlijk te maken met zowel afboekingen (en daar specificaties op) als opboekingen (en daar specificaties op). Kortom: Ik heb bedacht dat ik dan een globale mutatiesoort tabel en een specifieke mutatiesoorttabel wil hebben (die in relatie tot elkaar staan). In het tabel "Voorraadmutaties" is ruimte gemaakt voor een veld met de naam "Mutatiesoort" welke ik gevuld wil zien met de specifieke mutatiesoort.
Hoe kan ik het voor elkaar krijgen dat op (bv mijn formulier Opboeken) enkel de specifieke mutatiesoorten voor opboeken zichtbaar worden?

Vraagstuk 2:

Hierboven is al aangegeven dat ik voor het opboeken en afboeken 2 verschillende formulieren wil gebruiken. Voor afboeken moet uiteraard het Aantal af te boeken stuks negatief worden weggeschreven in het tabel "VoorraadMutaties'.
Als oplossing heb ik hiervoor bedacht dat ik een bijwerkquery kan laten draaien met als criteria de mutatiesoort en als expressie iets van -1*[veldnaam]. Klopt het dat ik dit zo wel kan oplossen of is er een makkelijkere manier.
Voor de gebruiksvriendelijkheid wil ik namelijk voorkomen dat iemand eerst een "-" moet intoetsen voor een negatief getal.

Hoop dat je me kunt helpen..

greetz
rene
 
Een bijwerkquery (vraag 2) lijkt mij overbodig; zodra de gebruiker een afboekactie start, weet je namelijk dat er afgeboekt gaat worden. Je kunt dan het - teken wel automatisch toevoegen. Overigens snap ik nu niet helemaal meer wat je gemaakt hebt; wellicht dat een nieuw voorbeeldje je vragen wat duidelijker maakt.
 
Sorry dat ik even geen reactie heb gegeven, maar het is druk geweest en heb geprobeerd het zelf toch nog een kans te geven.

Tevergeefs, sterker nog: het aantal vragen is eigenlijk alleen maar toegenomen en na veel zoeken op andere posts geen enkel antwoord gevonden :(

Ik heb mijn bestand in 3 rarbestandjes gezet als voorbeeld.

  • vraag 1 is nog steeds het vraagstuk mbt het minteken. Je hebt helemaal gelijk als je aangeeft dat er sprake moet zijn van een minteken als er een afboekactie wordt gestart. Dit wilde ik bewerkstelligen door zowel een formulier voor afboekacties, alsook een formulier voor opboekacties te creëren. Maar dan nog is mijn vraag... hoe krijg ik daar dan het minteken en hoe zorg ik ervoor dat het ook als negatief getal in mijn tabel wordt weggeschreven.
  • Mijn tweede vraag is eigenlijk ontstaan doordat ik mijn bestand heb uitgeprobeerd en tot mijn stomme verbazing zag dat het outputtextbox "Prijs per stuk" als een gewoon getal werd weergegeven. Ik weet hoe ik een notatie moet maken, maar wat ik ook aanpas het blijft een gewoon getal. Ik snap er helemaal niets van. De Query waarop het formulier is gebaseerd geeft als resultaat wel gewoon valuta en ook het tabel waarop de query is gebaseerd geeft als output valuta....

Hopelijk wil je er even naar kijken

Greetz
Renew
 

Bijlagen

Waarom gebruik je zo'n uitgebreide query als basis voor het selecteren van een artikel? Het is veel logischer om daar alleen de tabel Artikelen (en hooguit Leverancier) voor te gebruiken. Verder heb je een formulier Inboeken dat je volgens mij verkeerd gebruikt; althans: ik snap je subformulier daarvan niet. Eigenlijk heb je een formulier Artikelen nodig met een subformulier Voorraadmutaties, en niet andersom.
 
En je tweede vraag: een niet-afhankelijk tekstvak heeft geen voorgedefinieerde opmaak. Je haalt middels de besturingsbron een getal op uit een keuzelijst, en je ziet dus ook een getal. Hoe dat oorspronkelijk is opgemaakt, valt weg in het proces. Die opmaak zul je zelf weer toe moeten voegen: =Format([cbofrmAfboeken_ArtikelNummer].[column](8);"€ 0,00")
 
Hallo Michel,

Oeps.. ik schrik een beetje van je reactie... ik stel jouw mening in het bijzonder namelijk erg op prijs.

Is het heel fout wat ik heb gedaan, want voor zover ik het formulier draai werkt alles precies zoals ik wil. Het formulier begint in de new record modus. Vervolgens als je een artikelnummer selecteert zie je alle gegevens die ik graag wil zien. Enkele tekstvelden kunnen bewerkt worden en weggeschreven in de tabel tblMutaties. (al kreeg ik hier wel een probleem mee, namelijk dat er best veel lege records zijn weggeschreven).
Ik snap wat je bedoeld met de grote query, maar het leek mij juist makkelijk omdat ik nagenoeg voor alle velden deze query kan gebruiken. Wilde er per slot van rekening ook velden in hebben die niet in het tabel artikelen of leveranciers stonden, zoals "aantal", welke voor de huidige voorraad dient.
Als laatste heb ik het subformulier erin staan zodat ik de laatste mutaties voor een bepaald artikelnummer wil kunnen zien. Ik was van plan om daar enkel en alleen een kijkfunctie van te maken

Ben wel erg benieuwd dus hoe jij dit anders (en makkelijker) zou oplossen. Ben namelijk al tijden alleen aan het worstelen met hetgeen ik nu heb gemaakt, tal van voorbeelden bekeken enz..
Als ik al in het begin dus fundamentele fouten heb gemaakt is dat niet heel erg goed... ;)

Jouw oplossing voor vraag 2 werkt als een tierelier.. daarvoor bedankt

greetz
renew
 
Laatst bewerkt:
Je hebt een aantal onzichtbare plaatjes gepost. Als die interessant zijn, dan mag je daar nog wat aan doen ;)
 
Hallo Michel,

Ik begrijp die post niet helemaal. Is trouwens ook niet van mij en het lijkt erop dat deze reactie ook niet gerelateerd is aan mijn vraag. Zie deze link maar eens, want hij lijkt op random posts deze reactie te plaatsen.
http://www.helpmij.nl/forum/search.php?searchid=2162823

Mijn laatste reactie staat daar echter boven. Wellicht zou je daar je blik eens op willen werpen? Ben namelijk erg geschrokken van je reactie.

Groetjes
Renew
 
Laatst bewerkt:
Schrikken hoeft natuurlijk niet; als je iets gebouwd hebt dat voor jou werkt, dan moet je daar vooral mee verder gaan; het is jouw db en niet de mijne :)
De 'tussenpost' was waarschijnlijk een spammer, die ondertussen is verwijderd. Ik zal er nog eens naar kijken!
 
Bedankt voor de geruststelling, maar als jij aangeeft dat je mijn opbouw niet begrijpt dan zal je ongetwijfeld een andere aanpak hebben om hetzelfde te bewerkstelligen.

Zou je me nog wel kunnen vertellen hoe ik precies dat minteken automatisch aan mijn tekstbox toevoeg, zodat er ook een minwaarde in mijn tabel weg wordt geschreven. Kan hier nagenoeg niets over vinden en weet eerlijk gezegd ook niet of ik dit dmv een macro, expressie, vba of toch gewoon in de tekstbox zelf kan aanpassen.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan