Загрузка по штрих-коду отсканированных файлов в 1С

02.09.15

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

В этой публикации я хочу рассказать о примерах.
1. Чтение штрих-кодов с изображений. Как можно преобразовывать изображения для лучшего считывания штрих-кодов.
2. Распознавание текста на изображении.
3. Отображение прогресса при выполнении кода на сервере.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Внешняя обработка для загрузки
.epf 14,22Kb
58
58 Скачать (1 SM) Купить за 1 850 руб.
Отчет по прикрепленным
.erf 7,49Kb
15
15 Скачать (1 SM) Купить за 1 850 руб.

Для чего это можно использовать? Например:

 

  1. Менеджеры сдают в бухгалтерию первичные документы: оригиналы счетов-фактур, товарных накладных, актов, ТТН и т.д. Бухгалтерия проверяет оформление первичных документов и отмечает, что комплект документов сдан менеджером. Контроль сданных первичных документов лежит на бухгалтере и отнимает ресурсы. Решение: присоединенные по штрихкоду отсканированные документы можно контролировать, сформировав отчет.

 

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

 

Используемое ПО:

 

Платформа 8.3.6.2152

Конфигурация Управление торговлей, редакция 11.1 (11.1.10.94)

Сервер 1С x32  Linux Debian

Серыер СУБД x64 Postgresql 9.2


Необходимые пакеты на сервере 1С под Linux.

  1. ImageMagick 6.7.7-10 2014-03-08 Q16 http://www.imagemagick.org. С помощью ImageMagick будем выполнять преобразования изображения.
    Для установки ImageMagick выполнить команду в терминале sudo apt-get install imagemagick

  2. Zbarimg. http://zbar.sourceforge.net/. Чтение штрих-кодов на изображениях.

  3. Tesseract OCR 0.10 https://code.google.com/p/tesseract-ocr/
    С этим пакетом мы будем распознавать текст на изображении, если штрих-код по какой-либо причине не прочитался, попытаемся распознать номер документа.
    Для установки выполнить команду в терминале sudo apt-get install tesseract-ocr. Для поддержки русского языка нужно скачать со страницы https://code.google.com/p/tesseract-ocr/downloads/list пакет Russian Language Data for Tesseract. В моем случае это https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.rus.tar.gz.
    Качаем на сервер 1С, выполнив команду:
    wget https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.rus.tar.gz
    С помощью Midnight Commander копируем содержимое папки tessdata архива в папку /usr/share/tesseract-ocr/tessdata/.

  4. GPL Ghostscript 9.05 (2012-02-08) debian :-( http://www.ghostscript.com/
    Будем конвертировать страницы из PDF файла в картинку JPG. Поставляется с системой.

 

Подготовка.

 

  1. Создаем общий ресурс на файловом сервере и монтируем его к каталогу на сервере 1С, потому что на сервере под Linux мы можем использовать только локальные пути. Создадим каталог на сервере 1С:

    mkdir /mnt/share/

    И примонтируем общий ресурс:

    mount -t cifs -o username=DOMAIN\\USER,password=PASSWORD,dir_mode=0777,file_mode=0777 //192.168.x.x/SHARE/ /mnt/share/

    Выделенное нужно подменить на необходимые значения.

    Для автоматического монтирования при перезагрузке сервера нужно эту команду прописать в файл /etc/rc.local.

 

  1. Настроим сканер: сохранение файлов на общий ресурс и качество сканирования: цветное; 400х400 dpi; Текст; PDF; Качество высокое.

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


Обработка в 1С.

Запуск обработки

Обработка подключается как дополнительная. Реализован запуск фонового задания, чтобы пользователь мог выполнять другую работу. Также реализовано отображение прогресса. Полный код, считаю, приводить бессмысленно, т.к. можно посмотреть в БСП. В двух словах - как это сделано.

 

Запуск фонового задания и отображение прогресса позаимствованы из библиотеки стандартных подсистем (2.3.1.75). Запускается фоновое задание с помощью метода: ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки. Пример реализации запуска фонового задания можно посмотреть в обработке БСП “ГрупповоеИзменениеРеквизитов”.

Отображение прогресса реализовано с помощью подключения обработчика ожидания и вызова метода ДлительныеОперации.СообщитьПрогресс и ДлительныеОперации.ПрочитатьПрогресс. Пример в обработке БСП “УдалениеПомеченныхОбъектов”.

 

Теперь об обработке отсканированных файлов.

Работа обработки

Все преобразования изображений происходят через временные файлы, которые после завершения обработки удаляются. Обработка происходит в цикле по массиву файлов, найденных в /mnt/share/.

Приступим.

Сконвертируем первую страницу pdf файла в jpg и будем работать уже с jpg файлом. Так удобнее.


gs -q -sDEVICE=jpeg -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 -r400 -sPAPERSIZE=a4 -sOutputFile=out.jpg in.pdf


В 1с вызываем так:

ЗапуститьПриложение("gs -q -sDEVICE=jpeg -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 -r400 -sPAPERSIZE=a4 -sOutputFile=" + ВремФайл + " " + Файл.ПолноеИмя, , Истина). Где ВремФайл - куда (jpg), а Файл.ПолноеИмя - откуда (pdf).


Параметры для gs. (Подробно тут: http://www.ghostscript.com/doc/9.06/Use.htm):

-q ‘quiet’ - уменьшает количество выводимых сообщений.

-sDevice - Выбор устройства, которое будет сохранять или отображать результат. Список доступных можно посмотреть в справке: gs --help.

-dBATCH -dNOPAUSE - Отключение интерактивного взаимодействия.

-dFirstPage=1 -dLastPage=1 - Страницы с и по.

-r400 - Разрешение изображения. Т.к. мы сканируем в 400DPI, то и конвертируем в такое же разрешение.

-sPAPERSIZE - Зададим формат листа.

-sOutputFile - Результирующий файл

 

Так как счет-фактура печатается в альбомной ориентации, а сканируется в портретной, то полученный jpg файл повернем на 90 градусов против часовой стрелки:

 

ЗапуститьПриложение("MAGICK_THREAD_LIMIT=1 convert -rotate -90 " + ВремФайл + " " + ВремФайл, , Истина);

 

MAGICK_THREAD_LIMIT - ставим ограничение на использование процессора чтобы не слишком сказывалось на работе пользователей в 1с.

-rotate -90  - поворот на 90 градусов против часовой стрелки.

 

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

 Обрезка штрихкода и номера

ЗапуститьПриложение("MAGICK_THREAD_LIMIT=1 convert -strip " + ВремФайл + " -crop 1200x450+200+80 +repage " + ИмяВременногоФайлаИзображенияКроп, , Истина);

-strip - не сохраняем данные профиля изображения.

-crop - область для вырезки. 1200х450 это размер вырезаемого изображения в пикселях. +200+80 это координаты, откуда отсчитывать размер вырезаемого изображения. Эти значения привязаны к разрешению изображения. Область для вырезки нужно взять с небольшим запасом, т.к. документы не всегда ровно захватываются податчиком на сканере или пользователь не аккуратно положит их.

+repage - После вырезки размер канваса оригинального изображения не изменяется. Этим параметром устанавливаем размер канваса к вырезанному размеру. Это как shrink БД.

 

Приступим к чтению штрихкода. Тут все просто. Zbarimg читает штрихкод и выводит результат в xml-файл.

 

ИмяВременногоФайлаXML = ПолучитьИмяВременногоФайла("xml");

ЗапуститьПриложение("zbarimg -q --xml " + ИмяФайлаИзображения + " > " + ИмяВременногоФайлаXML, , Истина);

 

Через ЧтениеXML считываем распознанный штрихкод из xml файла. Если считать штрихкод не удалось, например, плохое качество печати или сканера, присутствует шум на изображении, то попробуем уменьшить негативные факторы. Тут к нам на помощь приходит imagemagick с параметром motion-blur. Он сглаживает изображение сдвигая его под указанным углом. Подробнее тут http://www.imagemagick.org/Usage/blur/. Мы будем двигать вертикально.

 Blur штрихкода

ЗапуститьПриложение("MAGICK_THREAD_LIMIT=1 convert -strip -motion-blur 10x30-90 " + ИмяВременногоФайлаИзображенияКроп + " " + ИмяВременногоФайлаИзображенияБлур, , Истина);

 

-motion-blur radiusxsigma+angle - РадиусXОтклонение-Угол. С этими параметрами нужно экспериментировать.

И снова попытаемся считать штрихкод с помощью zbarimg из ИмяВременногоФайлаИзображенияБлур. Если считать не получилось, то пробуем распознать номер документа с помощью Tesseract OCR. Сначала вырежем область номера документа из изображения чтобы уменьшить количество распознаваемых символов и как следствие различного мусора в тексте.

Кроп номера

ЗапуститьПриложение("MAGICK_THREAD_LIMIT=1 convert -strip " + ИмяВременногоФайлаИзображенияКроп + " -crop 800x150+400+300 +repage " + ИмяВременногоФайлаИзображенияКроп, , Истина);

Сконвертируем в grayscale. Так лучше отрабатывает tesseract.

ЗапуститьПриложение("MAGICK_THREAD_LIMIT=1 convert " + ИмяВременногоФайлаИзображенияКроп + " -colorspace gray " + ИмяВременногоФайлаИзображенияКроп, , Истина);

И пробуем распознать номер

ЗапуститьПриложение("tesseract " + ИмяВременногоФайлаИзображенияКроп + " " + ИмяВременногоФайлаТекст, , Истина);

ИмяВременногоФайлаТекст - Текстовый файл для вывода результатов.


Распознанный текст

И тут мы должны найти в тексте номер документа. Я сделал так. Считываем построчно текст из файла. Каждую строку разбиваем на массив подстрок и проверяем элемент массива на длину. Номера счетов-фактур у нас содержат дату и номер. например: ТР1507250003. Если длина подходит, то пробуем найти документ по номеру.

Контроль присоединенных файлов можно выполнить с помощью отчета, который выбирает документы, если в присоединенных файлах отсутствует файл содержащий в наименовании определенный текст. Например “Комплект документов”. Это наименование мы задаем при присоединении файла к документу.

Отчет

Предлагаемая обработка без доработок подойдет не каждому, т.к. многое зависит от качества принтера, сканера и нумерации документов. Поэтому смотрите идеи и дорабатывайте под себя. Нужно отметить, что процент считываемых штрихкодов очень высок! И вообще переходите на электронный документооборот.

штрихкодирование linux imagemagick tesseract ocr

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141463    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    23984    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51177    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36568    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171154    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186854    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194949    150    243    

280

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в УПП 1.3 | из КА 2 в КА 1.1 | из КА 2 в УПП 1.3 | из КА 2 в УТ 10.3 | из ERP в КА 1.1 | из ERP в УТ 10.3 | из УТ 11 в УТ 10.3 | из УТ 11 в УПП 1.3 | из УТ 11 в КА 1.1 | Можно переносить только новые объекты, найденные в приемнике перезаписываться не будут | Есть фильтр по организации при выгрузке данных | Оперативно обновляем на новые релизы 1С

53111 47800 руб.

28.11.2015    83235    32    125    

64
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. anig99 2852 02.09.15 13:50 Сейчас в теме
Это хорошо (: У самого на уме такая же система только под windows как раз на zbar. Только в моем случае штрихкод уникален для каждого документа (точнее для каждой печ.формы документа). Штрихкод на каждой странице. Что это даёт? А то, что можно запихнуть пачку документов в потоковый сканер.
Вы, я так понимаю, используете простой сканер?


2. parshin 79 03.09.15 06:03 Сейчас в теме
(1) anig99,
Используем МФУ Kyocera 1135. Много туда не запихнёшь плюс не на всех печатных формах есть штрихкоды. Ну это только начало. Хотел поделиться идеями :-)
3. user722577 03.04.18 13:33 Сейчас в теме
JPG распознает норм, а при попытке распознать pdf выдает следующее:

zbarimg.exe: `%s': %s "gs" -q -dQUIET -dSAFER -dPARANOIDSAFE -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 "-sDEVICE=pnmraw" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" "-sOutputFile=C:/Users/Tsybizov/AppData/Local/Temp/magick-5mpt_501" "-fC:/Users/Tsybizov/AppData/Local/Temp/magick-VEk5vZUp" "-fC:/Users/Tsybizov/AppData/Local/Temp/magick-aVIF7DrV" @ utility.c/SystemCommand/1881.
ERROR: PostscriptDelegateFailed `F:\123.pdf': No such file or directory @ pdf.c/ReadPDFImage/611

Кто-нибудь может подсказать, в чем трабла?
4. user653054_ghevsam 28.05.18 11:58 Сейчас в теме
А это будет работать для платформы 8.2?
5. starik-2005 3087 28.05.18 12:55 Сейчас в теме
Я в свое время игрался с GOCR, который умеет даже UPC-128 распознавать, при этом он также умеет это все в XML выводить, что упрощает анализ. Я брал документ, отсканированный с разрешением 600 dpi, распознавал его, если ШК не было - крутил его imagemagick'ом на 90/270/180 градусов. Работало достаточно быстро, кстати. И ничего не вырезал, но если вырезать, то, полагаю, еще быстрее бы получилось обрабатывать.
6. GrafB 10 19.03.19 13:20 Сейчас в теме
добрый день, столкнулся с такой проблемой:
ЗапуститьПриложение("""C:\Program Files (x86)\ZBar\bin\zbarimg.exe"" -q --xml """ + ВремФайл + """ > """ + ВремФайлХМЛ + """",,Истина) чёрное окошко пробегает, но файл хмл не появляется. Отладчиком получаю подготовленный код, вставляю в командную строку, всё срабатывает. если вставляю в батфайл и делаю ЗапуститьПриложение(БатФайл,, Истина), то тоже срабатывает.
7. starik-2005 3087 19.03.19 13:50 Сейчас в теме
(6) как в вашей винде все сложно-то!!! ))) Установи zbarimg в каталог с латинским названием пути и без пробелов.
8. GrafB 10 19.03.19 14:57 Сейчас в теме
(7) и это не смотря на то что "ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.8-Q16\magick.exe"" ..." отрабатывает без проблем?
9. GrafB 10 21.03.19 11:45 Сейчас в теме
нет ни у кого идей? пришлось пока через батник сделать, его 1с без проблем запускает и результат появляется.
10. parshin 79 21.03.19 12:21 Сейчас в теме
(9) Идей нет. Но есть подобная реализация. Батник сначала распознает штрихкод. Потом файл идет на обработку где происходит оптимизация (уменьшение размера и качества до читабельного варианта. ШК ведь уже распознан). Обработанный файл кладется в отдельный каталог из которого 1С его забирает к себе и удаляет исходный файл. Батник работает по расписанию не зависимо от 1с. В 1С настроена регламентная задача для загрузки.
starik-2005; +1 Ответить
11. edd_n 05.03.23 09:19 Сейчас в теме
Странно, но команду ЗапуститьПриложение("zbarimg -q --xml " + ИмяФайлаИзображения + " > " + ИмяВременногоФайлаXML, , Истина); 1с на Win10 не отрабатывает. Возможно, с перенаправлением что-то не так. >> - Так ?
12. edd_n 05.03.23 09:23 Сейчас в теме
Так в Винде работает:

  ИмяФайлаИзображения = "C:\Users\Eduard\act_1.jpg";
    ИмяФайлаРаспознования = "C:\act_1.txt";
	
	ПутьКПрограммеРаспознованияШтрихкода = "C:\Program Files (x86)\ZBar\bin\";	
    СтрокаЗапуска = "cmd /c zbarimg.exe --raw   """ + ИмяФайлаИзображения + """ >> """ + ИмяФайлаРаспознования + """";
    КодВозврата = 0;                  
    ЗапуститьПриложение(СтрокаЗапуска, ПутьКПрограммеРаспознованияШтрихкода, Истина, КодВозврата);
Оставьте свое сообщение