Как реализовать распознавание QR-кодов на сканах документов в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Автоматизация потокового ввода документов — одна из наиболее востребованных задач в среде 1С. Основная идея заключается в том, чтобы оператор мог положить пачку документов в поточный сканер, а система сама распределила полученные изображения по соответствующим объектам базы данных (например, прикрепила скан реализации к соответствующему документу РеализацияТоваровУслуг). Ключевым звеном в этой цепочке является распознавание идентификатора, зашифрованного в QR-коде или штрихкоде. В этой статье мы подробно разберем несколько подходов к решению этой задачи: от использования бесплатных библиотек до облачных сервисов 1С. Для практической реализации такого сквозного процесса можно использовать решение для штрихкодирования входящих документов и загрузки сканов в 1С.

Вариант 1: Использование связки ImageMagick и Zbar

Это классический путь, который часто выбирают разработчики для реализации бюджетного решения. Суть метода заключается в двухэтапной обработке изображения. Сначала мы подготавливаем картинку, а затем передаем ее специализированному декодеру.

Рассмотрим процесс подробнее:

  1. Предварительная обработка (Preprocessing): Сканы часто бывают зашумленными, серыми или перекошенными. Библиотека ImageMagick позволяет через командную строку выполнить бинаризацию изображения (перевод в строгий черно-белый формат), очистку от мелких точек и поворот.
  2. Распознавание: Подготовленный файл передается утилите Zbar. Она также вызывается через командную строку или COM-объект и возвращает текстовое содержимое найденного QR-кода.

Проанализируем пример кода на языке 1С, который управляет этим процессом через запуск внешнего приложения:


КомандаЗапуска = """C:\Program Files\ZBar\bin\zbarimg"" --raw -q """ + ПутьКФайлуКартинки + """";
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);
// Результат обычно считывается из текстового файла, куда Zbar перенаправляет вывод

Важный нюанс: для стабильной работы Zbar требуется разрешение сканирования не менее 300 DPI. При меньшем разрешении мелкие модули QR-кода могут сливаться, что сделает распознавание невозможным.

Вариант 2: Использование штатных сервисов 1С

Если мы не хотим заниматься поддержкой стороннего софта на сервере, стоит обратить внимание на нативные решения от фирмы 1С. В последние годы активно развивается сервис 1С:Распознавание первичных документов.

Выясним преимущества этого подхода:

  1. Интеграция: Сервис уже встроен во многие современные конфигурации (БП 3.0, УНФ, ERP).
  2. Интеллектуальный анализ: Система не просто ищет QR-код, она способна распознать текст документа, сопоставить номенклатуру, контрагентов и суммы.
  3. Облачная обработка: Все тяжелые вычисления происходят на серверах 1С, что снимает нагрузку с локального сервера.

Для использования этого метода в коде вызываются методы специализированных библиотек стандартных подсистем (БСП). Основной объект для работы — Обработка.РаспознаваниеДокументов.

Вариант 3: Переход на штрихкоды EAN-13

Как показывает практика обсуждений на форумах, иногда использование QR-кода является избыточным. Если ваша задача — просто закодировать уникальный идентификатор документа (например, его внутренний номер), можно использовать стандартный штрихкод EAN-13.

Проанализируем, почему это может быть удобнее:

Вариант 4: Использование внешних компонент на базе .NET (ZXing.Net)

Для продвинутых разработчиков оптимальным вариантом будет создание или использование готовой внешней компоненты на технологии Native API, использующей библиотеку ZXing.Net (Zebra Crossing). Это позволяет избежать «мигающих окон» командной строки и работать с изображением напрямую в памяти. Для готовой реализации считывания штрихкодов и QR-кодов из графических файлов и PDF можно использовать инструмент для чтения штрихкодов и QR-кодов из PDF и изображений.

Разберем алгоритм работы с такой компонентой:

  1. Подключение компоненты через УстановитьВнешнююКомпоненту или ПодключитьВнешнююКомпоненту.
  2. Передача двоичных данных картинки в метод компоненты.
  3. Получение массива строк (если на странице несколько кодов).

Пример вызова в коде:


Попытка
    ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаРаспознаванияQR", "QRScan", ТипВнешнейКомпоненты.Native);
    Сканер = Новый("AddIn.QRScan.BarcodeReader");
    Результат = Сканер.Распознать(ДвоичныеДанныеФайла);
Исключение
    Сообщить("Не удалось подключить компоненту распознавания");
КонецПопытки;

Проблема многостраничных документов

При потоковом сканировании возникает вопрос: как понять, где заканчивается один документ и начинается другой? Рассмотрим стандартную логику решения этой проблемы:

  1. Листы-разделители: Перед каждым документом кладется специальный лист с очень крупным кодом. Система, встречая его, понимает, что все последующие страницы относятся к новому объекту.
  2. QR на каждой странице: Более надежный метод. На каждом листе документа в одном и том же месте (например, в правом нижнем углу) печатается QR-код.
  3. Логика «принадлежности»: Программа анализирует страницы по порядку. Если на странице найден код, создается новый файл. Если кода нет — страница присоединяется к предыдущему найденному коду.

Посмотрим на пример логики обработки очереди изображений:


ТекущийДокументСсылка = Неопределено;
Для Каждого ФайлКартинки Из СписокФайлов Цикл
    СодержимоеКода = РаспознатьКод(ФайлКартинки);
    Если ЗначениеЗаполнено(СодержимоеКода) Тогда
        // Нашли новый QR - ищем документ в базе
        ТекущийДокументСсылка = ПоискДокументаПоДаннымКода(СодержимоеКода);
    КонецЕсли;
    
    Если ТекущийДокументСсылка <> Неопределено Тогда
        ПрикрепитьФайлКДокументу(ФайлКартинки, ТекущийДокументСсылка);
    КонецЕсли;
КонецЦикла;

Рекомендации по улучшению качества распознавания

Выясним, какие факторы критически влияют на успех автоматизации:

Подводя итог, можно сказать, что выбор решения зависит от бюджета и масштаба задачи. Для простых внутренних нужд связки Zbar + ImageMagick будет достаточно. Для серьезных корпоративных систем лучше использовать специализированные внешние компоненты или официальный сервис распознавания от 1С.

← На главную