{"id":55000687,"date":"2009-10-01T00:00:00","date_gmt":"2020-05-22T22:18:02","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=687"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"OPOS__Barcodes_scannen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/","title":{"rendered":"OPOS &#8211; Barcodes scannen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Ob Sie nun ein WaWi (Warenwirtschaftssystem) entwickeln, eine Inventurdatenbank oder eine Zugangskontrolle &#8211; fast immer treffen Sie auf Barcodes, die zur Identifikation eines Objekts dienen. Das Erstellen solcher Barcodes ist die einfachere, das Lesen die schwierigere Sache. Wir zeigen, wie Sie sich die Entwicklung mithilfe von OPOS &#8211; nicht Opus! &#8211; erleichtern k&ouml;nnen.<\/b><\/p>\n<p>Es ist eigentlich nicht besonders schwierig, Barcodes mit einem handels&uuml;blichen Barcode-Scanner in eine Anwendung einzulesen. In vielen F&auml;llen sind das Ger&auml;te, die in die Tastaturschnittstelle eingeschleift werden. Ein Scan erzeugt dann genau so Zeichen, als seien diese &uuml;ber die Tastatur eingegeben worden.<\/p>\n<p>Der Scanner ist damit universell einsetzbar und Barcodes k&ouml;nnen in Notepad, Excel, Word oder eben auch in eine Textbox eines Access-Formulars eingelesen werden.<\/p>\n<p>Fr&uuml;her gab es am Kabelanschluss des Barcode-Scanners einen Adapter, an den man den PS2-Stecker der Tastatur andockte. Heute, da fast jedes externe Ger&auml;t &uuml;ber eine USB-Schnittstelle verf&uuml;gt, findet man diese Technik eher selten und auch Barcode-Scanner sind meist mit USB-Steckern ausger&uuml;stet oder zumindest mit einer seriellen RS232-Schnittstelle.<\/p>\n<p>Die Umsetzung dieser seriellen Signale in Tastaturanschl&auml;ge &uuml;bernimmt dann ein Treiber des Herstellers, der auf dem System installiert wird und h&auml;ufig mit einer zus&auml;tzlichen Anwendung namens Softwedge daherkommt.<\/p>\n<p><b>Umst&auml;ndlichkeiten<\/b><\/p>\n<p>Gehen wir von einer Anforderung aus, wie sie an jedes Kassensystem gestellt wird: F&uuml;r eine Reihe von Artikeln auf dem Laufband ist der Preis aus einer Datenbank zu ermitteln.<\/p>\n<p>Die Artikel sind bereits in einer Artikeltabelle gespeichert, die neben eindeutiger IDs f&uuml;r die Datens&auml;tze zus&auml;tzlich jeweils EAN-Nummern enth&auml;lt. Der Barcode jedes Artikels wird nun eingescannt, die EAN-Nummer gelesen und &uuml;ber eine Abfrage auf die Artikeltabelle und der EAN-Nummer als Kriterium der Preis ermittelt. <\/p>\n<p>Rein datenbanktechnisch ist das eine leichte Aufgabe, wenn man einmal davon absieht, dass der Vorgang sehr z&uuml;gig erfolgen muss, was eine ausreichend schnelle Verbindung zum Backend erforderlich macht.<\/p>\n<p>Sehen wir uns aber an, wie hier die &uuml;blichen Voraussetzungen aussehen, wenn man dabei einen im Tastaturmodus betriebenen Barcode-Scanner verwendet.<\/p>\n<p>Als Eingabesteuerelement kommt hier praktisch nur ein Textfeld in einem Formular infrage. Das erste Problem, das sich hier stellt, ist die Tatsache, dass dieses Textfeld zu Beginn des Scans zwingend den Fokus haben muss, sich also die Einf&uuml;gemarke darin befinden muss. In der Eile eines Kassiervorgangs werden Sie dazu sicher weder die Maus, noch die <b>Tab<\/b>-Taste bem&uuml;hen wollen.<\/p>\n<p>Alternativ k&ouml;nnte man auch ohne Textfeld arbeiten, die Eigenschaft <b>Tastenvorschau<\/b> des Formulars auf <b>Ja <\/b>setzen und so alle &#8222;Anschl&auml;ge&#8220; des Scanners etwa in <b>KeyDown<\/b>-Ereignissen abfangen.<\/p>\n<p>In beiden F&auml;llen aber ist ungewiss, wann denn der Scan abgeschlossen ist. Schlie&szlig;lich kommen die Ziffern als eine Serie von zeitlich versetzten Anschl&auml;gen an, was noch nicht mal besonders schnell geht &#8211; man kann durchaus dabei zuschauen, wie die Zeichen nach und nach eintrudeln. Nun ist zus&auml;tzliche Logik erforderlich, die erst einen vollst&auml;ndigen Barcode identifiziert.<\/p>\n<p>Als Regel k&ouml;nnte man etwa festlegen, dass f&uuml;r einen EAN13-Code nach 12 Zeichen Schluss ist. Was aber, wenn auch Artikel mit EAN8-Barcodes vorkommen, was f&uuml;r kleine Verpackungen etwa gang und g&auml;be ist Hier schl&auml;gt die Regel fehl und andere Mittel zur Ermittlung des letzten Zeichens sind gefragt.<\/p>\n<p>Eine sehr unzuverl&auml;ssige Methode w&auml;re etwa, die Zeit zu messen, die zwischen den Anschl&auml;gen verstreicht, und festzulegen, dass ein Scan dann vollst&auml;ndig ist, wenn innerhalb eines definierten Zeitraums keine neue Tastatureingabe erfolgt.<\/p>\n<p>Machen Sie sich besser keine Gedanken, wie solch ein Vorhaben wasserdicht zu realisieren ist. Es gibt eine erheblich einfachere und stabilere L&ouml;sung. Wenn ein Ger&auml;t schon serielle Signale sendet, warum sollte man diese dann in Tastaturbefehle umwandeln, statt sie gleich in Ereignisse zu &uuml;berf&uuml;hren, die von einer ma&szlig;geschneiderten Schnittstelle ausgewertet werden k&ouml;nnen Und genau das ist OPOS.<\/p>\n<p><b>OPOS<\/b><\/p>\n<p>OPOS ist die Abk&uuml;rzung f&uuml;r OLE for Retail POS. POS wiederum steht f&uuml;r Point Of Sales. Das ist der Oberbegriff f&uuml;r alle Hardware-Komponenten, die im Umfeld der Warenwirtschaft vorkommen k&ouml;nnen &#8211; also Barcode-Scanner, Bondrucker, Kassenladen, Chipkarten- und Magnetstreifenleser, Waagen und vieles mehr. All diese Komponenten verf&uuml;gen &uuml;ber Treiber, die h&auml;ufig das Signal der Ger&auml;te in serielle Byte-Folgen umwandeln. Das Abgreifen dieser Byte-Folgen &uuml;ber API-Funktionen ist schwierig und setzt mindestens voraus, dass die Spezifikation der Datenpakete bekannt ist. Die Hersteller ver&ouml;ffentlichen diese Spezifikationen jedoch in den seltensten F&auml;llen.<\/p>\n<p>Mit dem OLE im Begriff kommt nun eine weitere Schnittstelle ins Spiel. Tats&auml;chlich ist die Bezeichnung OLE in diesem Zusammenhang veraltet und irref&uuml;hrend. Richtiger w&auml;re COM oder ActiveX, denn das Wesen von OPOS sind ActiveX-Schnittstellen zu den Treibern der Ger&auml;te.<\/p>\n<p>Kurz und b&uuml;ndig zusammengefasst funktioniert OPOS f&uuml;r unsere Aufgabe so: Sie instanzieren ein Objekt einer ActiveX-Schnittstelle, die Sie in die Verweise Ihres VBA-Projekts aufnehmen &#8211; hier eine <b>OPOS-Scanner<\/b>-Komponente -, nehmen ein paar Einstellungen vor und werten nun nur noch die Scan-Ereignisse aus, die die Komponente erzeugt. Wie das genau vonstatten geht, finden Sie im Folgenden erl&auml;utert.<\/p>\n<p><b>Voraussetzungen<\/b><\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie haben einen Barcode-Scanner mit einer RS232- oder USB-Schnittstelle.<\/li>\n<li class=\"aufz-hlung\">Der Hersteller bietet OPOS-Treiber an.<\/li>\n<li class=\"aufz-hlung\">Sie haben administrative Rechte auf ihrem System.<\/li>\n<li class=\"aufz-hlung\">Der Hersteller bietet Software an, mit der sich Scanner und OPOS-Schnittstelle im System konfigurieren lassen.<\/li>\n<\/ul>\n<p>Der letzte Punkt ist nicht zwingend erforderlich, weil sich die Konfiguration im Prinzip auch manuell &uuml;ber Eintr&auml;ge in die Registry erledigen lie&szlig;e. <\/p>\n<p><b>Modell<\/b><\/p>\n<p>Es ist verbl&uuml;ffend: Da hat ein Konsortium von Herstellern schon vor &uuml;ber zehn Jahren einen Standard verabschiedet und fortlaufend weiterentwickelt, ohne dass dieser trotz aller Vorteile wirklich wahrgenommen w&uuml;rde. Zwar bieten praktisch alle Hersteller OPOS-Support und die entsprechenden Treiber an, dennoch sucht man nach Anleitungen oder Beispiel-Codes im Netz fast vergebens. Die einzigen Dokumentationen dazu finden sich nahezu ausschlie&szlig;lich in recht d&uuml;rftiger Form in PDFs auf den Support-Seiten der POS-Hersteller.<\/p>\n<p>Auch die Seite des Konsortiums ARTS selbst [1] gibt nicht viel her. Dort kann man das Hauptwerk zu UnifiedPOS, einer kompatiblen Weiterentwicklung von OPOS, herunterladen, die auch die Referenz zu OPOS enth&auml;lt. Auf den fast 2000 Seiten dieses Dokuments kann man zwar haarklein Spezifikationen zu jeder Hardware-Gattung finden, aber keine konkreten Entwicklerbeispiele.<\/p>\n<p>Eine etwas &auml;ltere Version des OPOS Programmers Guide ist &uuml;brigens auch auf der Begleit-CD zum Magazin gespeichert.<\/p>\n<p>Dabei ist das Ganze so schwierig nicht. Beginnen wir mit dem generellen Modell von OPOS, wie es in Bild 1 veranschaulicht ist. <\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/OPOS_Modell_opt.jpeg\" alt=\"OPOS_Modell.emf\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: OPOS-Modell<\/span><\/b><\/p>\n<p>Der Barcode-Scanner ist &uuml;ber USB an den Rechner angeschlossen. Es handelt sich hier um ein Modell des Herstellers Metrologic. Beim ersten Einstecken wird Windows vergeblich nach Treibern f&uuml;r das Ger&auml;t suchen, aber auch online nicht f&uuml;ndig werden. Entweder Sie haben nun eine mit dem Ger&auml;t gelieferte CD zur Hand oder Sie laden die passenden Treiber vom Hersteller-Support herunter.<\/p>\n<p>Dort finden Sie meist allerlei Downloads ohne weitere Anmerkungen, k&uuml;mmern sich zun&auml;chst aber nur um den USB-Treiber, der gemeinhin lediglich die Aufgabe hat, das USB-Ger&auml;t &uuml;ber einen virtuellen COM-Port zu ver&ouml;ffentlichen. Ohne diesen Treiber funktioniert alles Weitere nicht.<\/p>\n<p>Sie entpacken also das heruntergeladene Treiberpaket, stecken den Scanner ein und folgen den Anweisungen von Windows, die letztlich in der Aufforderung m&uuml;nden, das Verzeichnis mit den Treibern anzugeben.<\/p>\n<p>Das Ger&auml;t zeigt sich nach erfolgreicher Installation im Zweig Anschl&uuml;sse des Ger&auml;te-Managers von Windows und im Prinzip k&ouml;nnten Sie nun bereits &uuml;ber eine COM-Schnittstelle Kontakt mit dem Scanner aufnehmen und seinem seriellen Port lauschen.<\/p>\n<p>API-Geraffel wollen Sie aber wohl nicht und laden deshalb im zweiten Schritt die OPOS-Treiber zum Ger&auml;t herunter. Im Falle unseres Metrologic-Scanners nennt sich die Software etwa MetrOPOS Driver. Die enth&auml;lt h&auml;ufig nicht allein den OPOS-Treiber, der lediglich aus einer einzelnen kleinen DLL besteht, sondern auch noch Konfigurationsanwendungen.<\/p>\n<p>Der OPOS-Treiber hat eine bestimmte Aufgabe. Er kennt das Ger&auml;t und dessen Treiber ganz genau und kann mit ihm in allen Belangen kommunizieren. Nur der Hersteller des Ger&auml;ts kann deshalb diesen OPOS-Treiber entwickeln. Die Kommunikation verl&auml;uft in beiden Richtungen: OPOS kann vom Ger&auml;t lesen und Anweisungen zu ihm senden.<\/p>\n<p>Der Witz an der Geschichte ist, dass der OPOS-Treiber eine standardisierte ActiveX-Schnittstelle anbietet, die einen definierten Satz von Methoden und Eigenschaften beherbergt. Nach au&szlig;en sieht ein OPOS-Treiber also immer gleich aus. Tats&auml;chlich k&ouml;nnte man diese Schnittstelle verwenden &#8211; in unserem Beispiel w&auml;re ein Verweis auf die <b>MetroSO 1.0 Type Library <\/b>der <b>metroSO.dll <\/b>zu setzen -, um vom Scanner zu lesen. Allerdings noch ohne Unterst&uuml;tzung durch Events.<\/p>\n<p>Auch sonst w&auml;re noch ziemlich aufwendige Programmierung n&ouml;tig, um mit dem OPOS-Treiber direkt zu sprechen. <\/p>\n<p><b>Unabh&auml;ngigkeit<\/b><\/p>\n<p>Das gr&ouml;&szlig;te Manko bei direkter Ansprache des OPOS-Treibers ist jedoch, dass man damit dem Scanner-Hersteller ausgeliefert ist. Schlie&szlig;lich ist ein Verweis auf die herstellerspezifische DLL zu setzen.<\/p>\n<p>Wollte man den Barcode-Scanner am Kassensystem aber durch ein anderes Modell ersetzen, so m&uuml;sste man die Anwendung komplett neu erstellen und einen Verweis auf den neuen OPOS-Treiber setzen. <\/p>\n<p><!--30percent--><\/p>\n<p>Damit man hier unabh&auml;ngig bleibt, wurde f&uuml;r OPOS eine weitere Ebene eingezogen, die die Abstraktion erh&ouml;ht. In Bild 1 ist das die Ebene der ger&auml;teunabh&auml;ngigen OPOS-ActiveX-Komponenten.<\/p>\n<p>Die ActiveX-Komponente kennt den Satz von standardisierten Methoden und Eigenschaften eines OPOS-Treibers. &Uuml;ber diesen Methodensatz spricht sie ihn an. Der Clou daran aber ist, dass die Komponente den Treiber selbst gar nicht kennen muss. Sie erf&auml;hrt alles N&ouml;tige dazu aus der Windows-Registry, nachdem man ihr lediglich den Namen eines sogenannten Service Objects angegeben hat. Dort steht dann, welche Treiber-DLL anzusprechen ist, um die Kommunikation herzustellen. <\/p>\n<p>Nat&uuml;rlich m&uuml;ssen zuvor diese Registry-Eintr&auml;ge gesetzt worden sein. Das erledigt man entweder manuell oder sinnvoller &uuml;ber eine Anwendung, die daf&uuml;r bestimmt ist. In unserem Fall kommt diese Anwendung gleich mit dem Metrologic-OPOS-Treiberpaket, das bereits heruntergeladen und installiert wurde.<\/p>\n<p><b>OPOS-Konfiguration<\/b><\/p>\n<p>In Bild 2 sehen Sie einen Ausschnitt der Konfigurationssoftware <b>MetrOPOS<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/configurator_opt.jpeg\" alt=\"configurator.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: OPOS-Konfiguration eines Metrologic-Barcodescanners<\/span><\/b><\/p>\n<p>Die Sache ist denkbar einfach: Sie geben nur an, &uuml;ber welche Hardware-Schnittstelle der Scanner angeschlossen ist (USB), um welches Modell es sich handelt (Voyager 9520) und vor allem einen benutzerdefinierten Namen (metroscanner), &uuml;ber den der Scanner sp&auml;ter angesprochen werden soll. Nach &Uuml;bernehmen der Einstellungen schreibt das Tool alle ben&ouml;tigten Daten in die vorgesehenen Stellen der Registry.<\/p>\n<p>Sie k&ouml;nnen auch mehrere Profile anlegen, falls Sie mehrere Scanner am System betreiben. Wichtig sind dabei jeweils die eindeutigen Namen zur Kennzeichnung der Scanner.<\/p>\n<p>Besonders komfortabel ist es allerdings nicht, wenn Sie auf dem Zielsystem, etwa dem Kassensystem, immer erst die Konfigurationssoftware installieren m&uuml;ssen, um den Scanner einzurichten. Das ist aber auch nicht unbedingt erforderlich, wenn Sie wissen, welche Eintr&auml;ge in die Registry geschrieben werden m&uuml;ssen. Dann reicht schon die Weitergabe und ActiveX-Registrierung des OPOS-Treibers aus &#8211; hier: <b>metroSO.dll <\/b>&#8211; und eine <b>.reg<\/b>-Datei, die den passenden Zweig der Registrierungsdatenbank enth&auml;lt. Dieser Zweig ist ebenfalls standardisiert und findet sich immer unter:<\/p>\n<pre>HKEY_LOCAL_MACHINE\\SOFTWARE\\OLEforRetail\\ServiceOPOS\\Scanner<\/pre>\n<p>F&uuml;r jede Ger&auml;teart gibt es hier einen eigenen Zweig &#8211; Scanner, Scale, Printer et cetera.<\/p>\n<p>Unterhalb dieser Schl&uuml;ssel befinden sich die benutzerdefinierten Einstellungswerte unter dem Namen, den Sie f&uuml;r das Ger&auml;t vergeben m&ouml;chten.<\/p>\n<p>Der Baum f&uuml;r den in Bild 2 konfigurierten Scanner stellt sich unter Vista etwa wie in Bild 3 dar.<\/p>\n<p>Der Schl&uuml;ssel <b>metroscanner <\/b>enth&auml;lt die Werte aus Bild 4.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/regsettings_opt.jpeg\" alt=\"regsettings.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Registry-Baum f&uuml;r eine OPOS-Scanner-Konfiguration (Vista)<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/regtree_opt.jpeg\" alt=\"regtree.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Einstellungen f&uuml;r den OPOS-Scanner in der Registry<\/span><\/b><\/p>\n<p>F&uuml;r eine Weitergabe brauchen Sie nun lediglich den Zweig <b>metroscanner <\/b>aus der Registry in eine <b>.reg<\/b>-Datei zu exportieren und auf dem Zielrechner wieder zu importieren, ohne eine Konfigurationssoftware zu installieren. Bedenken Sie jedoch, dass der OPOS-Treiber nur dann funktionieren kann, wenn bereits ein serieller Treiber f&uuml;r das Ger&auml;t installiert wurde.<\/p>\n<p>&Uuml;brigens enth&auml;lt der Schl&uuml;ssel mehr Werte als unbedingt n&ouml;tig. Wichtig sind meist nur zwei: Die <b>ProgID <\/b>des OPOS-Treibers (<b>Metrologic.Opos.Scanner<\/b>) und der Name der Treiberdatei (<b>MetroSO.dll<\/b>). <\/p>\n<p><b>OPOS-Controls<\/b><\/p>\n<p>Damit w&auml;ren wir endlich auf der untersten Ebene des OPOS-Modells (siehe Bild 1) angekommen, der OPOS-ActiveX-Komponente, die sich in Gestalt eines <b>OPOS-Scanner<\/b>-Steuerelements manifestiert.<\/p>\n<p>Diese Komponenten auf Grundlage des ARTS-Standards kann eigentlich jedermann entwickeln, der sich dazu bem&uuml;&szlig;igt f&uuml;hlt.<\/p>\n<p>Es ist aber eine weitere Eigent&uuml;mlichkeit von OPOS und Beweis f&uuml;r dessen Nischendasein, dass diese Komponenten fast ausschlie&szlig;lich aus der Feder von Curtis Monroe [2] stammen.<\/p>\n<p>Seine freien Komponenten sind quasi Referenz und werden selbst von so namhaften Herstellern wie Metrologic verwendet. Folgerichtig sind sie auch bereits im OPOS-Treiberpaket <b>MetrOPOS <\/b>enthalten. <\/p>\n<p>Sollte Ihr Hersteller keine OPOS-Steuerelemente anbieten oder beipacken, dann laden Sie einfach <b>Monroes Komponenten <\/b>unter [3] herunter.<\/p>\n<p>Der Download enth&auml;lt alle Komponenten f&uuml;r jede Ger&auml;teklasse. Sie brauchen daraus zum Barcode-Scannen nur die Dateien <b>oposscanner.ocx <\/b>und <b>opos_constants.dll<\/b>.<\/p>\n<p>Ich empfehle Ihnen in jedem Fall den Einsatz der Monroe-Komponenten, auch wenn Ihr Scanner-Hersteller eigene ActiveX-Controls anbieten sollte. Diese sind n&auml;mlich h&auml;ufig nicht so stabil oder sie lassen hinreichende OLE-Kompatibilit&auml;t mit Access-Formularen vermissen.<\/p>\n<p>Alles, was man schlussendlich braucht, ist das <b>OPOS Scanner Control 1.8 <\/b>(Versionsnummer kann abweichen), welches man in ein Formular einf&uuml;gt. Dort zeigt es sich im Entwurf als etwas krakeliges Icon (siehe Bild 5).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/oposscan_ctl_opt.jpeg\" alt=\"oposscan_ctl.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Das Icon des OPOS Scanner Controls <\/span><\/b><\/p>\n<p>Das Steuerelement kann nun mit wenigen Code-Anweisungen auf das <b>Service<\/b>-Objekt des Scanners eingestellt werden und feuert dann bei jedem Scan das Ereignis <b>DataEvent<\/b>.<\/p>\n<p>Man kann sich mit Recht die Frage stellen, wof&uuml;r man denn ein Steuerelement in einem Formular braucht, wenn dieses zur Laufzeit gar nicht sichtbar ist Tats&auml;chlich kann eine Instanz des <b>OPOS-Scanner<\/b>-Objekts genauso gut als Objektvariable mit <b>WithEvents <\/b>deklariert angelegt und auf das Control verzichtet werden.<\/p>\n<p>In der Beispieldatenbank zum Artikel wurde eben diese Methode gew&auml;hlt. Bevor wir uns den Einzelheiten zur Programmierung zuwenden, folgt noch eine Zusammenfassung &uuml;ber die Schritte, die bisher er&ouml;rtert wurden.<\/p>\n<p><b>Zusammengefasst<\/b><\/p>\n<p>Hier in Kurzform das Vorgehen, um Ihren Barcode-Scanner unter Access OPOS-funktionst&uuml;chtig zu machen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie installieren einen USB-Treiber f&uuml;r Ihr Ger&auml;t. Sie schlie&szlig;en erst jetzt den Scanner an und folgen den Anweisungen zur Treibereinrichtung.<\/li>\n<li class=\"aufz-hlung\">Sie installieren das OPOS-Treiberpaket des Herstellers und, falls nicht bereits enthalten, die OPOS-Konfigurationssoftware.<\/li>\n<li class=\"aufz-hlung\">Sie konfigurieren mit der entsprechenden Anwendung ein Scanner-Service-Profil und geben ihm einen Namen.<\/li>\n<li class=\"aufz-hlung\">Sie besorgen sich die aktuellen OPOS-Controls von Monroe [3] und registrieren wenigstens die Dateien <b>oposscanner.ocx <\/b>und <b>opos_constants.dll<\/b>.<\/li>\n<li class=\"aufz-hlung\">Sie f&uuml;gen entweder ein OPOS-Scanner-Steuerelement in ein Formular ein oder instanzieren eine Objektvariable des Typs <b>OPOSScanner <\/b>im Formular oder einem Klassenmodul.<\/li>\n<li class=\"aufz-hlung\">Sie schreiben einige Zeilen Code zur Initialisierung des <b>Service<\/b>-Objekts.<\/li>\n<\/ul>\n<p><b>Beispieldatenbank<\/b><\/p>\n<p>Die Beispieldatenbank zu diesem Beitrag hei&szlig;t <b>scanner.mdb<\/b>. Nach ihrem Start &ouml;ffnet sich ein Formular namens <b>frmScantest<\/b>, das f&uuml;r die einfache Speicherung von Scan-Ereignissen ausgelegt ist (siehe Bild 6).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/testformular_opt.jpeg\" alt=\"testformular.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Barcode-Scanner-Formular der Beispieldatenbank<\/span><\/b><\/p>\n<p>Aus dem Kombinationsfeld oben kann ein zuvor im System konfigurierter Barcode-Scanner ausgew&auml;hlt werden. Die Anwendung sucht dazu selbst in der Registry nach verf&uuml;gbaren Scanner-Profilen. Nach Auswahl des Scanners kann er &uuml;ber das entsprechende Kontrollk&auml;stchen aktiviert werden. Gelingt das, so erscheint der Schriftzug <b>Bereit zum Scannen <\/b>und andernfalls eine Fehlermeldung. Sobald Sie dann einen Barcode einscannen, wird ein neuer Datensatz angelegt und der Code sowie dessen Typ in zwei Textfelder eingetragen. Zur Kontrolle zeigt ein ActiveX-Steuerelement den Strichcode an.<\/p>\n<p>Die dem Formular zugrunde liegende Tabelle hat einen einfachen Aufbau (siehe Bild 7).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/scantabelle_opt.jpeg\" alt=\"scantabelle.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Tabelle, in der die Scan-Ereignisse gespeichert werden<\/span><\/b><\/p>\n<p>Die Datenbank wird nur dann laufen, wenn zuvor die ben&ouml;tigten ActiveX-Komponenten registriert wurden. Diese befinden sich im Unterverzeichnis <b>\\Komponenten <\/b>auf der Begleit-CD. F&uuml;hren Sie dort die Batch-Datei <b>register_ocx.bat <\/b>aus.<\/p>\n<p>Unter Vista muss sie als Administrator gestartet werden, nachdem ihr Inhalt in einem Texteditor angepasst wurde &#8211; siehe die entsprechende Anmerkung in der Datenbankdatei.<\/p>\n<p>Neben den OPOS-Dateien ist mit der <b>gdsbarcode.ocx <\/b>ein freies Steuerelement enthalten, das zum Anzeigen von Barcodes der Typen <b>EAN8<\/b>, <b>EAN13<\/b>, <b>Code39 <\/b>und <b>Code128 <\/b>geeignet ist. Diese Komponente k&ouml;nnen Sie sich alternativ unter [4] besorgen. Sie funktioniert auch in Berichten, wie <b>rptScans <\/b>in der Demodatenbank zeigt.<\/p>\n<p><b>Service-Objekt initialisieren<\/b><\/p>\n<p>Im Formular <b>frmScantest <\/b>werden Sie weder ein <b>OPOS-Scanner<\/b>-Steuerelement vorfinden noch eine Objektvariable, die auf die gleichnamige Klasse verwiese. Im Interesse der Wiederverwendbarkeit wurde der komplette Code zur Steuerung des <b>Service<\/b>-Objekts in ein Klassenmodul <b>clsScanner <\/b>ausgelagert.<\/p>\n<p>Dort ist als zentrales Objekt eine Objektvariable <b>CScan <\/b>definiert:<\/p>\n<pre>Private WithEvents CScan As OPOSScanner\r\nPrivate Sub Class_Initialize()\r\n    Set CScan = New OPOSScanner\r\n    End Sub<\/pre>\n<p>Durch die Deklaration <b>WithEvents <\/b>kann das Objekt <b>CScan <\/b>Ereignisse ausl&ouml;sen, von denen uns nur das <b>DataEvent <\/b>interessiert, das bei einem Scan-Vorgang hervorgerufen wird.<\/p>\n<p>Damit das <b>OPOSScanner<\/b>-Objekt wei&szlig;, welchen Scanner es ansprechen soll, wird der Klasse &uuml;ber die Eigenschaft <b>SOName <\/b>der Profilname mitgeteilt:<\/p>\n<pre>Property Let SOName(strName As String)\r\nDim ret As Long\r\nret = CScan.Open(strName)\r\nIf ret = OPOS_SUCCESS Then\r\n m_Name = strName\r\n    CScan.Close\r\nElse\r\n Err.Raise vbObjectError + 800, _\r\n    \"clsScanner\", GetOPOSError(ret)\r\nEnd If\r\nEnd Property<\/pre>\n<p>Der Profilname wird nur dann in der privaten Variablen <b>m_Name <\/b>zwischengespeichert, wenn das &Ouml;ffnen des <b>Service<\/b>-Objekts &uuml;ber dessen <b>Open<\/b>-Methode klappt (<b>OPOS_SUCCESS<\/b>). Andernfalls erscheint eine Fehlermeldung, die &uuml;ber die vom <b>OPOSScanner <\/b>zur&uuml;ckgegebene Fehlernummer und die Hilfsprozedur <b>GetOPOSError <\/b>der Klasse ermittelt wird.<\/p>\n<p>Die <b>Open<\/b>-Methode ist &uuml;brigens allen OPOS-Komponenten gemein, also auch Komponenten f&uuml;r Bondrucker (<b>OPOSPOSPrinter.ocx<\/b>), Kassenladen (<b>OPOSCashDrawer.ocx<\/b>), Kassendisplays (<b>OPOSLineDisplay.ocx<\/b>) und so weiter.<\/p>\n<p>Sie hat intern die Aufgabe, in der Registry nach den Angaben zum Profilnamen zu suchen, dort den OPOS-Treiber zu ermitteln, Einstellungen zu &uuml;berpr&uuml;fen und schlie&szlig;lich die Kommunikation mit dem Service-Objekt einzuleiten.<\/p>\n<p>Ebenfalls allen Komponenten gemein ist die <b>Claim<\/b>-Methode, die in der Prozedur <b>OpenScanner <\/b>der Klasse zu finden ist, und hier ausschnittsweise wiedergegeben wird:<\/p>\n<pre>ret = CScan.ClaimDevice(m_Timeout)\r\nIf ret &lt;&gt; OPOS_SUCCESS Then\r\n    Err.Raise vbObjectError + 800, _\r\n    \"clsScanner\", GetOPOSError(ret)\r\n    Exit Function\r\nEnd If<\/pre>\n<p><b>Claim <\/b>bedeutet, dass das <b>Service<\/b>-Objekt versucht, den Treiber des Ger&auml;ts in den Zugriff zu bekommen. Die <b>Open<\/b>-Methode stellt ja nur sicher, dass die Konfiguration okay ist und alle Treiber vorhanden sind, wei&szlig; aber noch nichts vom Status des seriellen Treibers.<\/p>\n<p>Der Treiber kann bereits besetzt sein, wie weiter unten im Abschnitt <b>Entweder oder <\/b>erl&auml;utert wird. Deshalb wird der <b>Claim<\/b>-Methode auch ein Wert f&uuml;r das <b>Timeout <\/b>(in Millisekunden) als Parameter &uuml;bergeben.<\/p>\n<p>Sie gibt erst dann einen Fehlercode zur&uuml;ck, wenn dieses Timeout &uuml;berschritten wurde, das Ger&auml;t oder dessen Treiber also nicht innerhalb der geforderten Zeitspanne antwortet.<\/p>\n<p>War die <b>Claim<\/b>-Methode erfolgreich, dann ist der OPOS-Scanner zwar betriebsbereit, jedoch immer noch nicht aktiv. Dazu muss erst eine Eigenschaft gesetzt werden:<\/p>\n<pre>CScan.DeviceEnabled = True\r\nCScan.DataEventEnabled = True\r\nCScan.DecodeData = True<\/pre>\n<p><b>DataEventEnabled <\/b>sagt dem Objekt zus&auml;tzlich, dass es Ereignisse feuern soll, und <b>DecodeData <\/b>weist an, dass die Barcode-Daten intern dechiffriert werden sollen.<\/p>\n<p>Diese beiden Eigenschaften sind im Gegensatz zu <b>DeviceEnabled <\/b>nur beim <b>OPOSScanner<\/b>-Objekt verf&uuml;gbar, nicht generell bei anderen OPOS-Controls.<\/p>\n<p>Nach dem Durchlauf dieser Codezeilen ist der <b>OPOSScanner <\/b>fertig initialisiert und man kann mit dem Scannen loslegen.<\/p>\n<p><b>Scans auswerten<\/b><\/p>\n<p>Ein Scan ruft nun das <b>DataEvent<\/b>-Ereignis des <b>OPOSScanner<\/b>-Objekts <b>CScan <\/b>hervor:<\/p>\n<pre>Private Sub CScan_DataEvent(ByVal Status As Long)\r\n    RaiseEvent Scan(BCType(CScan.ScanDataType), _\r\n    CScan.ScanData)\r\n    CScan.DataEventEnabled = True\r\n    End Sub<\/pre>\n<p>Leider werden der Ereignisprozedur vom Objekt keine Parameter &uuml;bergeben, die etwa schon die Strichcodedaten enthielten. Die muss man erst &uuml;ber die Eigenschaften <b>ScanDataType <\/b>und <b>ScanData <\/b>auslesen. <b>ScanData <\/b>enth&auml;lt dabei einen String, der den fertig entschl&uuml;sselten Barcode zur&uuml;ckgibt, falls <b>DecodeData <\/b>aktiviert wurde, und <b>ScanDataType <\/b>ist ein <b>Long<\/b>-Wert, den die Hilfsfunktion <b>BCType <\/b>der Klasse in einen aussagekr&auml;ftigen String umwandelt, also etwa <b>EAN13<\/b> oder <b>Code39<\/b>.<\/p>\n<p>Die Ereignisprozedur l&ouml;st ihrerseits das im Modulkopf definierte Event <b>Scan <\/b>der Klasse aus:<\/p>\n<pre>Public Event Scan(ByVal BarcodeType As String, _\r\nByVal Data As String)<\/pre>\n<p>Und dieses Ereignis schlie&szlig;lich ist es, auf welches das Formular reagiert:<\/p>\n<pre>Private WithEvents CScan As clsScanner\r\nPrivate Sub CScan_Scan(ByVal BarcodeType As _\r\n    String, ByVal Data As String)\r\n    DoCmd.GoToRecord acDataForm, Me.Name, _\r\n    acNewRec\r\n    Me!txtScan.Value = Data\r\n    Me!txtType.Value = BarcodeType\r\n    End Sub<\/pre>\n<p>Hier wird nach dem Scan ein neuer Datensatz angesprungen und in die Textfelder <b>Barcodetyp <\/b>und <b>Barcodedatum <\/b>eingetragen. Sie sehen: Gerade mal drei Zeilen Code sind daf&uuml;r n&ouml;tig. Vergegenw&auml;rtigen Sie sich, um wie viel komplizierter die Angelegenheit ausfiele, wenn ein Scanner im Tastaturmodus zum Einsatz k&auml;me!<\/p>\n<p>Ein Vorteil des OPOS-Scanners tritt hier au&szlig;erdem zutage: Da auch der Typ des Barcodes ermittelt wird, kann die Datenbank entscheiden, wof&uuml;r er verwendet werden soll. Kommt etwa ein EAN-Code hereinspaziert, so handelt es sich m&ouml;glicherweise um einen Artikel, zu dem der Preis ermittelt werden soll. Ist es ein Code128, der alphanumerische Zeichen unterst&uuml;tzt, dann wurde vielleicht eine Mitgliedskarte eingescannt und die Datenbank kann nun in der Kundentabelle nachsehen, ob der Kunde rabattierf&auml;hig ist.<\/p>\n<p><b>Verf&uuml;gbare Scanner<\/b><\/p>\n<p>Die Klasse <b>clsScanner <\/b>enth&auml;lt als Bonbon noch eine Funktion, &uuml;ber die alle im System registrierten Scanner-Service-Profile ausgelesen werden k&ouml;nnen. <b>GetAvailableSOScanners <\/b>gibt einen semikolonseparierten String mit der Liste aller ermittelten Scanner-Profile zur&uuml;ck, der direkt als Datenquelle f&uuml;r ein Kombinationsfeld oder ein Listenfeld verwendet werden kann. Das Formular <b>frmScantest <\/b>macht davon f&uuml;r seine Auswahl-Combo Gebrauch.<\/p>\n<p>Die Routine liest dazu &uuml;ber API-Funktionen den Registry-Zweig aus Bild 3 aus und enumeriert die vorhandenen Service-Namen. <\/p>\n<p><b>Entweder oder<\/b><\/p>\n<p>Vielleicht haben Sie zus&auml;tzlich eine Hilfsanwendung wie eine <b>SoftwareWedge <\/b>installiert, die die Emulation von Tastaturanschl&auml;gen f&uuml;r serielle Scanner erm&ouml;glicht, damit Sie wahlweise auch in andere Anwendungen, etwa Excel, einscannen k&ouml;nnen.<\/p>\n<p>Dann sollten Sie sich eines klarmachen: Auf den seriellen Treiber kann nicht von mehreren Anwendungen gleichzeitig zugegriffen werden. Ist die SoftwareWedge aktiv, dann beansprucht sie den Treiber allein f&uuml;r sich und das <b>Service<\/b>-Objekt wird eine Fehlermeldung von sich geben, sobald Sie das &Ouml;ffnen per <b>Open<\/b>-Methode veranlassen. Umgekehrt kann die SoftwareWedge nicht arbeiten, sobald ein <b>Service<\/b>-Objekt den Scanner per <b>Open <\/b>und <b>Claim <\/b>aktiviert hat.<\/p>\n<p>Selbstverst&auml;ndlich gilt der gleiche Sachverhalt auch, wenn zweimal auf dasselbe <b>Service<\/b>-Objekt zugegriffen wird.<\/p>\n<p>Sie k&ouml;nnen das &uuml;berpr&uuml;fen: &Ouml;ffnen Sie die Beispieldatenbank in zweiter Instanz und versuchen Sie, den gleichen Scanner zu aktivieren. In der zweiten Instanz wird die Meldung erscheinen, dass das Ger&auml;t nicht vorhanden sei. Der Scanner-Treiber ist f&uuml;r das zweite <b>Service<\/b>-Objekt quasi unsichtbar, da bereits besetzt.<\/p>\n<p><b>Epilog<\/b><\/p>\n<p>OPOS ist ein Satz von ActiveX-Komponenten, der den Umgang mit POS-Hardware erheblich erleichtern kann und flexibilisiert. Es schafft Unabh&auml;ngigkeit Ihrer Anwendung von den eingesetzten Ger&auml;ten. Ihre Anwendung braucht lediglich den Namen eines konfigurierten OPOS-Profils, um mit der Hardware arbeiten zu k&ouml;nnen. <\/p>\n<p>Dieser Beitrag vermittelt das grundlegende R&uuml;stzeug, um Datenbanken den Umgang mit Barcode-Scannern beizubringen. Die Vorgehensweise ist aber f&uuml;r alle OPOS-unterst&uuml;tzten Ger&auml;te dieselbe, sodass Sie sie leicht auch auf andere Ger&auml;tegattungen &uuml;bertragen k&ouml;nnen. Manche, wie etwa Bon- und Etikettendrucker, verlangen allerdings aufgrund der Vielzahl von zus&auml;tzlichen Eigenschaften und Methoden eingehendere Auseinandersetzung. Deshalb folgt in einer der n&auml;chsten Ausgaben ein Beitrag, der die Steuerung von Druckern &uuml;ber OPOS demonstriert.<\/p>\n<p>Und damit Sie solange was zum Einscannen haben, finden Sie in Bild 8 ein passendes Testobjekt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_05\/Barcodescanner-web-images\/testscan_opt.jpeg\" alt=\"testscan.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Beispiel-Barcode <\/span><\/b><\/p>\n<p><b>Links<\/b><\/p>\n<p class=\"quellen\">[1] OPOS\/UPOS Standardisierung bei ARTS: http:\/\/www.nrf-arts.org\/UnifiedPOS\/default.htm<\/p>\n<p class=\"quellen\">[2] MCS Monroe Consulting (Curtis Monroe): http:\/\/monroecs.com\/opos.htm<\/p>\n<p class=\"quellen\">[3] Freie OPOS Komponenten: http:\/\/monroecs.com\/oposccos_current.htm<\/p>\n<p class=\"quellen\">[4] GDS Barcode-Steuerelement: http:\/\/freewareapp.com\/gds-barcode-ocx_download<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>scanner.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{AAFAC187-FB53-4189-B37F-454C2CD1A3E0}\/aiu_687.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ob Sie nun ein WaWi (Warenwirtschaftssystem) entwickeln, eine Inventurdatenbank oder eine Zugangskontrolle &#8211; fast immer treffen Sie auf Barcodes, die zur Identifikation eines Objekts dienen. Das Erstellen solcher Barcodes ist die einfachere, das Lesen die schwierigere Sache. Wir zeigen, wie Sie sich die Entwicklung mithilfe von OPOS &#8211; nicht Opus! &#8211; erleichtern k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662009,66052009,44000026],"tags":[],"class_list":["post-55000687","post","type-post","status-publish","format-standard","hentry","category-662009","category-66052009","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>OPOS - Barcodes scannen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OPOS - Barcodes scannen\" \/>\n<meta property=\"og:description\" content=\"Ob Sie nun ein WaWi (Warenwirtschaftssystem) entwickeln, eine Inventurdatenbank oder eine Zugangskontrolle - fast immer treffen Sie auf Barcodes, die zur Identifikation eines Objekts dienen. Das Erstellen solcher Barcodes ist die einfachere, das Lesen die schwierigere Sache. Wir zeigen, wie Sie sich die Entwicklung mithilfe von OPOS - nicht Opus! - erleichtern k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:18:02+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"OPOS &#8211; Barcodes scannen\",\"datePublished\":\"2020-05-22T22:18:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/\"},\"wordCount\":3944,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4097ffcd26d44d8d82b5d06091c845e4\",\"articleSection\":[\"2009\",\"5\\\/2009\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/\",\"name\":\"OPOS - Barcodes scannen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4097ffcd26d44d8d82b5d06091c845e4\",\"datePublished\":\"2020-05-22T22:18:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4097ffcd26d44d8d82b5d06091c845e4\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/4097ffcd26d44d8d82b5d06091c845e4\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OPOS__Barcodes_scannen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OPOS &#8211; Barcodes scannen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"OPOS - Barcodes scannen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/","og_locale":"de_DE","og_type":"article","og_title":"OPOS - Barcodes scannen","og_description":"Ob Sie nun ein WaWi (Warenwirtschaftssystem) entwickeln, eine Inventurdatenbank oder eine Zugangskontrolle - fast immer treffen Sie auf Barcodes, die zur Identifikation eines Objekts dienen. Das Erstellen solcher Barcodes ist die einfachere, das Lesen die schwierigere Sache. Wir zeigen, wie Sie sich die Entwicklung mithilfe von OPOS - nicht Opus! - erleichtern k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:18:02+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"OPOS &#8211; Barcodes scannen","datePublished":"2020-05-22T22:18:02+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/"},"wordCount":3944,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4","articleSection":["2009","5\/2009","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/","url":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/","name":"OPOS - Barcodes scannen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4","datePublished":"2020-05-22T22:18:02+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/4097ffcd26d44d8d82b5d06091c845e4"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/OPOS__Barcodes_scannen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"OPOS &#8211; Barcodes scannen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000687"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000687\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}