1с распознавание штрих кода code128 на скане
Как подменить механизм распознавания штрихкодов
Общее описание
Механизм распознавания штрихкодов нужен для потокового сканирования. Потоковое сканирование – это массовый ввод документов (со сканера или из каталога со сканированными изображениями) с автоматическим прикреплением сканированных изображений к карточкам документов (входящих, исходящих, внутренних). Прикрепление к документам осуществляется как раз на основании штрихкода, находящегося на отсканированном изображении (на том же листе, что и текст документа, или на отдельном листе, или на наклейке поверх листа документа).
Обратите внимание:
Важно отличать распознавание штрикхода на картинке (используется в потоковом сканировании) от сканирования штрихкода с помощью ручного сканера штрихкодов (в «1С:Документообороте» такое сканирование используется для интерактивного открытия карточки выбранного документа).
Также не надо путать распознавание штрихкодов и распознавание текста (распознавание текста используется для получения текста с картинки, чтобы в дальнейшем использовать его в полнотекстовом поиске).
Возможны два варианта работы распознавания:
Встроенная компонента распознавания штрихкодов работает только с штрихкодами формата EAN-13.
Важная особенность: если сканированные изображения находятся в pdf-файлах, понадобится установка бесплатных программ ImageMagick и GhostScript (на клиенте, на той машине, где будет запускаться потоковое сканирование).
Зачем нужна подмена механизма распознавания штрихкодов
Подмена может понадобиться в следующих случаях:
Чем можно заменить механизм распознавания штрихкодов
Нужно найти подходящую вам библиотеку С++,С# и т.д., скажем zxing от Google или какую то иную (необходимо смотреть на правила лицензирования – полностью ли бесплатна компонента или с ограничениями), и сделать внешнюю компоненту для использования в «1С:Документообороте». Для реализации внешней компоненты нужно иметь опыт разработки на C++.
Если вы планируете использовать библиотеку, реализованную как ActiveX-объект, собственная внешняя компонента не нужна, просто используйте новый COMОбъект (это работает только под Windows).
Девопсы в 1С: микросервис распознавания штрихкодов
«Мы словно живём в комнате, где на стене висит плакат. Уставимся на него и думаем, что это и есть весь мир. Комната. И плакат. На плакате что-то симпатичное: пейзаж, знаменитость. Как в том фильме про тюрьму. Как же он назывался? Комната — тюремная камера. А картинку каждый из нас видит по-своему. Она может быть прекрасной или ужасающей, но все мы к ней прикованы. Но это всё неправда: лишь ширма, скрывающая истину. Они нам врут. Мы врём самим себе. Комната — не весь мир. Мир намного больше, намного удивительнее. Плакат на стене скрывает лаз, ведущий в реальный мир. Мы ощущаем себя в безопасности в той комнате. Но иногда. Иногда нечто выползает из-за плаката. И каждый, кто становится тому свидетелем, в страхе пытается забыть о том, что видел.»
— Джесси Фейден, Control
Итак, одеваем свой фурсьюит и ставим задачу:
Есть база 1С, в которой есть документы, к которым привязаны штрихкоды. Для простоты возьмём EAN13, но вообще более перспективными выглядят QR.
Штрихкоды печатаются в печатных формах, а еще есть возможность печатать их на этикетках и лепить на готовые бумажные документы.
Обе эти задачи решаются тривиально, например, с помощью специального шрифта для печати EAN13 и дополнительного реквизита.
Но теперь, после того, как эти распечатанные документы подписали, мы хотим их засунуть обратно в 1С. Для хранения файлов в БСП есть готовые средства, соответственно, они присутствуют во всех типовых конфигурациях.
Будем считать, что пользователь кладет в сканер сразу все листы, относящиеся к одному документу. Например, это может быть счет на трёх страницах, коммерческое предложение и прайс. Условимся, что весь этот пакет будет отсканирован в один PDF-документ (для удобства дальнейшего использования).
Теперь у нас получилась папка с pdf-файлами, в которых содержатся сканы документов со штрихкодами. Нужно распознать штрихкоды и привязать их к документам. Естественно, часть про привязать находится на стороне 1С, но что с распознаванием?
Варианты примерно следующие:
Собственно, третьим вариантом и попробуем воспользоваться. А так как сейчас довольно популярен Python, и я про него практически ничего не знаю, то я попробовал решить эту задачу с его помощью.
Архитектура будет такая:
в одной локальной сети стоит три машины:
Что понадобится для реализации?
Питон вроде бы устанавливается вместе с IDE, но можно скачать c https://www.python.org/downloads/
Следующие три компонента устанавливаются с помощью пакетного менеджера:
pip install flask
pip install pyzbar
pip install pdf2image
К сожалению, так как на самом Питоне написано ничего, то для работы нужно установить некоторые компоненты. В нашем случае пришлось установить http://blog.alivate.com.au/poppler-windows/, распаковать архив и прописать путь к папке bin в переменную окружения PATH (у меня Windows).
Собственно, все эти библиотеки я нашел за 20 минут гуглежа, думаю, есть варианты и получше, но важен сам принцип.
Во фласке методы REST API прописываются с помощью так называемых роутов, выглядит похоже на 1С:
Теперь осталось сохранить указанную страницу файла, путь к которому получили, и распознать с неё штрихкод EAN13.
За сохранение страницы как раз отвечает pdf2image, и делает это с помощью единственного вызова:
За распознавание штрихкода отвечает pyzbar:
Как выяснилось, decode в качестве параметра принимает объект типа Image, и convert_from_path возвращает объект типа Image, но это разные Image 🙁
В процессе выяснилась странная особенность то ли Flask, то ли не знаю чего: нельзя передать слэш (разделитель пути) даже в виде url-кода %2F. Поэтому я его заменил на |:
Вот пример изображения:
Для случая, когда папка недоступна, нужны доработки: 1С будет отправлять двоичные данные, а сервер на Питоне будет распознавать штрихкод из них. Для этого в pdf2image уже есть convert_from_bytes, и еще нужно выяснить, как объект-изображение из pdf2image преобразовать в изображение pyzbar. Заглушки в коде я уже поставил 😉
PS. Спросите, причем тут девопс? Ну так нужно этот скрипт на питоне положить в Docker, вот и всё!
PPS. Прошу пинать, так как всё натыкано мышкой как попало, хотелось бы привести всё в нормальный вид, а опыта работы с Питоном, Гитом и Докером особо нет.
Штрихкодирование входящих документов с дальнейшим распознаванием и загрузкой скана в 1С
Цели внедрения штрих кодов в компании:
— сокращение затрат на ведение электронного архива документов
— повышения качества архива
Описание:
Этикетка:
Формат штрих кода: Code 128 позволяет создать уникальную этикетку организации, т.к. входящие документы могут иметь свои штрих-коды. Значение этикетки состоит из префикса + цифровой номер. Пример «ЙЙЙЙ123456789».
Размер: требование не должно занимать много места при устойчивом считывании и распознавании. По результатам теста получили ширина 55мм высота 15мм.
К этикеткам были выдвинуты условия долговечности, поэтому термопечать сразу отпала. Вариант термопереноса не плох, но дороговат: примерная стоимость 1 этикетки 50 копеек. Заказ в типографии при объемах в 400 тыс. позволил получить стоимость 1 этикетки = 13 копеек. (стоимость указана на 01.05.2015г.)
Этикетки заказаны в рулонах по 2 тыс. этикеток.
Рабочее место пользователя:
Для работы с штрих-кодом на рабочее место пользователей, работающих с входящими документами, установлены сканеры штрих-кода.
Обработка документа
В ходе обработки первичного документа значение этикетки считывается сканером штрих-кода и присваивается документу в системе. Таким образом мы получаем связь первичного документа с документом в системе.
Далее документы передаются в архив, где сканируются и архивируются.
Отсканированные файлы автоматическое регламентное задание распознает и прикрепляет в систему.
По итогам дня сотруднику архива приходит уведомление о зарегистрированных и не отсканированных документах.
Применяемые методы:
1) Подключение сканера штрих кода
— имеется типовое решение по подключению торгового оборудования, всю необходимую информацию можно найти на сайте поддержки 1С.
2) Распознаем сканированый документ.
Распознавание происходит автоматически с заданным интервалом на сервере 1С.
При этотм большинство операций выполняют внешние приложения. Для запуска на сервере 1С используем объект Wscript.Shell
Пример запуска файла.bat
В зависимости от формата сканирования может созникнуть необходимость перевода файла распознавания из PDF=>JPG.
Используем GhostScript (www.ghostscript.com/)
Строка запуска с параметрами
Сотрудник сканирует документ с заданными параметрами в определённый каталог. Т.К. сканированный оригинальный документ имеет большие размеры а место на диске надо экономить перед заугрзкой файла в хрнилище используем GhostScript.
СтрокаЗапуска = «@»»» + ПутьОбработкаДЛЛ +»»»»+» »
+»»»»+ПутьФайлРаспознавания +»»»»;
Повышение вероятности распознавания
Возможные ошибки при распознавании:
— оптическое искажение, изломы, кривость наклейки.
При правильной (ровной) наклейки штрих кода данной проблемы почти не встречается. Работаем с персоналом на предмет правильной наклейки штрих кода, согласно инструкции.
— грязь, помехи при сканировании, сканирование копии.
Для обработки файла используем приложение Image Magick, которое также запускаем посредством командной строки.
Параметры Image Magick: (http://www.imagemagick.org/)
В обработке возможно просмотреть конкретные примеры выбора параметров.
Данная обработка распознает штрих код из *.pdf файла, на выходе получаем список файлов и штрих кодов.
Для распознавания из формата PDF необходимо скачать приложение Image Magick и ghostscript и указать до них путь. Без данных приложений распознавание будет только из файлов jpg.
Компонента распознавания штрихкодов
Добрый день, коллеги
Кто-нибудь разбирался что за компонента используется в документообороте для распознавания штрих. кодов? Это разработка самой 1С или чья то сторонняя? Как найти документацию по ней.
Пытаюсь настроить новый шаблон для распознавания штрихкода, но он все никак не распознает, то ли с местоположением проблема, то ли с самим штрих. кодом.
Кто-нибудь знает как добыить инфу по компоненте?
Спасибо, а описание этой компоненты можно найти то?
Да методы то там немудреные, все более менее ясно, только вот даже сделанные документооборотом ШК что-то не распознает, какие бы настройки положения не задал.
А вообще эта компонента насколько стабильно распознает? Сильно стабильность зависит от настроек положения ШК? И насколько ABBYY лучше это делает, ведь такой вариант тоже есть в документообороте
Не совсем понятно: штрихкод стандартный настроили (EAN13, EAN128) или придумали свой?
Если свой, то какую стандартную схему для «дешифровки» выбрали?
А дешифровка по стандартному набору вшита в драйвера сканеров штрихкодов.
Посмотрите по документации какие виды штрихкодов считывает Ваш сканер и используйте для кодировки этот тип штрихкода.
Нужно распознать штрихкод из изображения, без сканера, программно
Вот и поставили задачу разобраться с компонентой документооборота
ABBYY:
В процессе регистрации автоматически выполняется генерация сквозных регистрационных номеров по сложным правилам. Кроме того, каждому документу в системе автоматически присваивается штрихкод. Сформированный штрихкод можно распечатать на отдельном листе или поверх титульного листа бумажного документа, распечатать на наклейке или вставить в электронный документ как изображение. Штрихкоды используются в дальнейшем для быстрого поиска учетных карточек документов и при потоковом сканировании для автоматического прикрепления файлов к документам.
**********************************
В топике вопрос про шаблон штрихкода, которые не срабатывает!
потому и было сделано предположение, что неверно запрограммирован шаблон
Типы штрихкодов:
Одномерные: Check Code 39, Check Interleaved 25, Code 128, Code 39, EAN 13, EAN 8, Interleaved 25, CODABAR (без контрольной суммы), UCC Code 128, Code 2 of 5 (Industrial, IATA, Matrix), Code 93, UPC-A, UPC-E, Postnet.
Двумерные: PDF 417.
**********************************
«Так как потоковая загрузка со сканера выполняется автоматически, для определения штрих-кода требуется очень высокое качество распознавания отсканированных изображений.
180.000 до 600.000 в зависимости от объемов, но единовременный платёж.
Рекомендую MessagingToolkit-Barcode
Бесплатная библиотека с примерами.
Прошу простить, если не в тему:
Можно к 1С подключить такую штуку?:
v7: Как напечатать штрихкод Code-128
(8) Может сканер быть запрограммирован на определённый код. Обычно есть такая возможность в настройках сканера.
Мало того, такие же сканера без перенастройки прекрасно читают штрих-код например мобильного телефона (EAN-13) и его же телефона IMEI.
447402-51-543765-0
35-209900-176148-23
35-209900-176148-1
(21) Сканер Honeywell Voyager MS9540. «Книжечки» нет, приложили диск, где никаких кодов настроек нет. Есть «книжечка» от предыдущего сканера 9540.
Непонятно, как записать мой код 30156.08.148933 (или другие)
(29) Обработка, формирующая EAN13 занимает действительно около «экрана». Это в (14)!
Трудности с обработкой для Code 128:
(39) религия не позволяет. а потом другим прогам в ваших перлах разбираться и материться, если заказчик захочет другой тип кода??
баркоде это штатная хрень к 1с. входит в состав ТиСа.
(40) а чего ты удивляешься? у меня был клиент (правда недолго). взял нового админа на работу. тот начал с того что написал докладную что «при работе 1С активно используются сторонние библиотеки, что грозит безопасности фирмы». Директор махнул шашкой и через пару дней получил страйк почти всего персонала.
пропали такие любимые плюшки :
1. автоотправка почты прямо из 1С
отматали всё взад, админа шуганули, но он падлюка подставил меня по другому (на бекапе) и с фирмой я расстался
Возможно, не совсем точное название темы сбивает с содержания обсуждения.
Мне надо СФОРМИРОВАТЬ код 128 по строке данных, а затем напечатать его. Когда код готов, он и читается и печатается!