Advies uitbreiding/inrichting database

Status
Niet open voor verdere reacties.

Nico84

Gebruiker
Lid geworden
21 jul 2011
Berichten
191
Wie kan mij advies geven over het volgende, zal als eerst de huidige situatie beschrijven:

Wij leveren producten aan klanten die er op ons risico staan. (ongeveer 10 verschillende artikelen)
-Bij aankomst bij de klant worden de artikelen geteld en op een lijst opgeschreven. (beginvoorraad)
-Artikelen die niet verkoopbaar zijn worden mee retour genomen (retouren)
-Schap wordt bijgevuld (levering)
-Als je klaar bent schrijf je het aantal wat in het schap staat weer op een lijst, Beginvoorraad - retouren + levering= (eindvoorraad).

Wij werken al met handcomputers, hierin wordt alleen de levering en de retouren ingevuld.
Op kantoor worden aan het eind van de rit de handterminals uitgelezen en eind van de week de facturen uitgeprint.
Dit werkt prima, alleen het systeem raakt verouderd en voldoet niet meer aan onze wensen.
Daarom heb ik vorig jaar het idee opgepakt om een database te maken en stapje voor stapje uit te breiden.

De volgende stap is om een database te schrijven voor een windows tablet.
Waarin alles op ingevoerd wordt, zoals de beginvoorraad, retouren, levering en de eindvooraad en vervolgens een afleverbon printen.
Vervolgens de data importeren in mijn huidige database om de facturen uit te printen.


De beginvoorraad en de eindvoorraad heb ik nu een jaar lang met de hand ingevoerd in de database.
Hierdoor kan ik rapporten uit printen om te zien wat er verkocht is van een product. (dankzij jullie hulp van eerdere vragen)
Bijvoorbeeld:
Maandag 2-01-12 eindvoorraard artikel 1 = 40
Woensdag 4-01-12 beginvoorraad artikel 1 = 16
Dan zijn er 24 verkocht.


Tabellen die ik hier voor gebruik zijn:
tblVoorraad
VoorraadID - autonummering
DebiteurID
Datum - datum wanneer je bij de klant geweest bent
Mutatiedatum - *uitleg hieronder
Mutatietype - Hier staat dan beginvoorraad of eindvoorraad

tblVoorraadregels
VoorraadRegelID - autonummering
VoorraadID
ArtikelID
Aantal

*Mutatiedatum:
Voor de beginvooraad wordt de datum van de laatste mutatie van die klant opgehaald dmv dmax.
Voor de eindvooraad is deze datum gelijk aan de datum.

Voor elke mutatie wordt een aparte regel aangemaakt in de tblVoorraad.


Vraag:
Hoe kan ik de tabellen het best inrichten? en misschien ben ik al wel verkeerd begonnen.
-Aparte tabellen voor Voorraad (begin en eindvoorraad) en de order (levering en retouren)?
-1 tabel voor alle mutaties, maar voor iedere mutatie een aparte regel in de tblVoorraad (aparte regel voor beginvorraad, levering, retour)
-1 tabel voor alle mutaties, alle mutaties in 1 regel en in de tblVoorraadregels de mutatiedatum en het mutatietype meegeven?

Alvast bedankt voor alle hulp!
 
Ik weet dat het een lang verhaal is, maar kan iemand de juiste manier aangeven?
 
Mutaties met mutatietype en datum vastleggen in een mutatietabel.
Iedere mutatie leg je daarbij apart vast dus 1 mutatie = 1 record.

Tardis
 
Bedankt Tardis voor je reactie en excuses voor mijn late reactie.
Heb een voorbeeld in elkaar gezet wat de bedoeling is.


Als ik iedere mutatietype apart vast leg in een tabel krijg ik 4 records met het zelfde ordernummer en opmerking en Vertegenwoordiger.
Alle mutaties worden gelijk vastgelegd en dat is bij de klant.
Weet niet of dat dan helemaal de juiste manier is.

De bedoeling is beginnen met formulier Klant, Retouren, levering en dan eindvoorraad.
Kan iemand een zetje geven hoe ik dit het best werkend in elkaar krijg?
 
Laatst bewerkt:
Je bijlage is in 2007 format, dus dat wordt vanavond :)
 
Als je er naar wil kijken heel graag OctaFish.
Heb inmiddels de bijlage veranderd in 2003 formaat.
 
Zet er ook maar een 2007 variant bij, want die kan ik thuis wel inlezen.
 
Ik heb er naar gekeken, en eerlijk gezegd snap ik er niet zo veel van; ik mis een tabel Voorraadmutaties, en zie bij je artikelen ook geen voorraad staan. En die toevoegquery die je steeds opstart bij het formulier, en de Toevoegmodus die standaard aan staat, en dan ook nog eens een extra DoCmd.GoToRecord , , acNewRec bij het laden van het rapport... Dat is een mug doodslaan op de muur en daarna het huis opblazen voor de zekerheid ;)

En je 'rekenmachine' kan ook een stuk beter, maar dat staat hier uiteraard los van...
 
Bedankt OctaFish dat je ernaar wilde kijken, Zekerheid voor alles haha.

Wij vullen een schap met artikelen bij een klant. Dit alles zetten wij neer op ons risico.
Wij moeten het schap bijvullen en producten die niet verkoopbaar zijn mee terug nemen.

1: Omdat ik bij wil houden wat er verkocht wordt bij een klant, moet de chauffeur bij aankomst de aantallen per artikel tellen. (dit noem ik de beginvoorraad).

2: Vervolgens haalt hij artikelen uit het schap die niet verkoopbaar zijn. (retouren)

3: dan wordt het schap aangevuld (levering)

4: Beginvoorraad minus de retouren, plus levering krijg de nieuwe voorraad die bij de klant aanwezig is (dit noem ik de eindvoorraad).

Het makkelijkst zal zijn als we een uitdraai van de kassa krijgen met de verkochte artikelen, maar dit is niet mogelijk.



De bedoeling van de toevoegquery is dat de (actieve) artikelen automatisch toegevoegd worden aan mijn formulier. (het zijn maar ongeveer 15 artikelen)
Op deze manier hoef de chauffeur alleen maar de aantallen in te voeren.
En niet artikel opzoeken, aantal invullen, volgend artikel opzoeken aantal invullen enz. enz.


Kan jij tips/advies geven hoe ik de gegevens van de verschillende formulieren in 1 record krijg?
Of misschien een andere aanpak om de gegevens in te voeren.
 
Laatst bewerkt:
Zal er vanavond naar kijken.
 
Heb een nieuwe bijlage bij de laatste post bijgevoegd. Hoop dat die iets duidelijker is.
 
Kan iemand kijken waar het mis gaat.

Vanuit frmKlant wordt frmOrder geopend met de volgende code
Code:
Private Sub KlantID_DblClick(Cancel As Integer)

Dim stLinkCriteria As String

stLinkCriteria = Me.KlantID
DoCmd.OpenForm "frm2_Orderinvoer", acNormal, , , acFormAdd, acWindowNormal, stLinkCriteria
DoCmd.Close acForm, "frm1_Klant"
End Sub

Maar krijg een foutmelding kan geen waarde aan dit object toekennen.

Haal ik om frm2_Orderinvoer de besturingselementbron weg bij KlantID dan werkt het wel, alleen wordt het formulier niet geopend als nieuw record.

Hoe krijg ik door te dubbelklikken op klantID dat frmOrderinvoer geopend wordt als nieuw record?
En het klantnr alvast ingevuld wordt en de gegevens opgehaald worden voor die klant.

Heb een voorbeeld bijgevoegd.
 

Bijlagen

Laatst bewerkt:
Eén regeltje toevoegen...

Code:
If Not IsNull(Me.OpenArgs) Then
    Me.txtKlantID.SetFocus
    Me.txtKlantID = Me.OpenArgs
End If
 
Bedankt OctaFish.
Waarom werkt het pas als je de focus op dat veld zet?


Ik heb hetzelfde met een toevoegquery.
Staat de focus op een veld in het hoofdformulier en druk ik op een knop op mijn hoofdformulier die de toevoegquery uitvoer, worden er 0 regels toegevoegd.
Zet ik de focus eerst in mijn subformulier en druk dan op de knop, worden de regels wel toegevoegd.
 
Zou ik eerlijk gezegd niet weten; ik kan mij voorstellen dat het formulier de focus op dat moment nog niet heeft. Door een veld specifiek wèl de focus te geven, weet Access welk veld moet worden gevuld. Maar nogmaals: kleine slag in de lucht! Ik hou mij ook aanbevolen voor een betere verklaring :)
 
Dat is de wondere wereld van Access zeker :).

Gebruik onderstaande toevoegquery om artikelen toe te voegen aan de tabel Orderregels.


Code:
INSERT INTO tblOrderregels ( OrderregelID, OrderID, ArtikelID )
SELECT ([OrderID] & [Artikelnr]) AS OrderRegelnr, [Forms]![frm2_Orderinvoer]![txtOrdernummer] AS OrderID, tblArtikel.Artikelnr
FROM tblArtikel;

Om een uniek orderregelid te maken voeg ik de velden orderid en artikelid samen.
Het gegevenstype voor orderregelid is nummeriek.
Voer ik dan de query uit krijg ik de melding dat er geen records aan de tabel toegevoegd kunnen worden.
Verander ik het gegeventype voor orderregelid in tekst, dan worden de records wel toegevoegd.

Maak access als je 2 velden samenvoegd gelijk een tekstwaarde van ipv nummeriek?
Voor Access maak het zeker niet uit of een uniekveld nummeriek of tekst is?
 
Je kunt elk veld uniek maken, zelfs een Ja/Nee veld. Al heb je in dat geval maar twee records, wat natuurlijk niet erg handig is :D
In jouw geval zou de combinatie van de twee numerieke velden een getal kunnen opleveren dat te groot is voor het bronveld. Is dat Integer, dan mag een getal niet groter zijn dan 65536 bijvoorbeeld. Ik zou er zelf denk ik wel een tekstveld van maken, en met Format de layout van het veld als volgt instellen:
Code:
(Right("0000" &[OrderID];4) & Right("0000" &[Artikelnr];4)) AS OrderRegelnr
Zodat je altijd een 8-cijferig (tekst)nummer overhoudt waarop je prima kunt sorteren.
 
Het veld is van het formaat lange integer, heb er nu een tekstveld van gemaakt.

De layout is wel een goede tip.
Voor orderid heb ik het niet nodig want dat geeft altijd dezelfde lengte
Code:
Format(Now(), "yyyymmddhhmmss" & [txtKlantID])
Maar voor artikelID is het wel een goede, deze begint bij 1 met tellen.

Kan er weer verder mee, bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan