Добрый день, уважаемые коллеги.
Думаю, у многих есть желание научить 1С читать маркировку в виде двумерных кодов и штрих-кодов, не задействуя при этом дорогостоящие сканеры, а используя обычную веб-камеру компьютера, ноутбука или виндовс-планшета.
Что хочется: берем в руку камеру, в 1С нажимаем кнопку "Сканировать", наводим камеру на штрих-код, штрих-код считывается, результат возвращается в 1С.
Изыскания, как и многих других, привели меня к библиотекам Ozeki (особенно в части компьютерного зрения). В trial-версии SDK не обнаружил особенных помех для работы камеры, как мне кажется, эта тема касается только включенной в SDK работы с VoIP и телефонией.
Не забываем учесть то, что DLL являются свободно распространяемыми (Redistributable.DLL), о чем написано на сайте https://camera-sdk.com/.
Перед использованием приложения не будет лишним установить Ozeki_SDK.exe из скачанного архива installwindows_1700379824_Ozeki_SDK_10.4.13.zip
Прошу принять во внимание, что SDK у Ozeki постоянно совершенствуется и часто не имеет обратной совместимости с решениями, скомпилированными с использованием более ранних библиотек.
Моё решение было основано на базе решения из папки архива installwindows_1700379824_Ozeki_SDK_10.4.13.zip.
Использованы:
- Windows 10 x64
- Ozeki SDL installwindows_1700379824_Ozeki_SDK_10.4.13.zip
взято отсюда: https://camera-sdk.com/p_6513-download-onvif-ozeki-camera-sdk-for-c-sharp.html
Моё решение только для Windows, но, думаю, ничего не мешает скачать SDK для Linux и побаловаться с Android смартфонами.
Также мое решение работает только с USB-камерами, но, думаю, можно побаловаться в исходниках и с onvif.
-решение из папки %UserProfile%\Documents\Ozeki\Ozeki
SDK\Examples\Camera\04_ComputerVision\07_BarcodeDetection\BarcodeDetection
Мануал: https://camera-sdk.com/p_6514-online-manual-for-the-ozeki-camera-sdk.html
-Visual Studio 2017
-.NetFramework 4.8 (ndp48-devpack-enu.exe)
Что изменено/добавлено в решении:
-Если камера одна, то берется она. Если камер несколько, то можно выбрать (полезно для планшетов, где камер несколько).
-Сократил избыточные настройки инверсии и ротации штрих-кода. При желании каждый сможет их перекомпилить под себя.
-Прошелся через SonarLint SonarQube-ом и убрал некоторые Warning-и.
-Исключил сканеры из выбираемых устройств.
Для того, кто будет компилировать ПО для себя, есть смысл убрать установленные по умолчанию параметры запуска, заданные в свойствах проекта.
В приложении в поле списка справа снизу можно задать (отметить) перечень предпочтительных для прочтения кодов. ANY... - означает, что будут считываться все коды.
Я учёл в приложении наиболее популярные, но приложение может распознавать значительно больший список кодов. Всё зависит от Вашего усердия при фокусировке и качества Вашей Web-камеры.
Приложение можно запустить из внешнего приложения или пакетного файла (в нашем случае 1С) используя для удобства следующие параметры запуска:
ClearBarcodeFieldBeforeReading - В программе автоматом установится галочка "Очищать при прочтении очередного кода.". Она нужна для того, чтобы в поле считанных штрих-кодов оставался только текущий считанный код.
ExitAndWriteBuffer - В программе автоматом установится галочка "Очищать при прочтении очередного кода.". Она нужна для того чтобы про распознавании очередного кода программа закрывалась и записывала содержимое текстового поля со штрих-кодами в буфер обмена Windows.
Впоследствии буфер можно читать другим приложением (в нашем случае 1С, из которой запущена программа).
- TYPE_CODE_EAN_13 - Будет отмечен для считывания код типа EAN-13
- TYPE_CODE_EAN_8 - Будет отмечен для считывания код типа EAN-8
- TYPE_CODE_DATA_MATRIX - Будет отмечен для считывания код типа DATA-MATRIX
- TYPE_CODE_CODE_39 - Будет отмечен для считывания код типа DATA-MATRIX
- TYPE_CODE_QR_CODE - Будет отмечен для считывания код типа QR_CODE
- TYPE_CODE_PDF_417 - Будет отмечен для считывания код типа PDF_417
- TYPE_CODE_MSI - Будет отмечен для считывания код типа MSI
- TYPE_CODE_UPC_E - Будет отмечен для считывания код типа UPC_E
- TYPE_CODE_ANY - Будут распознаваться ЛЮБЫЕ, поддерживаемые библиотекой штрих-коды.
Несколько примеров использования:
Например, если Вы-ювелир, купили USB-микроскоп и хотите считывать нано-метки (DataMatrix-коды) с ювелирных изделий в 1С, то ваш сценарий запуска это:
BarCodeWebCamReader.exe ClearBarcodeFieldBeforeReading ExitAndWriteBuffer TYPE_CODE_DATA_MATRIX
Для считывания всех типов кодов запускаем так:
BarCodeWebCamReader.exe ClearBarcodeFieldBeforeReading ExitAndWriteBuffer TYPE_CODE_ANY
Выглядит это так:
Или так для управляемых форм:
Как бороться с предупреждениями о безопасности, все знают. Жмём "ДА".
Для желающих переписать программу для себя отдельно прилагаю исходники.
Также прилагаю обработку с примером для 1С. Подходит и для обычного, и для управляемого приложения (внутри 2 формы).
Код в 1С можно использовать такой:
КодВозвратаПриложения = Неопределено;
ЗапуститьПриложение("C:\Users\User\Desktop\BarCodeWebCamReader\BarCodeWebCamReader\bin\Debug\BarCodeWebCamReader.exe ClearBarcodeFieldBeforeReading ExitAndWriteBuffer TYPE_CODE_DATA_MATRIX", , Истина, КодВозвратаПриложения);
Если КодВозвратаПриложения = 0 Тогда
КомОбъект = Новый COMОбъект("htmlfile");
Сообщить(КомОбъект.ParentWindow.ClipboardData.Getdata("Text"));
КонецЕсли;
Тестирование производилось на платформе 1С 8.3.24.1368.