gifts2017

Собственная реализация потокового сканирования с распознаванием для 1С (1C Документооборот + C# )

Опубликовал Дмитрий (dvim) в раздел Программирование - Внешние компоненты

Нашей организации понадобилось хранить в системе документооборот подписанные акты и обеспечивать поиск по ним. Довольно часто эти документы мы ищем и предоставляем по  запросу.
Главное требование руководства – 0 трудоемкость для сотрудников.
Решение:  При выпуске актов печатаем на актах ШтрихКод (QR код), потом подписанные оригиналы сканируются на почту - далее все работает "Само".

Собственная реализация потокового сканирования для 1С

Данная статья написана про решение данной задачи для 1с Документооборот, но данное  решение работает для всех решений на 1С УФ с БСП.

 После внедрения документооборота неожиданно выяснилось, что документы не могут сами отсканироваться и корректно разместиться в системе, это надо делать человеку.

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

Архив ведется   далеко не по всем документам – так как сканировать и размещать документы, заполняя карточки, банально некому.

Нашей организации понадобилось хранить и обеспечивать полнотекстовый поиск  по подписанным клиентами актам. Довольно часто эти документы мы предоставляем по  запросу налоговым (да и самим контрагентам) ВЭД это такой ВЭД…

 

Главное требование руководства – 0 трудоемкость для сотрудников.

90% Актов у нас выпускается в собственной системе УУ (C#+MSSQL) , 10% - в 1С.  

(Хотели перейти на УПД, объединяющий акт и СФ и печатать единый документ в 1с, но столкнулись с нежеланием клиентов, а  клиент для нас  - это всё )

 Решение:  При выпуске актов печатаем на актах Штрихкода.

Для  .Net выбрали генерацию QRкода (он лучше всех переносит смятие), для 1С реализовали печать в отчете стандартного code128.
Для формирования QRcode и для распознавания использовали библиотеку MessagingToolkit-Barcode.  Это порт на .Net известной библиотеки Zxing.   Мы ее широко используем для генерации штрихкод и их последующего сканирования, например, с фотографий, сделанных на фотоаппараты на улице.
После долгого изучения качество работы библиотеки было признано лучшим из всех бесплатных .Net Библиотек. (Хотя, для некоторых задач мы и используем метод последовательной проверки изображения целым набором библиотек, но статья не об этом)

 

После выпуска,  акты подписываются внутри компании и направляются  клиентам. Клиенты подписывают акты, ставят печать и отправляют оригиналы нам. У нас акты запихиваются в МФЦ (Ксерокс – Сканер-Копир), там они сканируются пачкой и после этого появляются в документообороте с заполненной карточкой файла. 

В МФЦ настроена возможность отправлять документы сразу на указанный адрес, куда они отправляются виде 1 файла.

Такая логика потребовала некоторого усложнения программы  - разбивки присланного PDF документа на листы  и их независимой обработки.
Большие сканеры у нас настроены на сканирование пачки в 1 файл ,а перенастройка сканера – это квантовая механика для бухгалтерии.

 

Задача программы – читать почту, куда сканер шлет сканированные файлы, разбивать документы на страницы , распознавать штрихкод, получать из СУБД данные о акте, записывать распознанный акт и заполнять карточку документа полученными данными.

Если документ не распознался – он присылается почтой ответственному и его вносят руками.

 

 

Реализация:

Реализовать подобное решение можно массой способов. 

Чисто средствами  1с :
Регламентное задание, которое получает почту,  и полностью выполняет всю работу.

Модуль декодирования можно было сделать внешней компонентой, либо просто написать на ASP.Net http-сервис   для распознавателя.
Минус для нас – отсутствие достаточного количества времени у 1с специалиста, сложность отладки регламентных заданий. 

 

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

 - Через  написанный  и опубликованный веб сервис на 1с.  Наверно, это неплохое решение ,но мы  не пошли на него. Хотелось меньшей трудоемкости, а активное использование  веб-сервисов для двунаправленной интеграции с 1с у нас только начинается.

 

-Через работу по Com и вызов всех методов из .Net.  Способ знакомый и очень широко использующийся, в том числе и нами. Один из плюсов – не надо менять конфигурацию и получать заморочки при обновлении.

Но способ  медленный , плюс код записи файла в систему сложно переписать и отладить через COM.

 

Потому был выбран компромиссный метод.

В 1С был создан общий модуль и создана функция, принимающая имя файла и описание, необходимое для записи в карточку файла.

Из внешнего приложения по Com вызывается только эта  функция.

В будущем, думаю,  функция все таки  будет обернута в веб сервис.

 

Один из аргументов такого выбора -  дефицит 1С специалистов в компании. Часть задач выполняет аутсорс, помимо него есть только один специалист, который помимо 1с занимается еще большим количеством проектов. При этом с .Net программистами все гораздо лучше.

 

Часть 1 – написание кода для 1с.  Запись файлов в базу.

Особенность 1с УФ в том, что авторы находятся «в зуде поиска» часто перекраивая библиотеки стандартных функций . Если бы в дотнете  резко поменялись бы классы работы с файлами – я бы точно этого не понял, в этом вопросе нарушение совместимости в разных релизах 8.2 мне не очень нравится.   Приложенный в статье код работает на  конфигурации  документооборот (1.2.7.3) , код  примеров от более ранних релизов у меня не работал.

 

 

Создаем общий модуль  и в нем функцию ЗагрузкаФайла с возможностью Экспорта

 Данный код был найдет на одном из форумов и имеет корни в УТ, которая была написана на той же версии Платформы, что и Документооборот. Мной дописана возможность записи данных в структуру " Файлы->Папки"

Также используем «стандартные» функции Расширение , СоздатьФайл, СоздатьФайлСВерсией

Итог – мы получили  точку входа для работы с 1С.   Нам достаточно подготовить данные и вызвать эту функцию.  Вызов будет минимален и по размеру, и по времени.

 

 Часть 2 – написание кода для реализации своего варианта сканирования.

Язык C# cреда  VS2010  (Используем тип dynamic для простой и эффективной работой с 1С)

 

 Используемые библиотеки:

Для работы с 1С  comcntr.dll   Interop.V82  (COM обертка для работы с 1с, требует установленной платформы 1с )

Для работы с почтой мы используем библиотеку LumiSoft.Net .

Для распознавания Штрихкода используем библиотеку Messaging.Toolkit.Barcode

Для разбивки PDF документа на страницы используем библиотеку  PdfToImage

 

Полный код программы и используемые библиотеки  приложены к публикации.

Здесь я укажу только некоторые моменты.

 

MailDeveloper.cs – Класс который и осуществляет всю деятельность. Он перебирает всю почту, проверяет ее источник (Спам обрабатывать не стоит, равно как и широковещательные сообщения).

Также в классе реализована очистка почтового ящика.

 

Все pdf файлы со сканера разбираются на набор Jpg страниц.  Далее идет процесс распознавания этих  файлов.  В случае успеха  - данные записываются в 1С , в случае неуспеха -  письмо с этим изображением отправляется пользователю.

 

В коде используется запрос к MS SQL c целью получения данных из системы УУ для документа.

 

К данному описанию прилагается написанный модуль  для 1с а также проект на c#.

Надеюсь, что данная разработка пригодится многим.

Проект был написан быстро и, в настоящий момент, успешно эксплуатируется.

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Исходный код проекта по распознаванию
.zip 12,27Mb
23.04.14
73
.zip 1 12,27Mb 73 Скачать
Код модуля 1с для работы приложения
.txt 8,50Kb
23.04.14
65
.txt 1 8,50Kb 65 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Максим (maxkisa) 25.04.14 14:33
Давно ждал, кто же напилит распознавание QR кода из PDF с множеством страниц :)
А то документооборот проштрихкодирован, а загрузка и распознавание все ни как не была реализована.. не до разборок с VS было.
Буду посмотреть.
2. Дмитрий (dvim) 25.04.14 14:51
Смотрите - если будут вопросы пишите, подскажу.
3. г. Казань Рустем Гумеров (Rustig) 21.07.14 11:07
(0) интересно. а на стороне 1С можно реализовать распознавание QR-кода? Можно ли миновать почтовую программу? Можно ли сразу от принтера-сканера (МФУ) отправлять файл сразу в папку 1С? Для чего почта используется в этой цепочке?
4. Дмитрий (dvim) 21.07.14 11:16
На стороне 1с можно через внешнюю компоненту, либо через веб сервис.
В папку 1с тоже можно отправлять.

У нас почта используется, так как часто сканирование осуществляется в удаленных подразделениях, где нету сетевого доступа.
5. vers139 (vers139) 03.10.14 16:29
(4) dvim, можете привести пример кода на 1С как использовать Toolkit как внешнюю компоненту?
6. Дмитрий (dvim) 04.10.14 08:33
Оно - не внешняя компонента.
Можно написать ВК, в которой "обернуть" библиотеку
7. Олег К. (kiberiq) 19.05.16 13:45
Код на 1С не полный. И где само распознавание QR-кода?
8. Дмитрий (dvim) 19.05.16 16:07
Само распознавание - в библиотеке Messaging.Toolkit.Barcode
на 1с только часть кода, остальное работает под с# (что и написано)
Ибо на 1с разбить многостраничный пдф оказалось сложно.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа