scan inventory systeem met etiketten

Status
Niet open voor verdere reacties.

medi533

Gebruiker
Lid geworden
2 dec 2011
Berichten
24
Beste lezers,

ik ben bezig met het opzetten van een systeem om via een scanner, een formulier en een database producten te registreren. (de scanner doet precies t zelfde als wanneer je zelf de info zou intikken op je toetsenbord.)
ik heb dit al in excel gemaakt maar dat werkte niet met mijn labelprogramma dus ik probeer het nu in acces te maken.

Wat ik precies wil?
1. een formulier(heb ik al opgezet) waarin in een text vak een barcode ingevoerd wordt, handmatig of via een scanner.
wat informatie over de houdbaarheidsdatum en welke medewerker het invoerd bijv.

2.ik wil dat dat formulier dan uit mijn productendatabase de informatie ''trekt'' en in een soort logboek plakt met de info uit het formulier.
mijn database ziet er zo uit:
barcode nummer- productnaam- producteigenschap x- houdbaarheid in maanden na openen

ik ben aan de hand van wat filmpjes aan t proberen een query te maken maar dan moet ik weer een extra tabel etc. maken. hoe kan ik dit het beste aanpakken?

in excel had ik alles via vlookup, vba en macro's gedaan, maar met access weet ik niet waar ik moet beginnen. iemand enig idee?
heb al redelijk wat opgezet, heb een voorbeelddb in de bijlage
 

Bijlagen

  • voorbeelddatabase.accdb.zip
    54,6 KB · Weergaven: 37
Ik snap weinig van je vraag, vrees ik, maar ik zie wel een paar problemen. Ik vermoed dat je tabel [productdatabase] de te scannen producten bevat, en dat je in de tabel [scanlogboek] mutaties o.i.d. bij wilt houden. In ieder geval zet je daar de gescande barcode in, en vul je de overige gegevens aan. So far so good. Maar nu het probleem: (er zijn er meerdere trouwens) je gebruikt in de producttabel de verkeerde sleutel (het veld ID) en dat veld is dan ook niet gekoppeld aan de tabel met scangegevens. En dat gaat zo ook nooit werken. Je moet dus van het veld [Barcode] een sleutelveld maken (mag best een tekstveld zijn, maar lengte 255? Belachelijk lang; 25 zou meer dan genoeg moeten zijn). En dat veld moet je dus koppelen aan het veld [Barcode Scanned] (probeer veldnamen met spaties te vermijden, je maakt het jezelf alleen maar moeilijker). Nu gaat dat dus niet (volgend probleem) omdat je gegevens hebt in de tabel die niet in beide tabellen bestaan. En dat mag niet: in de tabel [scanlogboek] mogen alleen barcodes staan die je ook in de tabel [productdatabase] hebt ingevoerd.

Verder is het prima als je de gegevens uit de producttabel wilt zien (je hebt ze toch), maar je gaat ze natuurlijk niet opslaan; als je de barcode weet, heb je de rest namelijk ook. Waar je me écht kwijt raakt in het verhaal, is met deze zin:
ik ben aan de hand van wat filmpjes aan t proberen een query te maken maar dan moet ik weer een extra tabel etc. maken.
Ben benieuwd waarom je dat denkt :).
 
Ik snap weinig van je vraag, vrees ik, maar ik zie wel een paar problemen. Ik vermoed dat je tabel [productdatabase] de te scannen producten bevat, en dat je in de tabel [scanlogboek] mutaties o.i.d. bij wilt houden. In ieder geval zet je daar de gescande barcode in, en vul je de overige gegevens aan. So far so good. Maar nu het probleem: (er zijn er meerdere trouwens) je gebruikt in de producttabel de verkeerde sleutel (het veld ID) en dat veld is dan ook niet gekoppeld aan de tabel met scangegevens. En dat gaat zo ook nooit werken. Je moet dus van het veld [Barcode] een sleutelveld maken (mag best een tekstveld zijn, maar lengte 255? Belachelijk lang; 25 zou meer dan genoeg moeten zijn). En dat veld moet je dus koppelen aan het veld [Barcode Scanned] (probeer veldnamen met spaties te vermijden, je maakt het jezelf alleen maar moeilijker). Nu gaat dat dus niet (volgend probleem) omdat je gegevens hebt in de tabel die niet in beide tabellen bestaan. En dat mag niet: in de tabel [scanlogboek] mogen alleen barcodes staan die je ook in de tabel [productdatabase] hebt ingevoerd.

Verder is het prima als je de gegevens uit de producttabel wilt zien (je hebt ze toch), maar je gaat ze natuurlijk niet opslaan; als je de barcode weet, heb je de rest namelijk ook. Waar je me écht kwijt raakt in het verhaal, is met deze zin:

Ben benieuwd waarom je dat denkt :).
Beste octafish,
bedankt voor je reactie!
ja productdatabase bevat alle productinfo, ik heb niet alle records in t voorbeeld gezet ivm privacy enz. maar het gaat om zo'n 780 records normaal.
in het logboek wil ik bijhouden wat er gescand is. dus een medewerker scant producten in het formulier en dit formulier vult dan een regel in scanlogboek met info uit het formulier en uit productdatabase.
ik zal je wijzigingen toepassen en het nog eens proberen.

ja nouja ik snap niet precies hoe ik met een query de info invoer in sanlogboek, ik dacht dat er nog een tabel tussen moest zitten, maar nu je dit zo zegt denk ik te begrijpen wat je bedoelt. kan zeker ook gewoon een aanpas of regeltoevoegen query doen bij scanlogboek.
 
Is er een reden dat je mijn complete berichtje hebt gequoot? Niet meer doen :). Een query is niet veel anders dan een laag op een tabel; het maakt niet uit of je invoert via een query of rechtstreeks in de tabel. (Even gechargeerd, er is natuurlijk wel verschil). Dus een formulier kun je net zo goed op de tabel baseren als op een query.
In jouw geval is het voldoende om het formulier op de tabel te hangen. En dus de juiste velden gebruiken. Van de tabel Producten hoef je alleen het sleutelveld op te slaan.
 
We zijn een aantal weken verder en ik heb flink wat dingen kunnen doen. ik heb de tabellen een beetje aangepast, uitgevogeld hoe query's ed. werken en wat formulieren gemaakt.

hier mn bestand tot dusver:
https://drive.google.com/open?id=1RplbZ1-cxpmVSohPiGyLoe_UXL9LbjuD
inlog is jj en ww is 123 voor user account en rr en 123 voor een admin inlog

Wanneer een barcode niet herkent wordt dan maakt ie alsnog een record aan, wat ik heb ik fout gedaarn in de vba code?

Waar ik momenteel tegen aan loop is dat het me niet lukt om een zoek formulier te maken of een geneesmiddel of barcode al in de overzichts tabel staat of niet.
Ik zou namelijk vanuit het admin hoofdmenu (frmhomescreenadmin) nieuwe records willen maken en ook records kunnen bewerken in de overzichtstabel.

-Verder wil ik in de overzichtstabel meerdere barcodes per product hebben heb gelezen dat dit via een join table kan maar hoe precies snap ik niet echt.
-Daarnaast zou ik ook verschillende merken van hetzelfde geneesmiddel willen toevoegen die dus ook weer meerdere barcodes kunnen hebben.
dus voor een voorgeschreven geneesmiddel (hier heb ik evt een id nummer voor als verzamelcode)kunnen er meerdere merken zijn van hetzelfde geneesmiddel en deze kunnen per merk dus ook weer verschillende barcodes hebben.
 
Laatst bewerkt:
Wanneer een barcode niet herkent wordt dan maakt ie alsnog een record aan, wat ik heb ik fout gedaarn in de vba code?
Dat antwoord heb je zelf al gegeven in je beginvraag:
de scanner doet precies t zelfde als wanneer je zelf de info zou intikken op je toetsenbord.
Ik ben momenteel op vakantie en heb bewust geen laptop meegenomen, dus ik kan je db nu niet bekijken of downloaden. Je zult het dus met theoretische antwoorden moeten doen. Maar omdat de scanner als ‘toetsenbord’ fungeert, krijg je dus, als je in een tabelveld wat invult, automatisch een nieuw record. Dat kun je alleen voorkomen door het formulier ‘los’ te koppelen, en op te slaan via een knop die een record wegschrijft. Dan heb je ook alle tijd om alle in te voeren gegevens te controleren.

Als je een niet-bestaande code scant, dan bestaat dat artikel dus nog niet in je productentabel. Normaal gesproken gebruik ik altijd Keuzelijsten met invoervak voor een productselectie. Ik vermoed dat jij een tekstvak gebruikt, gezien ook je vraag. Dat zou prima moeten werken als alle artikelen bestaan, maar dat lijkt dus niet zo te zijn. In een keuzelijst met invoervak kun je in dat geval de gebeurtenis <Bij niet in lijst> triggeren, die het productenformulier opent, de nieuwe code invoert (die heb je immers net gescand) en waarin je de overige gegevens zoals productnaam, prijs, leverancier etc. invoert. Bij sluiten sla je dan dat nieuwe record op, kom je terug in het oorspronkelijke formulier en kun je het nieuwe product gelijk gebruiken.
Maar dan heb je dus geen tekstvak, maar een keuzelijst. De volgende stap lijkt mij niet zo moeilijk :).
 
Bedankt voor je reactie, zelfs als je op vakantie bent reageer je, wat mooi!

ik heb een keuzelijst met invoervak en dat werkt perfect, heb zelfs de foutmelding daar in gebouwd! ik wil niet dat op dat moment de foutieve codes bewaard worden dus die functie bouw ik apart in.
ik wil alleen dat admins handmatig via een formulier nieuwe producten kunnen toevoegen.
volgende probleem, de scanner scant een code en ''drukt'' op enter, prachtig maar dan maakt ie meteen een nieuw record aan.
als ik dan op de save knop druk nadat ik de rest van de info ingevoerd heb, maakt ie opnieuw een nieuw record aan. hoe zorg ik ervoor dat deze info in dezelfde record terecht komt als de barcode?

ander vraagje: is het mogelijk om na scannen van de barcode de productnaam te weergeven in het formulier? gewoon zodat men ziet met welk product men bezig is?
 
Ik werk niet (zo vaak) met scanners dus ik kan het gedrag ervan niet goed inschatten. Ik weet dat bij een db die ik op het werk heb gemaakt ook tupels worden ingescand, en daar blijft de cursor gewoon in het tekstveld staan. Dus ik vermoed dat het een instelling van de scanner is. Maar dat durf ik niet te zeggen.
Je tweede vraag los je op door (komt-ie weer...) geen tekstvak te gebruiken, maar een keuzelijst. Daar zet je dan de gewenste velden in die je wilt zien, en die vraag je dan weer op in extra tekstvakken die verwijzen naar de juiste kolom. Zo’n tekstvak krijgt dan als Besturingselementbron: =cboProduct.Column(1). Dat is dan trouwens de tweede kolom, niet de eerste. In de eerste kolom zou je dan het sleutelveld moeten zetten van het product. Dat heb je uiteraard ook nodig om te matchen met de scannerwaarde.
 
ah ik snap hem, zal t ff inbouwen.

Voor de scanner: t werkt nog niet helemaal de scanner tikt eigenlijk 1 voor 1 de cijfers in van de barcode en drukt aan t einde op enter.
Wat er nu gebeurd: de keuzelijst gaat naar een barcode die begint met het laatste cijfer van de gescande barcode, in plaatst van dat hij in zijn volledigheid zoekt naar de barcode.

2e vraag: ik zit er nog steeds mee dat zodra er op enter gedrukt is er een nieuw record aangemaakt wordt en dat de rest van het formulier verdergaat bij een volgend record. ik wil dat pas als ik op de ''sla op en ontstrip'' er een record aangemaakt wordt en de info uit t menu opgeslagen wordt.
 
Wonderlijk dat de scanner teken voor teken invoert en dan op “Enter” drukt. Zou niet hoeven. Maar je kunt dat nog wel ondervangen door de scanner op een pop-up te laten invoeren; zodra je het tekstvak (of keuzelijst, mijn voorkeur) selecteert open je dat formulier met een tekstvak en een afsluitknop (in Dialog modus) en als het formulier wordt gesloten door de scanner (de inmiddels wel nuttige Enter) staat de scancode in tekstvak of keuzelijst. En heb je dus geen probleem meer met een opgeslagen record.
 
Ik kan (nog steeds) geen Db’s openen, dus daar moet je nog een week voor wachten. Maar je hebt gelijk: mijn voorstel werkt via een apart formulier. Dat laad je dan met de parameter acDialog, zodat het pop-up formulier de werking van het hoofdformulier blokkeert tot je het pop-up formulier afsluit. Dat zou je scanner dus al (kunnen) doen door die ‘ingebakken’ Enter.
 
Waarschijnlijk staat je scanner ingesteld om na de scan een enter te geven. In de handleiding kan je vaak lezen hoe je dit omzet naar een tab.
 
@jwaque: ook een TAB kan riskant zijn, als het scanveld het laatste (tab)veld is. Dan maak je alsnog een nieuw record aan. Persoonlijk zou ik, als dat kan, dus elke vervolgactie van de scanner uitzetten. Alleen dus het tekstveld laten vullen.
 
nja deze scanner en pc worden ook voor andere dingen gebruikt dus die enter blijft er helaas in zitten. (dat mag ik ook niet veranderen)
wat moet ik doen bij t ontstripformulier? bij de keuzelijst barcodescanned bij gebeurtenis ''bij klikken'' een gebeurtenisprocedure maken?
Code:
Private Sub Keuzelijst307_Click()
DoCmd.OpenForm "Barcodechecker", acDialog
End Sub
en dan dit ?want dat werkt niet :confused:
ik snap ook niet echt hoe ik de barcodecheckerform moet indelen.. heb nu dit:
brc.png
maar dit is niet functioneel, als in het doet nog niks. Wat zie ik over het hoofd?
 
Laatst bewerkt:
maar dit is niet functioneel, als in het doet nog niks. Wat zie ik over het hoofd?
Geen idee wat je over het hoofd ziet; het pop-up formulier zou je moeten gebruiken om de code in te scannen. Dus de code die je nu hebt om te scannen, moet naar dat formulier verplaatst. Hoe je dat formulier triggert, mag je natuurlijk zelf bepalen :). Je zou bijvoorbeeld een gebeurtenis <Bij klikken> kunnen maken die controleert of er wat in het veld staat (zo ja: niet nog een keer scannen), en dan het formulier opent, de code scant, en die in de keuzelijst plaatst. Die zou dan opgezocht moeten worden, en omdat de scanner gelijk een <Enter> genereert, zou je daarmee het formulier weer kunnen sluiten. Daarbij zou je dan een check moeten hebben op de inhoud van de keuzelijst, want je wilt wel weten of de scanwaarde correct is of niet. Op basis daarvan zet je de gevonden waarde in een TempVar variabele (je moet tenslotte de gescande waarde weer teruglezen) en als de code weer terug is bij het oorspronkelijke formulier, vul je de gevonden waarde uit de TempVar in het tekstveld in. Daar zit dus geen <Enter> meer in, want die zit in het andere formulier. Je blijft dus in het juiste veld staan.
 
Geen idee wat je over het hoofd ziet; het pop-up formulier zou je moeten gebruiken om de code in te scannen. Dus de code die je nu hebt om te scannen, moet naar dat formulier verplaatst. Hoe je dat formulier triggert, mag je natuurlijk zelf bepalen :). Je zou bijvoorbeeld een gebeurtenis <Bij klikken> kunnen maken die controleert of er wat in het veld staat (zo ja: niet nog een keer scannen), en dan het formulier opent, de code scant, en die in de keuzelijst plaatst. Die zou dan opgezocht moeten worden, en omdat de scanner gelijk een <Enter> genereert, zou je daarmee het formulier weer kunnen sluiten. Daarbij zou je dan een check moeten hebben op de inhoud van de keuzelijst, want je wilt wel weten of de scanwaarde correct is of niet. Op basis daarvan zet je de gevonden waarde in een TempVar variabele (je moet tenslotte de gescande waarde weer teruglezen) en als de code weer terug is bij het oorspronkelijke formulier, vul je de gevonden waarde uit de TempVar in het tekstveld in. Daar zit dus geen <Enter> meer in, want die zit in het andere formulier. Je blijft dus in het juiste veld staan.

heb je een voorbeeld hiervan?
ik heb nu een normaaltekstvak gemaakt van t hoofdformulier, want toen dat een keuzevak was deed het ''bijklikken'' evenement het niet.
nu wel, en dan opent ie barcodechecker, maar dit doet hij als een tabel, ipv als een formulier. (popup staat aan bij de eigenschappen.)
Edit: als ik acdialog weghaal doet hij t wel, maar ik kan dan niks invoeren in het formulier? ik krijg een foutmelding geluid.

https://drive.google.com/open?id=1A1Xkv6mxUHMXirm2f8Q3dsYszXUqFd3B
 
Laatst bewerkt:
Is er een reden dat je de Quote knop hebt gebruikt en niet de 6 keer zo grote knop <Reageer op bericht> (of nog beter: het tekstvak <Snel reageren>)? Ik zie daar namelijk geen reden voor :).
Om welk formulier gaat het?
 
Sorry, automatisme was dat.
het gaat om het ontstripformulier, daarin wil ik graag die popup barcodechecker verwerken zoals je vertelde.
inlog is jj en ww=123 voor userinlog en admininlog = rr ww= 123
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan