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

02.09.15

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

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

Файлы

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

Наименование Скачано Купить файл
Внешняя обработка для загрузки
.epf 14,22Kb
61 2 500 руб. Купить
Отчет по прикрепленным
.erf 7,49Kb
15 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

 

  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! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    161095    970    321    

482

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188493    360    290    

419

SALE! 10%

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

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    34369    259    64    

195

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

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

50600 руб.

21.05.2019    58346    81    132    

73

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

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62963    82    133    

81

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    13547    15    8    

16

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

Перенос данных из ЗУП 3 в УПП 1.3 | Корректно переносится документ "Отражение зарплаты...", а также все кадровые и расчетные документы | Перенос разработан в формате КД 2 (правила конвертации данных) | Будет полезен предприятиям, которые ведут зарплатный учет в ЗУП 3, а регламентированный учет - в УПП 1.3 | Перенос можно проверить перед покупкой прямо на вашем сервере! Оставляйте заявку на проверку!

58000 руб.

13.10.2022    13367    20    58    

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


2. parshin 81 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 3272 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 3272 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 81 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;                  
    ЗапуститьПриложение(СтрокаЗапуска, ПутьКПрограммеРаспознованияШтрихкода, Истина, КодВозврата);
13. serg_info 117 21.03.25 16:12 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация