Насчет эффективных сценариев, простейший пример: работник склада идет со сканером в дальний шумный угол и начинает сканирование. А программа дает ему обратную связь! Т.е. если товар по каким-то причинам не проходит - можно подавать непосредственно на сканер разные звуковые и световые сигналы, сигнализирующие о характере проблемы или вообще заблокировать сканирование, чтобы работник вернулся к компьютеру и разобрался с проблемой перед продолжением сканирования. Очень удобно. Одна проблема - не смог найти готовых примеров работы из 1С.
try
CoreScanner = new COMObject("CoreScanner.CoreScanner");
except
Message("Error driver search: " + ErrorDescription());
failure = true;
return;
endtry;
Status = -1;
ScannerTypes = new COMSafeArray("VT_I2", 1); // array of integer(x2 byte), size=1
ScannerTypes.SetValue(0, 1); // 1 - all scanner types
CoreScanner.Open(0, ScannerTypes, 1, Status);
if Status <> 0 then
Message("Error scanner connection: " + Status + " " + ErrorCodes[Status]);
endif;
Подписка на событие сканирования (тоже код 1С):
AddHandler CoreScanner.BarcodeEvent, BarCodeScanned;
Status = -1; Response = "";
CoreScanner.ExecCommand(ScannerCommands["REGISTER_FOR_EVENTS"],
StrTemplate("<inArgs><cmdArgs><arg-int>%1</arg-int><arg-int>%2</arg-int></cmdArgs></inArgs>",
1, // number of events
ScannerEvents["SUBSCRIBE_BARCODE"]),
Response, Status);
if Status <> 0 then
Message("Error subscribing to barcode scanning event: " + Status + " " + ErrorCodes[Status]);
endif;
Где ErrorCodes, ScannerEvents, ScannerCommands - это просто соответствия 1С с кодами/названиями. Нужные значения можно взять из документации Zebra Scanner SDK (ну или готовые из обработки). BarCodeScanned - это как раз название процедуры 1С (принимающей два параметра), которая будет автоматически вызываться при сканировании штрихкода. Все остальные приемы работы с библиотекой - тривиальны.
UPD. Обратите внимание!
В новых версиях сканера той же модели, ряд команд (включая отправку звуковых сигналов) теперь необходимо посылать на сканер, как на отдельное устройство. В примерах статьи и в текущей версии обработки все команды посылаются на первое устройство в списке устройств. А это обычно база. Теперь же часть команд следует посылать непосредственно на сканер (обычно второе устройство). В противном случае они просто не отработают.