Собственная реализация потокового сканирования для 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#.
Надеюсь, что данная разработка пригодится многим.
Проект был написан быстро и, в настоящий момент, успешно эксплуатируется.