Загрузка по штрих-коду отсканированных файлов в 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

См. также

Перенос данных 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 руб.

12.06.2017    142062    802    297    

423

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

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

35000 руб.

15.12.2021    24294    172    51    

131

Перенос данных 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 руб.

23.07.2020    51812    229    70    

187

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    171391    304    257    

380

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    36826    95    66    

92

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    83365    33    125    

65

Перенос данных 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 руб.

18.02.2016    187119    590    509    

528

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    195275    152    244    

282
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 3091 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 3091 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;                  
    ЗапуститьПриложение(СтрокаЗапуска, ПутьКПрограммеРаспознованияШтрихкода, Истина, КодВозврата);
Оставьте свое сообщение