Документооборот КОРП, ДГУ
30.03.2016

Как подменить механизм распознавания штрихкодов

Общее описание

Механизм распознавания штрихкодов нужен для потокового сканирования. Потоковое сканирование – это массовый ввод документов (со сканера или из каталога со сканированными изображениями) с автоматическим прикреплением сканированных изображений к карточкам документов (входящих, исходящих, внутренних). Прикрепление к документам осуществляется как раз на основании штрихкода, находящегося на отсканированном изображении (на том же листе, что и текст документа, или на отдельном листе, или на наклейке поверх листа документа).

Обратите внимание:
Важно отличать распознавание штрикхода на картинке (используется в потоковом сканировании) от сканирования штрихкода с помощью ручного сканера штрихкодов (в "1С:Документообороте" такое сканирование используется для интерактивного открытия карточки выбранного документа).

Также не надо путать распознавание штрихкодов и распознавание текста (распознавание текста используется для получения текста с картинки, чтобы в дальнейшем использовать его в полнотекстовом поиске).

Основная логика механизма распознавания штрихкодов находится в общей форме ПотоковоеСканирование.

Возможны два варианта работы распознавания:

Встроенная компонента распознавания штрихкодов работает только с штрихкодами формата EAN-13.

Важная особенность: если сканированные изображения находятся в pdf-файлах, понадобится установка бесплатных программ ImageMagick и GhostScript (на клиенте, на той машине, где будет запускаться потоковое сканирование).

Зачем нужна подмена механизма распознавания штрихкодов

Подмена может понадобиться в следующих случаях:

Чем можно заменить механизм распознавания штрихкодов

Нужно найти подходящую вам библиотеку С++,С# и т.д., скажем zxing от Google или какую то иную (необходимо смотреть на правила лицензирования – полностью ли бесплатна компонента или с ограничениями), и сделать внешнюю компоненту для использования в "1С:Документообороте". Для реализации внешней компоненты нужно иметь опыт разработки на C++.

Если вы планируете использовать библиотеку, реализованную как ActiveX-объект, собственная внешняя компонента не нужна, просто используйте новый COMОбъект (это работает только под Windows).

Порядок действий при замене

  1. Разработанную вами компоненту нужно добавить в общие макеты. Добавляется zip файл – внутри dll – собственно компонента (или несколько dll – 32 и 64 бит для Windows, и 32 и 64 бит для Linux), и файл MANIFEST.XML.
  2. В общей форме ПотоковоеСканирование - Функция РаспознатьШтрихКодОднойКартинки вместо Если ТехнологияРаспознаванияШтрихкодов = ПредопределенноеЗначение("Перечисление.ТехнологииРаспознаванияШтрихкодов.Документооборот") Тогда - надо добавить свою ветку кода, скажем СтрокаВозврата = МояКомпонентаРаспознаванияШтрихкодов.РаспознатьШтрихкоды(ПутьФайлаКартинки);

Проверка работы компоненты

  1. Необходимо создать эталонную базу штрихкодов и файлов с текстом. Желательно не менее ста пар. То есть пары файлов, скажем 001.png, 001.txt, 002.png, 002.txt... (в 001.txt содержится штрихкод с картинки 001.png).
  2. Написать код для прогона всех эталонных картинок (выполняете распознавание штрихкода картинки и сравниваете его с эталоном в текстовом файле). Этот прогон надо делать при каждой пересборке компоненты. Чтобы убедиться, что ваше последнее исправление не испортило распознавание ранее успешно распознанных картинок.
  3. Помимо проверки распознавания нужно убедиться, что нет утечек памяти или ресурсов Windows (GDI handles, User objects). Для этого необходимо в цикле выполнить распознавание как минимум тысячи картинок (можно одной и той же картинки). Также надо смотреть, не препятствует ли работа компоненты работе сервера (где работает сервер "1С:Предприятия" и возможно, еще SQL-сервер).