{"id":9871,"date":"2023-06-06T09:38:23","date_gmt":"2023-06-06T07:38:23","guid":{"rendered":"https:\/\/archivista.ch\/cms\/?page_id=9871"},"modified":"2024-02-22T17:32:52","modified_gmt":"2024-02-22T16:32:52","slug":"2023-vi-mit-virtuellen-barcodes","status":"publish","type":"page","link":"https:\/\/archivista.ch\/cms\/de\/aktuell-blog\/blogs-2023\/2023-vi-mit-virtuellen-barcodes\/","title":{"rendered":"2023\/VI mit virtuellen Barcodes"},"content":{"rendered":"<h1>Automatisierung einfach gemacht<\/h1>\n<p><em><strong>Egg, 6. Juni 2023:<\/strong> Anl\u00e4sslich eines Kundengespr\u00e4ches wurde die Frage er\u00f6rtert, wie die zunehmend digital eingehenden Bestellungen automatisiert mit einem (virtuellen) Barcode best\u00fcckt werden k\u00f6nnen. Damit er\u00fcbrigt sich z.B. das Ausdrucken der Bestellungen und das manuelle Anbringen eines Barcode-Klebers. Vielmehr wird ein virtueller Barcode auf der ersten Seite oben rechts angebracht.<\/em><\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9887\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1.jpg\" alt=\"\" width=\"1920\" height=\"1069\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1-300x167.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1-1024x570.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1-768x428.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1-600x334.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1-1536x855.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/10\/mare1-624x347.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Die Vorgeschichte: Drucken, Kleben, Scannen&#8230;<\/h2>\n<p>Vor mehr als einem Jahrzehnt war es nicht un\u00fcblich, dass Bestellungen per Post eintrafen. Die eingehenden Belege wurden mit einem Barcode best\u00fcckt und anschliessend gescannt. Der erfasste Code auf den Belegen wurde in der ERP-Software mittels Lesepistole an diese \u00fcbermittelt. Ab diesem Zeitpunkt konnte die Beschlagwortung automatisch erfolgen.<\/p>\n<p>\u00dcber die Jahre verlagerten sich die Eing\u00e4nge vom Papier hin zur digitalen Welt. Der gr\u00f6sste Teil des Bestelleinganges erfolgt aktuell per Mail bzw. mit entsprechend angeh\u00e4ngten PDF-Dateien. Dies f\u00fchrte dazu, dass immer mehr PDF-Dateien ausgedruckt wurden, nur um diese mit einem Barcode-Kleber best\u00fccken zu k\u00f6nnen und diese dem Scanner zuzuf\u00fchren.<\/p>\n<h2>Automatisierung mit virtuellen Barcodes<\/h2>\n<p>Diesen manuellen Vorgang galt es m\u00f6glichst zu optimieren. In einem ca. einst\u00fcndigen Gespr\u00e4ch wurden zusammen mit dem Kunden die Optionen besprochen. Dabei kristallisierten sich zwei L\u00f6sungswege heraus: Erstens, bei jedem eingehenden Dokument wird eine Haftnotiz mit einem Barcode angebracht oder zweitens, der gew\u00fcnschte Barcode wird oberhalb der ersten Seite &#8222;reingepixelt&#8220;.<\/p>\n<p>Die erste Variante h\u00e4tte den Vorteil gehabt, dass die Belege nicht &#8222;angefasst&#8220; h\u00e4tten werden m\u00fcssen. Jedoch, um Haftnotizen mit Barcodes erstellen zu k\u00f6nnen, h\u00e4tte auf s\u00e4mtlichen Clients der entsprechende Barcode-Zeichensatz (Code39) zur Verf\u00fcgung gestellt werden m\u00fcssen. Der Webserver h\u00e4tte zusammen mit der Webseite einfach auch den entsprechenden Zeichensatz ausgeliefert. Jedoch, die Haftnotiz muss ja irgendwo auf dem Beleg platziert werden und k\u00f6nnte unter Umst\u00e4nden einen Bereich &#8222;\u00fcberdecken&#8220;, der zentrale Informationen enth\u00e4lt.<\/p>\n<p>Bei der zweiten Variante wird der Barcode oberhalb der ersten Seite angebracht. Dadurch erh\u00e4lt die erste Seite einer Akte ca. 200 Pixel mehr in der H\u00f6he. Damit aber ist sichergestellt, dass der Barcode-Kleber zu keiner Zeit einen anderen Inhalt auf den Belegen \u00fcberdeckt. Zusammen mit dem Kunden wurde die zweite Variante gew\u00e4hlt.<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9875\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9.jpg\" alt=\"\" width=\"1920\" height=\"919\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9-300x144.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9-1024x490.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9-768x368.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9-600x287.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9-1536x735.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare9-624x299.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Implementierung mit Skript<\/h2>\n<p>Nachfolgend wird die f\u00fcr den Kunden realisierte L\u00f6sung pr\u00e4sentiert:<\/p>\n<pre><strong>#!\/usr\/bin\/perl\r\nuse lib qw(\/home\/cvs\/archivista\/jobs);\r\nuse AVJobs;\r\nuse GD::Barcode::Code39;\r\nmy $start = 5000000;\r\nmy $field = \"Titel\";\r\nmy ($host,$db,$user,$pw,$doc) = @ARGV;\r\nmy $dbh = MySQLOpen($host,$db,$user,$pw);\r\nif (HostIsSlave($dbh)==0) {\r\n  my $sql = \"use $db\";\r\n  $dbh-&gt;do($sql);\r\n  $sql = \"select Laufnummer,Seiten,Archiviert,ArchivArt from archiv \".\r\n    \"where Laufnummer=$doc &amp;&amp; ($field is null or $field='' or $field=0)\";\r\n  my ($lnr,$seiten,$arch,$art) = $dbh-&gt;selectrow_array($sql);\r\n  my $ext = \"png\";\r\n  $ext = \"jpg\" if $art==3;\r\n  $ext = \"tif\" if $art==1;\r\n  if ($lnr==$doc &amp;&amp; $seiten&gt;0 &amp;&amp; $arch==0) {\r\n    my $bc = getUnique($dbh,$start);\r\n    if ($bc&gt;=$start) {\r\n      my $seite = ($doc*1000)+1;\r\n      $sql = \"select BildInput from archivbilder where Seite=$seite\";\r\n      my ($pimg) = $dbh-&gt;selectrow_array($sql);\r\n      my $fin = \"\/tmp\/$db-$lnr-1.$ext\";\r\n      my $fbc1 = \"\/tmp\/$db-$lnr-$bc-1.png\";\r\n      my $fbc2 = \"\/tmp\/$db-$lnr-$bc-2.png\";\r\n      my $fbc3 = \"\/tmp\/$db-$lnr-$bc-3.png\";\r\n      my $ftmp = \"\/tmp\/$db-$lnr-2.$ext\";\r\n      my $fout = \"\/tmp\/$db-$lnr-3.$ext\";\r\n      deleteFiles($fin,$fbc1,$fbc2,$fbc3,$ftmp,$fout);\r\n      writeFile($fin,\\$pimg);\r\n      my $bco=GD::Barcode::Code39-&gt;new('*'.$bc.'*');\r\n      my $img=$bco-&gt;plot();\r\n      writeFile($fbc1,\\$img-&gt;png());\r\n      my $res=system(\"econvert -i $fbc1 --scale 2 -o $fbc2\");\r\n      $res=system(\"convert $fbc2 -bordercolor White -border 50 $fbc3\");\r\n      $res=system(\"convert -append $fbc3 $fin $ftmp\");\r\n      $res=`edentify $fin`;\r\n      $res =~ \/([0-9]+)(x)([0-9]+)(dpi)\/;\r\n      if ($1&gt;0 &amp;&amp; $2 eq \"x\" &amp;&amp; $3&gt;0 &amp;&amp; $4 eq \"dpi\") {\r\n        $res=system(\"econvert -i $ftmp --resolution $1x$3 -o $fout\");\r\n      } else {\r\n        $res=system(\"mv $ftmp $fout\");\r\n      }\r\n      my $cont=\"\";\r\n      readFile2($fout,\\$cont);\r\n      if ($cont ne \"\") {\r\n        $sql = \"update archivbilder set BildInput=\".$dbh-&gt;quote($cont).\r\n          \",Bild='' where Seite=$seite\";\r\n        $dbh-&gt;do($sql);\r\n        deleteFiles($fin,$fbc1,$fbc2,$fbc3,$ftmp,$fout);\r\n        $sql = \"update archiv set $field=\".$dbh-&gt;quote($bc).\" where \".\r\n          \"Laufnummer=$doc\";\r\n        $dbh-&gt;do($sql);\r\n        logit(\"stamp $bc sucessfully to $db and doc $doc added!\");\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nsub deleteFiles {\r\n  my @files = @_;\r\n  foreach my $file (@files) {\r\n    unlink $file if -e $file;\r\n  }\r\n}\r\n\r\nsub getUnique {\r\n  my ($dbh,$start) = @_;\r\n  my $bc=0;\r\n  my $plus=\"Name='BarcodeStamp' and Art='parameter' and Tabelle='parameter'\";\r\n  my $sql0 = \"select Inhalt from parameter where $plus\";\r\n  for (my $c=1;$c&lt;=10;$c++) {\r\n    ($bc) = $dbh-&gt;selectrow_array($sql0);\r\n    if ($bc&gt;0) {\r\n      $bc++;\r\n      my $bc2 = int($bc-(2*$bc));\r\n      my $sql = \"update parameter set Inhalt=\".$dbh-&gt;quote($bc2).\" where \".\r\n        \"$plus and Inhalt&gt;0\";\r\n      $dbh-&gt;do($sql);\r\n      my ($bc3) = $dbh-&gt;selectrow_array($sql0);\r\n      if ($bc3==$bc2) {\r\n        my $sql = \"update parameter set Inhalt=\".$dbh-&gt;quote($bc).\" where \".\r\n          \"$plus and Inhalt&lt;0\";\r\n        $dbh-&gt;do($sql);\r\n\tlast;\r\n      }\r\n    } elsif ($bc==0) {\r\n      my $sql = \"insert parameter set Inhalt=\".$dbh-&gt;quote($start).\",\".\r\n        \"Name='BarcodeStamp',Art='parameter',Tabelle='parameter'\";\r\n      $dbh-&gt;do($sql);\r\n      my ($bc) = $dbh-&gt;selectrow_array($sql0);\r\n      last $bc==$start;\r\n    }\r\n    sleep $c;\r\n  }\r\n  return $bc;\r\n}\r\n<\/strong><\/pre>\n<p>Dieses Skript ist im folgenden Ordner mit dem Namen &#8218;bcadd&#8216; zu platzieren:<\/p>\n<pre><strong>\/home\/data\/archivista\/cust\/autofields<\/strong><\/pre>\n<p>Damit das Skript nach jeder erfassten Seite aufgerufen wird, wird in WebAdmin bei &#8218;Scannen&#8216; eine entsprechende Definition ben\u00f6tigt. Konkret zu unserem Beispiel ist eine Scan-Definition mit dem Namen &#8218;bcadd&#8216; zu erstellen. Weiter wird im Verarbeitungsordner ein entsprechender Ordner ben\u00f6tigt:<\/p>\n<pre><strong>cd \/home\/data\/archivista\/ftp\/office\/dbname<\/strong>\r\n<strong>mkdir bcadd<\/strong>\r\n<strong>chown -R ftp.users bcadd<\/strong><\/pre>\n<p>Damit ist sichergestellt, dass beim Erfassen der Belege \u00fcber den Ordner &#8218;bcadd&#8216; immer passend dazu die Scan-Definition &#8218;bcadd&#8216; verwendet wird. Damit beim Verarbeiten das entsprechende Skript jeweils gestartet wird, ist bei der Scan-Definition bei Vorgabefelder das Skript &#8218;bcadd.pl&#8216; einzutragen. Damit ist der Prozess aktiviert.<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9876\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5-300x169.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5-1024x576.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5-768x432.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5-600x338.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5-1536x864.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2023\/06\/mare5-624x351.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Fazit: Wenig Aufwand f\u00fcr hohe Ersparnis<\/h2>\n<p>Bei ca. 100&#8217;000 Seiten (50&#8217;000 Bestellungen mit durchschnittlich 2 Seiten), die beim Kunden j\u00e4hrlich per Mail eintreffen, kann zun\u00e4chst einmal der Druck dieser Seiten gespart werden. Unter <strong><a href=\"https:\/\/www.druckkosten.de\/kosten.php?f%5Btyp_fs%5D=F&amp;f%5Btyp_fn%5D=D&amp;f%5Btyp_te%5D=SL&amp;f%5B_a%5D=aktuell&amp;f%5B_f%5D=%25&amp;doc=6&amp;set%5Btpages%5D=100000\">druckkosten.de<\/a><\/strong> werden pro Seite irgendwo zwischen 6.3 und 13.8 Cents (f\u00fcr die 50 g\u00fcnstigsten Modelle) angegeben. Im Schnitt ergibt dies ca. 10 Cents (oder Rappen) pro Seite. Die Druckkosten pro Jahr belaufen sich somit auf ca. 10&#8217;000 Euro bzw. Franken.<\/p>\n<p>Dazu kommen die Kosten f\u00fcr die Barcode-Kleber. Ein Blick in diverse Webshops zeigte, dass hier mit minimalen Kosten von ca. 3 Cents\/Rappen pro Etikette zu rechnen ist. Dies ergibt f\u00fcr die Etiketten weitere Kosten von 1500.&#8211; Franken\/Euro.<\/p>\n<p>Der Zeitaufwand, um 100&#8217;000 Seiten zu drucken, l\u00e4sst sich nur sehr grob beziffern. Da die Dokumente jedoch zum gr\u00f6ssten Teil aus wenigen Seiten bestehen, d\u00fcrfte mit ca. 6 Sekunden pro Seite zu rechnen sein. Dies ergibt 600&#8217;000 Sekunden bzw. 166 Arbeitsstunden. F\u00fcr das Anbringen der Kleber (Suchen einer freien Stelle auf dem Beleg inklusive) d\u00fcrfte pro Vorgang ebenfalls mit ca. 6 Sekunden zu rechnen sein. Dies ergibt zus\u00e4tzliche 83 Arbeitsstunden. Dazu kommt die ben\u00f6tigte Zeit f\u00fcr das Scannen. Eine gute Scankraft d\u00fcrfte mit einem anst\u00e4ndigen Dokumentenscanner pro Stunde ca. 2000 Seiten verarbeiten k\u00f6nnen, womit f\u00fcr das Scannen weitere 50 Stunden anfallen.<\/p>\n<p>Demgegen\u00fcber ist der ben\u00f6tigte Aufwand f\u00fcr das Verschieben der PDF-Dateien von den Mails in den Freigabeordner zu kalkulieren. Kleine Nebenbemerkung: Mit dem Mail-Modul liesse sich dieser Prozess komplette automatisieren, doch steht dieser Schritt beim Kunden noch aus. Pro Vorgang d\u00fcrfte wohl in etwa jene Zeit ben\u00f6tigt werden, die f\u00fcr das Anbringen eines Klebers notwendig ist. Folglich betr\u00e4gt die Zeitersparnis 216 Stunden (166 Stunden beim Drucken und 50 Stunden beim Scannen). Bei gesch\u00e4tzten 25 Franken\/Euro (inkl. Fixkosten) ergeben sich 5400.&#8211; Franken\/Euro an Personalkosten (216*25).<\/p>\n<p>Gesamthaft d\u00fcrften die Kosten somit 16&#8217;900 Franken\/Euro pro Jahr betragen, die mit den virtuellen Barcodes so nicht mehr anfallen. Demgegen\u00fcber stehen ca. 10 Stunden f\u00fcr die Entwicklungs- und Implementierungszeit. Dies ergibt bei einer Abwicklung \u00fcber uns bei einem Stundenansatz von 220.&#8211; Franken\/Euro Gesamtkosten von 2200.&#8211; Euro\/Franken. Damit ist im ersten Jahr eine Reduktion der Kosten um 14&#8217;700 Franken\/Euro realisierbar. Hochgerechnet auf 10 J\u00e4hre (1*14700+9*16900) ergibt dies die stolze Summe von 166&#8217;800.&#8211; Franken\/Euro.<\/p>\n<p>Selbstverst\u00e4ndlich kann der Prozess weiter automatisiert werden, indem die Bestellnummer direkt aus dem Beleg herausgelesen und in einem entsprechenden Feld von ArchivistaDMS gespeichert wird. Damit kann die ERP-L\u00f6sung des Kunden den Beleg automatisiert zuweisen und verarbeiten. Jedoch, hier ist der ERP-Anbieter gefragt, da mit dieser Optimierung die ERP-L\u00f6sung angepasst werden muss. Im hier beschriebenen Fall sind keine Anpassungen bei der ERP-Software notwendig und dennoch ergeben sich die entsprechenden Einsparungen. Enjoy!<\/p>\n<p><em><strong>Weiterf\u00fchrender Hinweis:<\/strong> Der Kunde arbeitet mit der ArchivistaBox Matterhorn. Aktuell umfasst das Archiv des Kunden 7.7 Millionen Dokumente mit gesamthaft 11.4 Millionen Seiten. Auf der Festplatte werden dabei 1.1 TByte f\u00fcr die Datenbank ben\u00f6tigt.<\/em><\/p>\n\n\n\n\t<div class=\"dkpdf-button-container\" style=\"            text-align:right \">\n\n\t\t<a class=\"dkpdf-button\" href=\"\/cms\/wp-json\/wp\/v2\/pages\/9871?pdf=9871\" target=\"_blank\"><span class=\"dkpdf-button-icon\"><i class=\"fa fa-file-pdf-o\"><\/i><\/span> PDF Button<\/a>\n\n\t<\/div>\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Automatisierung einfach gemacht Egg, 6. Juni 2023: Anl\u00e4sslich eines Kundengespr\u00e4ches wurde die Frage er\u00f6rtert, wie die zunehmend digital eingehenden Bestellungen automatisiert mit einem (virtuellen) Barcode best\u00fcckt werden k\u00f6nnen. Damit er\u00fcbrigt sich z.B. das Ausdrucken der Bestellungen und das manuelle Anbringen eines Barcode-Klebers. Vielmehr wird ein virtueller Barcode auf der ersten Seite oben rechts angebracht. Die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9981,"menu_order":45,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-9871","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/9871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/comments?post=9871"}],"version-history":[{"count":6,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/9871\/revisions"}],"predecessor-version":[{"id":9945,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/9871\/revisions\/9945"}],"up":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/9981"}],"wp:attachment":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/media?parent=9871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}