Документооборот КОРП, ДГУ
30.03.2016
Как подменить механизм распознавания штрихкодов
Общее описание
Механизм распознавания штрихкодов нужен для потокового сканирования. Потоковое сканирование – это массовый ввод документов (со сканера или из каталога со сканированными изображениями) с автоматическим прикреплением сканированных изображений к карточкам документов (входящих, исходящих, внутренних). Прикрепление к документам осуществляется как раз на основании штрихкода, находящегося на отсканированном изображении (на том же листе, что и текст документа, или на отдельном листе, или на наклейке поверх листа документа).
Обратите внимание:
Важно отличать распознавание штрикхода на картинке (используется в потоковом сканировании) от сканирования штрихкода с помощью ручного сканера штрихкодов (в "1С:Документообороте" такое сканирование используется для интерактивного открытия карточки выбранного документа).
Также не надо путать распознавание штрихкодов и распознавание текста (распознавание текста используется для получения текста с картинки, чтобы в дальнейшем использовать его в полнотекстовом поиске).
Основная логика механизма распознавания штрихкодов находится в общей форме ПотоковоеСканирование.
Возможны два варианта работы распознавания:
- с использованием встроенной компоненты распознавания штрихкодов,
- с использованием ABBYY Recognition server (в этом случае надо приобрести ABBYY Recognition server).
Встроенная компонента распознавания штрихкодов работает только с штрихкодами формата EAN-13.
Важная особенность: если сканированные изображения находятся в pdf-файлах, понадобится установка бесплатных программ ImageMagick и GhostScript (на клиенте, на той машине, где будет запускаться потоковое сканирование).
Зачем нужна подмена механизма распознавания штрихкодов
Подмена может понадобиться в следующих случаях:
- Вас не устраивает качество существующего механизма: например, не на всех картинках распознается штрихкод (с использованием встроенной компоненты), а приобретать ABBYY Recognition server вы или ваш заказчик не хотите.
- Вы хотите сделать регламентное задание, которое бы работало на сервере, выполняло автоматическую загрузку картинок и привязку по штрихкоду к документам. Ведь встроенная компонента распознавания штрихкодов есть только в 32-битном варианте, и не работает на 64-битном сервере "1С:Предприятия").
- Вам необходимо распознавание штрихкодов в формате не EAN-13, а скажем Code39 (например, при интеграции "1С:Управление торговлей" с "1С:Документооборотом").
Чем можно заменить механизм распознавания штрихкодов
Нужно найти подходящую вам библиотеку С++,С# и т.д., скажем zxing от Google или какую то иную (необходимо смотреть на правила лицензирования – полностью ли бесплатна компонента или с ограничениями), и сделать внешнюю компоненту для использования в "1С:Документообороте". Для реализации внешней компоненты нужно иметь опыт разработки на C++.
Если вы планируете использовать библиотеку, реализованную как ActiveX-объект, собственная внешняя компонента не нужна, просто используйте новый COMОбъект (это работает только под Windows).
Порядок действий при замене
- Разработанную вами компоненту нужно добавить в общие макеты. Добавляется zip файл – внутри dll – собственно компонента (или несколько dll – 32 и 64 бит для Windows, и 32 и 64 бит для Linux), и файл MANIFEST.XML.
- В общей форме ПотоковоеСканирование - Функция РаспознатьШтрихКодОднойКартинки вместо Если ТехнологияРаспознаванияШтрихкодов = ПредопределенноеЗначение("Перечисление.ТехнологииРаспознаванияШтрихкодов.Документооборот") Тогда - надо добавить свою ветку кода, скажем СтрокаВозврата = МояКомпонентаРаспознаванияШтрихкодов.РаспознатьШтрихкоды(ПутьФайлаКартинки);
Проверка работы компоненты
- Необходимо создать эталонную базу штрихкодов и файлов с текстом. Желательно не менее ста пар. То есть пары файлов, скажем 001.png, 001.txt, 002.png, 002.txt... (в 001.txt содержится штрихкод с картинки 001.png).
- Написать код для прогона всех эталонных картинок (выполняете распознавание штрихкода картинки и сравниваете его с эталоном в текстовом файле). Этот прогон надо делать при каждой пересборке компоненты. Чтобы убедиться, что ваше последнее исправление не испортило распознавание ранее успешно распознанных картинок.
- Помимо проверки распознавания нужно убедиться, что нет утечек памяти или ресурсов Windows (GDI handles, User objects). Для этого необходимо в цикле выполнить распознавание как минимум тысячи картинок (можно одной и той же картинки). Также надо смотреть, не препятствует ли работа компоненты работе сервера (где работает сервер "1С:Предприятия" и возможно, еще SQL-сервер).