Jump to content

Barcode vergleichen


Fabian
Go to solution Solved by Manuel Rühl,

Recommended Posts

Hallo zusammen, 

ich bin neu hier und versuche gerade eine smap zu bauen, bei der ganz simpel 2 Barcodes oder 2 QR-Codes mit einander vergleichen kann, jedoch finde ich keine Bausteine dafür.

Kann mir jemand weiterhelfen, gibt es die Möglichkeit durch Scan zweier Barcode/QR-Code diese miteinander zu vergleichen?

Möchte bei der Einlagerung in der Logistik meinem Mitarbeiter die Möglichkeit geben, anstatt die Typteilenummern auf dem Einlagerungsschein und auf dem Erzeugnis manuell, diese mit Scan zu vergleichen.

Danke schonmal im voraus

Gruß Fabian

  • Like 1
Link to comment
Share on other sites

vor 2 Stunden schrieb Manuel Rühl:

Man kann in einem Textergebnisbaustein die Codes vergleichen:

IF(EQUALS({CodeScanner},{CodeScanner_2}),"OK","NICHT OK")

Hallo, 

Super und Danke,  funktioniert einwandfrei

Gruß Fabian

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 5 months later...

Hallo @Bülent Erbas

Sorry, habe mich nicht eindeutig ausgedrückt. In der Wiederholungsgruppe existiert nur ein CodeScanner-Baustein. Der Vergleich müsste zwischen den einzelnen Einträgen der Wiederholungsgruppe erfolgen.

Wir erfassen damit den Barcode von Probenahmegefäßen zur Trinkwasseranalyse. Eine Probennahme ist ein Eintrag in der Wiederholungsgruppe. Es soll ausgeschlossen werden, dass ein Gefäß mehrfach eingescannt werden kann. 

Link to comment
Share on other sites

Johanna Becker
This post was recognized by Johanna Becker!

Sebastian was awarded the badge 'Helpful'

Hallo @Daniel Michalek,

dafür muss man ein bisschen tiefer in die Trickkiste greifen.

Eine Möglichkeit wär es das ganze mit einer Match-Formel und einer dynamischen Regex zu lösen.

Das geht entweder in einem Feld, oder etwas übersichtlicher mit 2 Feldern.

image.png.322b252ff33c03c7e46626f4a8cd9437.png

Die DynamicRegex hat dabei im Beispiel folgende Formel:

CONCAT("(#", JOIN("#.*){2,}|(#", {RepeatGroup_3.Auswahl_3}), "#.*){2,}")

"Auswahl_3" kann natürlich auch ein normales Texteingabefeld sein.

Damit wird für jeden Wert ein Teil einer Regex zusammengebaut, der matcht, wenn der Eintrag mindestens 2 Mal vorkommt.

Darauf Basierend können wir dann folgende Formel nutzen um zu prüfen, ob diese Regel zutrifft. Diese Prüfung ist im Beispiel in der Sichtbarkeitslogik von Text_5.
Hier werden wieder alle Einträge per Concat und Join in eine Zeile geschrieben und anschließend geprüft, ob die davor gebaute Regex zutrifft.

MATCH(CONCAT("#",JOIN("##", {RepeatGroup_3.Auswahl_3}), "#"), {DynamicRegEx})

 

Keine Sorge, man muss die Details nicht verstehen und kann die Formeln auch einfach kopieren und die eigenen Bausteinnamen einsetzen.

Damit das ganze funktioniert ist es nur wichtig, dass die Werte in dem Baustein, der geprüft werden soll wirklich eindeutig sind.

Edited by Sebastian
  • Like 3
  • Thanks 4
Link to comment
Share on other sites

Hallo @Sebastian!

Ja geil...funktioniert!!! 🥳 Dickes DANKE an Dich! So hab ich auch noch was über reguläre Ausdrücke gelernt, super.

Aber wer den kleinen Finger reicht, bekommt häufig den Arm abgerissen. Hier kommt also die nächste Frage. Kann ich auch noch bestimmen welche Wiederholungen doppelt sind? Vielleicht über den Index?

Edited by Daniel Michalek
  • Like 1
Link to comment
Share on other sites

@Bülent Erbas

Eigentlich ist es gar nicht so kompliziert. Im ersten Schritt wird ein Regulärer Ausdruck zusammengebaut.

Bei 5 Einträgen mit den Werten:

- Wert1
- Wert2
- Wert3
- Wert1

Kommt als Ausdruck folgendes raus
(#Wert1#.*){2,}|(#Wert2#.*){2,}|(#Wert3#.*){2,}|(#Wert1#.*){2,}

Die |-Zeichen stehen dabei innerhalb der Regex für ein "oder" und die "{2,}" sagt, das die Gruppe in Klammern davor jeweils mindestens 2 mal vorkommen soll.

Als Beispiel für den ersten Wert sagt die Regex also, dass "#Wert1#" (plus beliebige weitere Zeichen) mindestens 2 mal vorkommen soll um die Bedingung zu erfüllen.

Der andere Teil setzt die Werte mit den Trennzeichen zusammen, so dass dort gegen folgendes verglichen wird:

#Wert1##Wert2##Wert3##Wert1#

In dem Beispiel findet die Regex also einmal

#Wert1##Wert2##Wert3#

und dann noch das hintere

#Wert1#

und damit ist der erste Teil vom Ausdruck erfüllt, da es zwei mal etwas findet.

Die Idee stammt übrigens hauptsächlich von @Christian Meixner.

Edited by Sebastian
  • Like 3
  • Thanks 2
Link to comment
Share on other sites

  • 2 weeks later...

Danke für die Blumen @Sebastian 😉

Vielleicht noch ein Hinweis zu den vielen "#" in dem regulären Ausdruck, bei denen sich wahrscheinlich schon der einen oder andere gefragt hat, wozu die gut sein sollen:
Die markieren einfach nur die Grenzen einer Wortgruppe und haben sonst keine Funktion. Auf diese Weise wir aber sichergestellt, dass wirklich nur echte Dubletten der ganzen Wortgruppe gefunden wird. Ansonsten würde nämlich "Wert" als Dublette von "Werte" erkannt werden, weil das erste vollständig in dem zweiten enthalten wird. Daher suchen wir lieber nach "#Werte#", welche in "#Werte#" nicht vorkommt.

Ihr könnt die # daher in eurer eigenen Anwendung auch einfach durch ein beliebiges anderes "seltenes" Zeichen ersetzen, um damit Anfang und Ende der Wortgruppen zu markieren. Es sollte aber möglichst ein Zeichen sein, das selbst keine Bedeutung in regulären Ausdrücken hat.

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

@Christian Meixner

Diese Diskussion hatte ich Anfang des Jahres mit @Moritz Münzenmaier

Man kann diese Logik auch für die Suche in DSAB verwenden. Wir heißen ja ROTH, haben aber auch ROTe Gasflaschen.
Mein Trennzeichen der Wahl ist allerdings die "Pipe" |  (=AltGr+größer/kleiner Zeichen).
Damit lassen sich Texte zu lesbar abgrenzen und das verwendet außer mir keiner.
Hashtag, Semikolon, Komma ... alles gerne so Zeichen, die auch in einem Artikeltext stehen können...   

  • Like 3
Link to comment
Share on other sites

Richtig. Hier muss man aber beachten, dass die Pipe | in regulären Ausdrücken eine eigene Bedeutung und Funktion hat. Daher muss man diese hier zusätzliche mit einem \ versehen (nennt sich "escapen"). Das funktioniert, macht allerdings den regulären Ausdruck etwas unübersichtlicher.

Das Beispiel von oben wäre dann:

(\|Wert1\|.*){2,}|(\|Wert2\|.*){2,}|(\|Wert3\|.*){2,}|(\|Wert1\|.*){2,}

statt mit der # als Trenner:

(#Wert1#.*){2,}|(#Wert2#.*){2,}|(#Wert3#.*){2,}|(#Wert1#.*){2,}

Bzw. müsste die Formel dann lauten:

CONCAT("(\|", JOIN("\|.*){2,}|(\|", {RepeatGroup_3.Auswahl_3}), "\|.*){2,}")

 

Und in der Formel ist es dann schon wieder gar nicht so viel unübersichtlicher. Den erzeugten vollständigen regulären Ausdruck bekommt in dem Fall ja gar niemand zu Gesicht.

  • Like 4
  • Thanks 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...