Fabian Posted June 28, 2023 Share Posted June 28, 2023 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 1 Link to comment Share on other sites More sharing options...
Solution Manuel Rühl Posted June 28, 2023 Solution Share Posted June 28, 2023 Man kann in einem Textergebnisbaustein die Codes vergleichen: IF(EQUALS({CodeScanner},{CodeScanner_2}),"OK","NICHT OK") 2 1 2 Link to comment Share on other sites More sharing options...
Bülent Erbas Posted June 28, 2023 Share Posted June 28, 2023 @Manuel Rühl kann man die Werte aus dem CodeScanner-Baustein direkt vergleichen? Ich gehe immer über Zwischenschritte in dem ich die Werte erst einmal "zwischenspeichere" und dann erst mit der obigen Formel vergleiche. 1 Link to comment Share on other sites More sharing options...
Manuel Rühl Posted June 28, 2023 Share Posted June 28, 2023 Ich habe das eben so kurz getestet und es hat funktioniert. 1 1 Link to comment Share on other sites More sharing options...
Fabian Posted June 28, 2023 Author Share Posted June 28, 2023 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 1 1 Link to comment Share on other sites More sharing options...
Daniel Michalek Posted December 4, 2023 Share Posted December 4, 2023 Hallo zusammen! Hätte jemand einen Tipp für mich, wie man Barcodes innerhalb einer Wiederholungsgruppe vergleichen kann? Hab hier gerade leider keinen Ansatz. Danke und Grüße Daniel Link to comment Share on other sites More sharing options...
Bülent Erbas Posted December 4, 2023 Share Posted December 4, 2023 Hallo @Daniel Michalek ich kenne deinen Ablauf und deinen Aufbau zwar nicht, aber den Vergleich kannst du ja auch in die Wiederholungsgruppe einfügen. Die Formel, wie oben beschrieben, kann dann direkt nach jedem Scan verglichen werden. Wie gesagt, hängt ein bisschen damit zusammen, wie dein smap aussieht. Link to comment Share on other sites More sharing options...
Daniel Michalek Posted December 4, 2023 Share Posted December 4, 2023 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 More sharing options...
Bülent Erbas Posted December 4, 2023 Share Posted December 4, 2023 Hallo @Daniel Michalek das wird etwas komplizierter... 😅 Kannst du deine Anforderung etwas näher beschreiben? Also, wie viele Wiederholungsgruppen gibt es, wie viele Erfassungen pro Gruppe können durchgeführt werden? Link to comment Share on other sites More sharing options...
Daniel Michalek Posted December 5, 2023 Share Posted December 5, 2023 Das habe ich mir leider schon gedacht @Bülent Erbas 😅 Wir haben eine Wiederholungsgruppe mit den maximal 50 Wiederholungen. Die werden auch zum Teil voll ausgeschöpft. Pro Eintrag/Wiederholung gibt es einen Code-Scanner-Baustein. Link to comment Share on other sites More sharing options...
Sebastian Posted December 5, 2023 Share Posted December 5, 2023 (edited) 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. 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 December 5, 2023 by Sebastian 3 4 Link to comment Share on other sites More sharing options...
Daniel Michalek Posted December 5, 2023 Share Posted December 5, 2023 (edited) 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 December 5, 2023 by Daniel Michalek 1 Link to comment Share on other sites More sharing options...
Bülent Erbas Posted December 5, 2023 Share Posted December 5, 2023 vor 1 Stunde schrieb Sebastian: CONCAT("(#", JOIN("#.*){2,}|(#", {RepeatGroup_3.Auswahl_3}), "#.*){2,}") Das ist mega. Danke @Sebastian Die Details würde ich aber gerne verstehen, was im Einzelnen passiert. ☺️ 3 Link to comment Share on other sites More sharing options...
Sebastian Posted December 8, 2023 Share Posted December 8, 2023 (edited) @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 December 8, 2023 by Sebastian 3 2 Link to comment Share on other sites More sharing options...
Christian Meixner Posted December 18, 2023 Share Posted December 18, 2023 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. 2 1 Link to comment Share on other sites More sharing options...
Manuel Rühl Posted December 18, 2023 Share Posted December 18, 2023 @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... 3 Link to comment Share on other sites More sharing options...
Christian Meixner Posted December 18, 2023 Share Posted December 18, 2023 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. 4 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now