Zum Inhalt springen

CodeScanner mit DSAB verbinden


Helge Klammt
Gehe zur Lösung Gelöst von Moritz,

Empfohlene Beiträge

Moin miteinander,

ich habe einen Barcode-Scanner und einen mit einer Liste versehenen DSAB.

Eingestellt ist es so, dass der eingescannte Code als Vorbelegung im DSAB erscheint.

Ich muß aber trotzdem den DSAB anfassen, und den vorgegebenen Wert vom Scanner zubestätigen.

Gibt  es da eventuell eine schlankere Lösung?

Die Werte aus der Liste des DSAB sollen im Bericht erscheinen, und auch die Möglichkeit der Eingabe von Hand so gewahrt bleiben.

 

Danke und VG

 

  • Like 4
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Lösung
vor 5 Minuten schrieb Helge Klammt:

Gibt  es da eventuell eine schlankere Lösung?

Leider nein. Du musst einmal in den DSAB reinklicken und den Datensatz auswählen; auch wenn der Code bereits in das Suchfeld eingetragen wurde und nur 1 Datensatz zur Auswahl steht 😞

  • Danke 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

wir hatten das Problem auch und haben das so gelöst:

Wir nutzen gar nicht erst den DSAB-Baustein, sondern einen Textergebnisbaustein. Diesen Textergebnisbaustein({String}) aktualisieren wir mit unseren Daten als einzelnen String --> CONCAT("{Barcode1}{Data1_1}{Data1_2}{Data1_3}{Data1_4}{Barcode2}{Data2_1}{Data2_2}[Data2_3}{Data2_4}")

In unserem Beispiel sieht das so aus:

CONCAT("6200000000001000036985RAB30032015672000037881-0001YAD0806201865")

In dem Beispiel wäre:

Barcode1 = 6200000000001000036985

Data1_1 = R

Data1_2 = AB

Data1_3 = 30.03.2015

Data1_4 = 67

Barcode2 = 672000037881-0001

Data2_1 = Y

Data2_2 = AD

Data2_3 = 08.06.2018

Data2_4 = 65

 

Wichtig ist, dass die "Daten" im String immer eine feste Länge haben, der Barcode kann beliebig lang sein.

Mit Textergebnisbausteinen erhalte ich die einzelnen Werte wieder, zuvor aber ein Zahlenergebnisbaustein, welcher die Stringposition des Barcodes wieder gibt:

Zahlenergebnisbaustein({ResultNumber}):

TEXTPOSITION({String}, {CodeScanner}

Textergebnisbaustein1(bei uns Ampelfarbe): 

SUBTEXT({String}, SUM({ResultNumber}, LENGTH({CodeScanner})), 1)

Textergebnisbaustein2(Formfaktor): 

SUBTEXT({String}, SUM({ResultNumber}, LENGTH({CodeScanner}), 1), 2)

Textergebnisbaustein3(Letzte Bewegung): 

CONCAT(SUBTEXT({String}, SUM({ResultNumber}, LENGTH({CodeScanner}), 3), 2), ".", SUBTEXT({String}, SUM({ResultNumber}, LENGTH({CodeScanner}), 5), 2), ".", SUBTEXT({String}, SUM({ResultNumber}, LENGTH({CodeScanner}), 7), 4))

Textergebnisbaustein4(SysID): 

SUBTEXT({String}, SUM({ResultNumber}, LENGTH({CodeScanner}), 11), 2)

 

Dann haben wir noch ein Bild, welches gezeigt wird, wenn der Barcode in dem String nicht vorhanden ist.

Bild - Bedingung:

AND(NOTEQUALS({ResultText}, "R"), NOTEQUALS({ResultText}, "G"), NOTEQUALS({ResultText}, "Y"), NOTEMPTY({CodeScanner}))

 

Wenn man einen integrierten Scanner im Gerät hat, dann kann man natürlich auch mit einem Textbaustein als "CodeScanner" arbeiten.

 

Das war jetzt eine Lösung, die noch relativ einfach ist, weil die Daten, die ausgegeben werden sollen immer die gleiche Länge haben.

Wenn die Daten nicht die gleiche Länge haben, dann muss ein "Trenner" zwischen den Daten gesetzt werden, beim Aktualisieren des String-Bausteins. Mit geschickten Substring/Left/Right und Textpos kann man die Daten zwischen den "Trenner" raus bekommen. Beispiel eines Trenner kann sein "|", zwischen den einzelnen Daten und ein "*" zwischen den Barcodes mit Daten. Kleines Beispiel (Database = String):

1:

RIGHT({Database}, SUB(SUB(LENGTH({Database}), TEXTPOS({Database}, {CodeScanner})), LENGTH({CodeScanner})))

2:

LEFT({zwischenErgebnis_string}, TEXTPOS({zwischenErgebnis_string}, "*"))

3:

LEFT({zwischenErgebnis_string2}, SUB(TEXTPOS({zwischenErgebnis_string2}, "|"), 1))

 

Sollte etwas unklar sein, kann ich nochmal ergänzen.

 

Achtung, der String-Baustein hat ein Limit mit Zeichen, der liegt glaube ich bei ca. 1mio Zeichen. Wir haben 710.000 Zeichen im Baustein und funktioniert noch. (natürlich auch schnell, sonst wäre das keine Alternative)

 

Gruß

Alex

Bearbeitet von Alex Krause
  • Danke 3
Link zu diesem Kommentar
Auf anderen Seiten teilen

Stark @Alex Krause, danke!

 

vor einer Stunde schrieb Alex Krause:

Wenn die Daten nicht die gleiche Länge haben, dann muss ein "Trenner" zwischen den Daten gesetzt werden, beim Aktualisieren des String-Bausteins.

Dazu hatte ich übrigens mal einen eigenen Beitrag verfasst (mit ein wenig anderen Formeln, aber das ist ja das schöne: wie man die Bauklötze zusammensteckt, um ein Haus draus zu bauen, ist egal 😄).

 

  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde Dich an, um einen Kommentar zu hinterlassen

Du kannst nach der Anmeldung einen Kommentar hinterlassen



Jetzt anmelden
×
×
  • Neu erstellen...