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