Autor |
Beitrag |
hube
      
Beiträge: 38
WIN XP
D7 Prof
|
Verfasst: Mo 10.04.06 12:32
Hallo zusammen
Ich habe ein Kassen-Programm geschrieben, das zur Eingabe der eindeutigen Artikelnummer einen Barcodescanner benutzt. Dies funktioniert ohne Probleme. Nun habe ich jedoch festgestellt, dass nicht alle Benutzer die Eingabe mit dem Barcodescanner vornehmen und stattdassen die Zahlen (Artikelnummer) von Hand eingeben. So kommt es dann auch hin und wieder zu Tippfehler.
Nun zu meiner Frage:
Der Barcodescanner "simuliert" ja die Eingabe via Tastatur; dh. dem Programm ist es egal, ob es die Zahlen über den Barcodescanner oder über die Tastatur erhält. Ich suche nun eine Möglichkeit, die die Eingabe nur via Barcodescanner zulässt. Ich habe mir schon überlegt, einen Timer zu verwenden, der die Eingabe nur ein paar Zehntelssekunden zulässt (genau so lange wie der Barcodescanner zum übermitteln braucht) und das Feld löscht, wenn nach Ablauf dieser Zeit noch eine Eingabe gemacht wird.
Nur finde ich, dies keine "elegante" Lösung.
hat jemand eine andere Idee? (z.B. die Tastatur "sperren")
Besten Dank für Euere Hilfe.
hube
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.04.06 12:35
der barcode scanner muss die daten dann halt anders übermitteln
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 10.04.06 12:36
über das onkeypress-event des eingabefelds den key auf #0 setzen?!
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mo 10.04.06 12:45
Durckst du die Barcodes selber? Dann würde ich einfach ein Zeichen im Barcode vorne dran hängen, dass aber nicht drunter steht (sprich: der eintippende User kann das nicht mittippen). Und wenn nicht dieses Zeichen als erstes kommt sperrst du die Eingabe komplett
Was du allerdings beachten musst: sollte der Barcode-Scanner mal ausfallen oder der Barcode unlesbar sein (sowas passiert ja manchmal im Supermarkt, wenn man z.B. Tomaten kauft und das Klebeetikett so draufklebt, dass es einen Knick hat), gibt es ohne die Tastatur keine Möglichkeit den Artikel zu erfassen!
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
recall
      
Beiträge: 449
|
Verfasst: Mo 10.04.06 12:49
Setz den Focus nicht auf ein Edit, sondern zeig ein Dialog-Fenster an, auf dem du ein Edit mit Left = -999 plaziert hast und wo steht "Bitte Scannen... (oder so)". Wenn der User das Edit-Feld nicht sieht, dann wird er auch nix eintippen.
//EDIT: Oder noch einfacher. Du willst doch nur verhindern, dass sich jemand vertippt, oder ?
Dann zwinge den user bei manueller Eingabe alles zweimal (wie ein Passwort) einzugeben.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.04.06 13:24
das ist alles unelegant gelöst, warum willst du das überhaupt verhindern, wo ist der sinn ? dann frag doch die eingaben direkt ab, dann gehts zwar immernoch mit tastatur, es sei denn du drehst was am scanner.
|
|
hube 
      
Beiträge: 38
WIN XP
D7 Prof
|
Verfasst: Mo 10.04.06 13:31
@alle
Besten Dank für die verschiedenen Ideen. Bis jetzt gefällt mir die mit dem Bestätigungseingabe am besten. Das mit dem "versteckten" Zeichen ist auch gut, jedoch sind schon etwa 10'000 Etiketten ausgedruck und die Umstellung geht ein paar Monate (Jahre).
@F34r0fTh3D4rk
Ich möchte die Eingabe per Tastatur wegen den (leider immer wieder vorkommenden) Fehleingaben unterbinden. Die Zahlen die übermittelt werden sehen z.B. so aus: 1234-5678
Gruss hube
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Mo 10.04.06 13:47
was hast du denn für einen barcode scanner ?
bei denen mit denen ich bisher gearbeitet habe, kann man entweder per Treiber eine COM Schnittstelle simulieren lassen, über die dann der Scanner seine Daten schickt. Man konnte aber den Scanner auch so konfigurieren, dass er vor den gescannten Code immer eine fre wählbare Tastenkombination angehängt hat.
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.04.06 13:49
was sind denn das für fehleingaben ? sowas muss in deinem programm behandelt werden, bzw ist sonst nicht dein problem
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 10.04.06 13:53
@F34r0fTh3D4rk
ich nehm an, er meint tippfehler... da kann man schlecht drauf reagieren, wenn man ein produkt mit nummer 123 und eins mit nummer 132 hat, woher soll das prog dann wissen, welches gemeint ist?! so sehr mitdenken geht wohl (noch) nicht...
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.04.06 13:54
ja aber das ist dann ja nicht sein problem ?!
dann muss der user das richtig machen oder den barcode scanner benutzen damit das nicht passiert
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mo 10.04.06 14:35
Wenn er es aber komfortabel unterdrücken könnte, dass solche Feleingaben gemacht werden, wär das doch nicht schlecht  Und genau das will er ja hier wissen!
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.04.06 14:41
ich verstehs net, wenn jemand keine fehleingaben machen will dann soll er doch nen scanner benutzen ansonsten tippt er es halt ein da besteht überhaupt kein problem für den programmierer Oo
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 10.04.06 16:09
Eine Möglichkeit, die mir so grad in den Sinn kommt:
Überprüfe per GetAsyncKeyState, ob der Tastatur-Treiber tatsächlich grad diese Taste gedrückt hat, oder ob es nur eine Emulierte Taste ist. Bei einer emulierten Taste sollte der KB-Treiber False zurückliefern ...
Keine Garantie ob's funzt ...
Ansonsten wäre wirklich die Möglichkeit über die COM-Schnittstelle zu bevorzugen und bei manueller Eingabe die Nennung zu wiederholen ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.04.06 16:22
wenn der user aber die tastatur nimmt dann liegt das nunmal an ihm wenn der user weils eben besser ist den scanner benutzt ist doch alles gut.
man muss doch keinen user zu einer entscheidung verleiten, das wäre ja als wenn der user ne intelligenz eines steines hätte.
ich glaube auch dass niemand der einen scanner hat, das freiwillig eintippt und wenn der dann fehler macht ist er selbst schuld.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 10.04.06 16:23
Also:
Wenn man das trennen will, gibt es 3 Möglichkeiten, aber erstmal eins vorneweg:
Wenn Du den EAN-Code einscannen lässt, sind unbemerkte Tippfehler eher unwarscheinlich, das der EAN-Code ziemlich redundant ist. Wenn Du andere Artikel-Nr. einscannen willst, wo also Zahlendreher/Tippfehler zu durchaus zulässigen Artikelnummern führen, musst Du dir etwas einfallen lassen, dazu gleich mehr.
Erstmal die 3 Möglichkeiten:
1. Scanner über USB: Wenn es sich um einen 'richtigen' USB-Scanner handelt, kann man über USB an die Daten ran.
2. Scanner über RS-232 (mein Favorit). Da die Daten über RS-232 reinkommen, ist die Unterscheidung klar.
3. Scanner über KBD: Viele Scanner schicken eine Preambel mit (Kombination aus Tastendrücken). In einem Messagehandler kannst Du die Preambelsequenz abfangen und weisst dann auch, ob/dass er vom Scanner kommt.
Nicht alle Scanner implementieren die USB-Geschichte korrekt (hab ich mir sagen lassen), sodaß es noch stark vom Hersteller abhängt, ob Du dieses Feature verwenden kannst.
Die Anbindung per RS-232 ist imho sehr einfach, robust, seit zig Jahren bewährt und funktioniert einfach.
Leider ist das Erfassen von Barcodes per se nicht 100%ig sicher. Du kannst zwar mit Checksums einiges Abfangen, aber rein statistisch gesehen wirst Du Lesefehler bekommen. Weiterhin gibt es nunmal verschmutzte Barcodes, Barcodes hinter Folien, Schwarze Barcodes auf blauem Hintergrund usw. kurzum Barcodes, die man nicht lesen kann. Und dafür MUSST Du einfach eine manuelle Eingabe vorsehen.
_________________ Na denn, dann. Bis dann, denn.
|
|
hube 
      
Beiträge: 38
WIN XP
D7 Prof
|
Verfasst: Di 11.04.06 07:51
Besten Dank für alle Antworten.
@F34r0fTh3D4rk
Ich verstehe es auch nicht, wieso es (einen) User gibt, der lieber die Zahlen eintippen statt diese mit dem Scanner einzulesen. Bei diesem User handelt es sich jedoch um den absoluten super DAU. Dazu kommt, dass ich Fehleingaben leider nicht abfangen kann, da sich die ersten 4 Stellen auf die Kundennummer und die letzten Stellen um die (fortlaufende) Artikelnummer handelt.
@alle
Ja, es ist notwendig, dass in Ausnahmefällen die Eingabe über die Tastatur möglich sein muss. Jedoch soll es wirklich bei Ausnahmefällen bleiben! Deswegen finde ich die Lösung mit dem "Bestätigungsfenster" nicht schlecht.
Beim Scanner handelt es sich um einen "Manhattan CCD Barcode Scanner 8cm USB".
Nicht schlecht finde ich auch den Vorschlag von BenBE mit dem GetAsyncKeyState, ich werde mal schauen ob ich damit etwas realisieren kann.
Besten Dank Euch allen für die Hilfe und Vorschläge.
hube
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 11.04.06 08:13
hube,
sorry ich verstehe dein problem nicht. beim barcode nimmt man normal ein prüfziffernverfahren, damit gewährleistet wird, dass der eigegebene code richtig ist. ist er nicht richtig, dann wird zur neueingabe aufgefordert. das ist doch vollkommen egal woher die daten kommen. ausser du hast die prüfziffer vergessen, aber dann hast du ein problem, weil nicht immer gewährleistet werden kann, dass der barcodereader auch richtig liest... somit solltest auf alle fälle eine prüfziffer mitgeben nur so kannst du probleme vermeiden.
und mal davon abgesehen, ab und zu hat das auch mal mucken und da muss der user die möglichkeit besitzen auch den code manuell einzugeben.
noch einen schönen tag
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 11.04.06 09:28
@Grenzgaenger: Die Prüfziffern verringern nur die Möglichkeit einr Fehllesung, 100%ig verhindern lässt sich das aber nicht.
_________________ Na denn, dann. Bis dann, denn.
|
|
hube 
      
Beiträge: 38
WIN XP
D7 Prof
|
Verfasst: Di 11.04.06 09:33
Ich gebe ja zu, dass es mit einer "glücklicheren" Vergabe der Nummer weniger Probleme geben würde. Nun ist es leider so, dass sich die Nummer auf der Etikette aus der 4-stelligen Kundennummer getrennt von einem Bindestrich mit der 4-stelligen Artikelnummer zusammensetzt.
Das Progi ist in einem Secondhandladen im Einsatz und so musste ich das "Problem" der Artiklenummer auf diese Weise lösen.
Gruss
hube
|
|