Предисловие.
Несложно заметить, что на просторах интернета достаточно много разработок для генерирования штрих-кодов разного типа. Многие используются в качестве онлайн сервисов, другие — как отдельные приложения и, наконец — как внешние компоненты, в том числе и для 1С. Однако, последние, хоть и генерируются в 1С, распознаны ею уже не могут быть. Поиски решения как распознать штрих-код заняли много времени, и были безуспешны — поэтому было решено создать ActiveX для распознавания штрих-кодов.
Технология.Камера
Работа с камерой осуществляется с помощью библиотеки avicap32.dll. Благодаря ей же, реализован метод ПолучитьИмяУстройства(Индекс) возвращающий имя драйвера, который можно использовать для построения списка устройств ввода видео данных.
Технология.РаспознованиеШтрихКода
Изобретать велосипед незачем ,так как уже есть проверенные библиотеки распознавания:
ZXing-2.1*
MessagingToolkit Barcode*
*Библиотеки бесплатны для некоммерческого использования.
Выбор пал на последнюю, ввиду большей скорости обработки информации, однако замечу, что после множества тестов распознавания сложных штрих-кодов (таких как PDF 317 и CODE 128) процент ошибок ZXing был сравнительно ниже.
ВнешняяКомпонента.Использование
К сожалению, на момент написания статьи не удалось решить проблему использования одной библиотеки для обоих клиентов, поэтому чтобы использовать компонент в толстом клиенте используется Shakmaev.Decoder.dll, для тонкого Shakmaev.TDecoder.dll.
Для начала работы с компонентой убедитесь что на компьютере установлен Microsoft Framework 4.
Затем ее необходимо зарегистрировать выполнив команду:
%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe «.Shakmaev.Decoder.dll» /codebase
и скопировать файл avicap32.dll(сохраните старый файл, если он уже есть) в папку WindowsSystem32.
Для облегчения работы в папке с ВК вы найдете BAT файл(Registry.bat), который поможет сделать все это автоматически.
[Толстый клиент]
Библиотека для работы с обычными формами Shakmaev.Decoder.dll [GUID: 779D9FB8-C4A3-40c2-9E08-296CDAF1165F]
Если вся работа была проделана правильно, в списке окна Форма-Вставить ActiveX должна появиться строка Shakmaev.Decoder. Перед началом работы необходимо указать коды каких типов вы будете пытаться распознать. Для этого существуют параметры вида ИскатьХ, где Х — это любой из этого списка поддерживаемых типов штрих-кодов (например ИскатьQR):
UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 128, QR Code, Interleaved 2 of 5, Codabar, RSS-14, Data Matrix, PDF 417, Aztec, MaxiCode.
Для удобства в ВК есть параметр «ИспользоватьСигнал«, если присвоить ему значение «Истина«, то при выполнении функции «РаспознатьКод()» системный динамик должен издать звук. К сожалению, это работает только в операционных системах архитектуры x86.
Подробности в обработке «Decoder» архива проекта, форма «ОбычнаяФорма».
[Тонкий клиент, Веб-клиент]
Библиотека для работы с управляемыми формами Shakmaev.TDecoder.dll [GUID: AE078288-5E41-4316-95FF-33AFE7753168]
Чтобы добиться корректной работы ActiveX в управляемом приложении необходимо в настройках обозревателя разрешить выполнение ActiveX сценариев и все что с ними связано. Функции и параметры доступные в обычном приложении тут работают аналогично.
Подробности в обработке «Decoder» архива проекта, форма «УправляемаяФорма».
[UPD 27.08.2013]
Любые действия, связанные с регистрацией компоненты, вы должны выполнять с правами администратора.
//Ошибка RegAsm : error RA0000: При записи регистрационной информации в реестр произошла ошибка.//
Cкорее всего, у вас нет прав доступа к ветке реестра HKEY_CLASSES_ROOT.
Алгоритм дейтвий такой:
1. Нажимаем Пуск — Выполнить
2. Пишем regedit и жмем Enter
3. Кликаем правой кнопкой мыши по ветке HKEY_CLASSES_ROOT и выбираем «Разрешения»
4. Выберите группу Администраторы
5. Убедитесь, пункт «Полный доступ» отмечен, в противном случае отметьте его.
6. Нажмите «Применить», и «ОК»
7. Установка должна пройти успешно. При необходимости перезагрузитесь.
//Ошибка RegAsm : error RA0000: Unable to locate input assembly. ‘Путь в ковычках’//
Ошибка связана с тем, что программа регистрации не может найти файл библиотеки. Библиотека компоненты должна находиться в той же папке, что и bat файл.
Спасибо, давно пора из планшетов POS-терминалы делать! И другие применения напрашиваются.
надо попробовать, интересное решение..
бредовая идея конечно, но за реализацию ставлю плюс. в мире уже давно используют аппаратные сканеры штрих-кодов.
(3) savflint,
1. Аппаратные сканеры в разы дороже веб камеры.
2. Тут я не настаиваю на альтернативе, просто реализация технологии.
3. Еще не видел аппаратные сканеры QR, Data Matrix кодов.
Практически все аппаратные сканеры это делают, и думаю гораздо быстрее этой ВК.
хотел внедрить QR код, все никак не покупали мне сканер. спасибо!
Очень полезная штука — цена Веб-камеры и сканера отличаются в разы.
Детская игрушка. Необходимо мощное освещение, и точное прицеливание. Для одного двух считываний нормально, но для промышленного применения не годится.
arjuna,
1. Из примеров работы компоненты можно заметить, что прицеливание работает под разными углами.
2. Конечно, если использовать камеру 0,3 мп, по понятным причинам распознать штрих код сложно.
3. В своей компании я внедрил этот инструмент в бизнес процесс, оператор, в стандартно освещенной комнате, тратит не более 5 секунд для распознавания(цикл постоянно ждет появления штрих-кода EAN и QR).
Ну и наконец, в устройствах(телефоны, планшеты), которые используют похожие алгоритмы, установлены камеры с разрешением от 2 мп, а работают они только если есть освещение.
Такое и бесплатно! Однозначно плюсую и качаю… Сейчас если и не нужно — в будущем пригодится!!!
ТСД для EAN-13 стоит 40000 — 70000 т.р.
для QR в разы больше, а тут поколдовать с планшетом и вот тебе реализация себестоимость которой \r
4000-20000 т.р.
Единственное — актуален вопрос освещения, для планшетов это проблема. С другой стороны какой-нибудь смарт типа самсунг галакси со здоровенным экраном и вспышкой вполне подойдет.
Таким образом, если убедить директора в такой реализации — то 1Сник получит прямую прибыль.
поэтому плюс.
(11)Круто … У вас программисты получают разницу от рыночной стоимости и стоимости самоделок? Ништяк…
а как скопировать файл avicap32.dll если он там уже есть и защищен от записи?
win7, win8 аналогично
скопировал, зарегистрировал, не работает.
вообще файл avicap32.dll имеет разные версии, возможно, поэтому с уже имеющимся файлом не работает. рекомендую вам попробовать проделать туже работу с правами администратора, предварительно отключив UAC
(14) та я заменил из соседней операционки, всё равно не работает.
Кто ни будь вообще пробовал?
Признал. Попробовал, получилось. На XP
(13) Yury1001, если есть какие-либо ошибки скрин в студию =)
Попробую.Сообщу!
(17) нет ошибок — просто не работает:), скринов не будет — снёс уже
(18) Gavroch.v, и шо?
там где количество сканирований в минуту не важно, данный вариант применим
(11) Светлый ум,
да ты брось ТСД для ean стоит около 15к
(21), Windows 7 Pro x64, 1С 8.2 — все работает
Зарегистрировал, скопировал «avicap32.dll», старую длл-ку сохранил
Проверить обработку не смог, при старте обработки возникает ошибка:
{Форма.ОбычнаяФорма.Форма(4)}: Ошибка при вызове метода контекста (ПолучитьИмяУстройства)
Устройство = ЭлементыФормы.Декодер.ПолучитьИмяУстройства(К);
по причине:
Произошла исключительная ситуация (Shakmaev.Decoder): Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)
Причем, если вернуть старый avicap32.dll, обработка загружается, но штрих код не распознает (код -1)
Что делать?
(23) Kondrat, значит оставляете со старой avicap32.dll.
Если возвращает -1, значит проблема уже в самой работе.
Можно код процедуры распознавания?
Обязательно попробую. Как раз то что и искал. плюс однозначно.
Хотелось бы узнать. Картинки в формате bmp или jpg с QR кодами возможно распознать? Или только через web камеру?
(27) jhfrek, конечно можно, но тогда теряется идея публикации. Если есть необходимость, я могу подкрутить=)
(28)Да, было бы здорово, если бы она ещё умела читать QR код из картинки в каталоге. А то неудобно получается. Скачал картинку с интернета и чтобы прочитать код нужно его распечатывать. С экрана монитора камера читать может только, если картинка большая и очень чёткая.
IMHO, оччень полезная разработка! Спасибо)
Отличная штука, попробую на старом клиенте
Супер! Молодец!
Интересно, надо пробовать. Спасибо автору
Штука интересная, + ставлю однозначно. Только вопрос: с обчного сканера (у меня Mustek) Эта штука будет работать?
P.S.: спрашиваю потому, что лень скачивать и заниматься экпериментами. Please, проконсультируй, и измени описание на эту тему, чтобы подобных вопросов не было.
(34) vladimir_makarov, не совсем понял суть вопроса — что значит с обычного сканера? суть этой компоненты: распознавание без сканера штрих-кодов, а с помощью веб-камеры
(35)Вот! Могу я вместо Web-камеры использовать обыкновеннй сканер? В отличие от Web-камеры, изображения пердаются с огромной точностью, хоть деньги делай! Суть впроса: сможет ли обработка прочитать штрих-код из обычного графического файла (любого формата)?
(36) vladimir_makarov, да чуть выше уже эта тема поднималась. в данный момент распознает только с веб-камеры. Понял что надо, на неделе сделаю.
Что-то она у мну матерится:
{Форма.ОбычнаяФорма.Форма(4)}: Метод объекта не обнаружен (ПолучитьИмяУстройства)
Устройство = ЭлементыФормы.Декодер.ПолучитьИмяУстройства(К);
Компоненту заменил — перестала работать вебка.
Что-т мне кааца, не то она что-то инициализирует.
ЗЫ: Права самые самые, админ я
Добрый день! Будет ли работать в управляемом приложении конфигурации 1С: Клиническая лаборатория (8.2.16.368 — платформа)?
Спасибо за ВК! Будем пробовать.
За разработку однозначно большой плюс =)
Но у меня на win 7 выдает это, при регистрации
(41) BAMPER, с правами администратора происходит регистрация? Из скрина видно что «батник» не может найти библиотеку регистрации
(39) Alex-2, прошу прощения за длительный ответ. Работать будет в любой конфигурации так как это написано в статье.
(38) vladshnurkoff, прошу прощения за задержку. Еще актуально?
(44) Неа, у меня немного другая задача стояла — решили с помощью сканера и вот этой байды:http://infostart.ru/public/167879/
(42) Запускал от администратора…
назначал права полные на папку.
копировал длл-ки в папку с фреймворком, ничего не помогло =((
(46) BAMPER, какие длл-ки вы копировали в папку с фреймворком? а главное зачем? прочитайте внимательно инструкцию.
Все таки прошу помощи, не хочет не в какую регистрировать библиотеку. Я уже много инфы перерыл в нете.
Вроде видит длл но вот что:
Здравствуйте! Я не пойму как заполняются документы. Просканировал штрих код с помощью web камеры, распознал, а дальше что? Со штрих кодами не когда не работала в 1С. Но я так понимаю, сканируешь и документы должны заполняться?
(49) umnica2, Вообще это ВК для распознавания штрих кодов, а с уже полученным кодом вы можете сделать что хотите. Если говорить о штрих-кодах, то в 1С есть регистр сведений — Штрихкоды, привязанный к номенклатуре по умолчанию. Вы можете дописать ОбработкуПроведения нужных документов, чтобы для каждого формировался штрих-код, ну и потом этой обработкой пользоваться для выборки.
(37) А можете выложить доделаный вариант или подсказать, в сторону каких сторонних разработок посмотреть? Интересует именно возможность распознать штрих-код из графического файла или выделенной области на нем (если это штрих-код на документе листа формата А4).
(51) senshib, да нужно обновить публикацию, к сожалению, пока не было времени и возможности. Думаю в ближайший срок обновлю компоненту, работу уже начинал в этом направлении
(51) senshib, в комплекте с MessagingToolkit Barcode есть консольный вариант утилиты, понимает набор с множества кодов на странице, может с выделеной области, двухмерные(в часности pdf417) понимает лучше чем «железный» сканер.
Однозначно +.Давно хотел внедрить QR код
Как вставить компонент на форму 7.7?
Очень нужна компонента. Не могли бы выслать на почту mc1c80@yandex.ru, а то не хватает старт мани для скачки?
адски плюсую
Очень полезно, ловите плюс!
кто подскажет, как подключить камеру ноута…
а то при открытии окно изображения пустое
как то не очень правильно работает.
УНФ. Толстый клиент — камера работает. снимок делает, но в результат выводит -1.
Тонкий клиент. камера не работает. ВК.contentDocument = неопределено. со всеми вытекающими…
(55) Art77, в 1С 7.7 можно с помощью 1C++ ActiveX(класс АктивИкс) и FormEx(метод ПослеОткрытия), GUID компоненты указан в публикации.
(60) Bond, по толстому клиенту. Возврат «-1» означает, что штрих-код на изображении распознать не удалось. Скорее всего, это связано с тем, что вы используете слабую камеру. Для хорошей работы рекомендую вам использовать камеру с разрешением от 1.3 мега пикселя.
Что касаемо тонкого клиента, если вы правильно установили Shakmaev.TDecoder.dll, попробуйте разрешить выполнение сценариев ActiveX и снимите прочие ограничения ActiveX элементов в окне «Свойства браузера» панели управления.
(62) все дллки скопировал в system32. запустил батник. ругалось только на avicap32.dll, но у существующего файла та же версия. в настройках брайзера разрешил все что видел касательно activeX. все равно не отображает ничего в окне. и ругается при нажатии кнопки Старт.
{Форма.УправляемаяФорма.Форма(14)}: Значение не является значением объектного типа (ИскатьQR)
ВКОбъект.ИскатьQR = Истина;
(63) Bond, явно прослеживается ошибка в установке компоненты. Давайте уточним, вы установили обе библиотеки? То есть, в Конфигураторе в меню «Форма» -> «Вставить ActiveX» Вы видите Shakmaev.Decoder и Shakmaev.TDecoder? Мне в голову больше ничего не приходит, ошибка в том, что COM для тонкого клиента не находит платформа.
Доброго времени суток! Сколько будет стоить решение задачи: вставить в 1С 8.3 УПП кнопку, нажав которую выполняется аналогичное нажатию кнопку «считать код» на сканере штрих-кода, действие.
А именно поиск товара/документа в 1С по алгоритму — нажимаем кнопку — активируется камера, автоматически наводится фокус на штрихкод — распознается код — копируется значение в буфер — деактивируется камера — закрывается обработка — происходит поиск документа по штрих-коду среди документов в открытом журнале документов или товара в подборе товаров или добавление товара непосредственно в документе.
Добрый день разработчик 1С — Александр!
У меня вопрос — скачал вашу обработку «Распознаем штрих-коды QR, EAN-13, PDF 417 и др. с помощью веб камеры» у нас на ноутбуках в системе -разрядности 32х всё отлично работает, а на ноутах, где стоит Windows 7 Проф 64х — при запуска команды «%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe «.Shakmaev.Decoder.dll» /codebase» выдаёт Ошибку:
RegAsm : error RA0000 : Невозможно загрузить файл или сборку «file:///D:DecoderShakmaev.Decoder.dll» или один из зависимых от них компонентов. Операция не поддерживается. <Исключение из HRESULT: 0x80131515>,
Фото — СкринШот — приложил!
Что посоветуешь???
Спасибо за разработку. Как раз пытаемся внедрить
Используем для УФ
Как подогнать размер картинки? Вылазит за пределы видимости.
(67) borrman, благодарю за оценку работы.
К сожалению размер компоненты фиксирован, и изменять нельзя — мое упущение.
Если будет очень уж нужно можно подумать над размерами.
Великолепно 🙂
(68) А нельзя как-то картинку масштабировать, которую она отображает? У меня не помещается изображение. Т.е. я сканирую код, все работает, но навести реально не получается — отображает верхний левый кусок картинки.
P.S.
Просто это единственная нормальная компонента, которую я нашел для работы с qr-кодом 🙂
(70) borrman, не савсем вас понимаю. Можно скрин в студию?
(71)
ну вот как-то так
в толстом клиенте все корректно
а в тонком (в HTML) только часть ШК отображает. Чего сделать надо — не пойму.
(66) hachaturov,
Поместите руками вот это «Shakmaev.Decoder.dll» в вот сюда %SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe » и запустите .bat
У меня все заработало
Конпоненту для тонкого клиента зарегистрировал, написало «Типы зарегистрированы успешно». Запускаю обработку, в окне пустой квадрат, а при нажатии на «Старт» выдает сообщение: Произошла исключительная ситуация (htmlfile): Отказано в доступе.
Прилагаю скрин.
(74) dave2000,
ЗЫ: 1С с правами админа тоже запускал, не момогло.
(75) dave2000, скорее всего вы запускаетесь на сервере и у вас стоит запрет на использование ActiveX или других исполняемых скриптов. Чтобы это проверить зайдите в Internet Explorer и проверьте параметры безопасности
Добрый день, Александр. Пытаюсь настроить работу в тонком клиенте. Ситуация 100% как в (74) сообщении. Все зарегистрировалось успешно, но ошибка такая же как на скриншоте в 74 сообщении. ActiveX разрешил везде, где нашел (может быть выложите скриншот, где это сделать? там 4 зоны для всех нужно менять параметры?
Пытался сделать это на 2-х разных машинах.
1. Windows 8 планшет (где и предполагается потом ее основная работа). После установки всех разрешений браузер даже не начинает серфинг, а выдает сообщение о уязвимости машины. Результат — как на скриншоте в 74 сообщении.
2. Для удобства отладки решил сделать это сначала на рабоче машине (Windows XP). То же самое , но перед открытием формы выдается еще такое вот окно.
(74)(75) Проблема решилась?
(77) Rokky78, на Windows 8 работа компоненты не тестировалась. Тут сказать ничего не могу.
Однако, ошибка, вызванная в Windows XP как раз от того что в параметрах безопасности IE стоит запрет на ActiveX
(79)
Где снять этот запрет? Может я что-то не понимаю? Вот скрин, где меняю настройки. Может что-то не так?
(80) Rokky78, В свойствах Internet Explorer, вкладка Безопасность, кнопка Другой запретить или разрешить использование ActiveX (то есть убрать опцию «Предлагать»).
(81) Получилось запустить камеру на Win XP. Я когда первый раз пробовал все подряд разрешал, что относилось к ActiveX. На всякий случай, может кому пригодится. Нужно только одну настройку изменить «Использование элементов управления ActiveX, не помеченных как безопасные для использования (небезопасно)» и только для зоны «Интернет». Изменение для других зон этой настройки не помогает. Правда постоянно появляется предупреждение «Компьютер подвержен повышенному риску».
Само распознавание проверить не удалось. Камера, которая под рукой, дает очень нечеткое изображение. Обработка всегда возвращает -1.
В Windows 8 после аналогичных настроек с безопасностью проявились проблемы с камерой. Словом, на Win8 не работает.
Решил порыть еще в других направлениях, накопал библиотеку «Ozeki Camera SDK», слепил на основе примеров как раз то, что мне нужно было. Сканирует QR, EAN13, Code128 и еще кучу всего. Есть исходник и готовая программа, может кому пригодится, выложил тут:http://infostart.ru/public/359549/
—
RegAsm : error RA0000 : Не удалось найти входную сборку «.Shakmaev.TDecoder.dll
» или одну из ее зависимых сборок.
Пробовал
Поместите руками вот это «Shakmaev.Decoder.dll» в вот сюда %SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe » и запустите .bat
не помогло есть еще варианты?
Виндус 7 64 бита.
Не читает PDF417 на полисе ОМС ( он там не стандартный, не хватает завершающих вертикальных линий) BarcodeScaner на Андроид читает без проблем.
Можно ли использовать компоненту для распознания ШК в уже отсканированных картинках?