Сканирование из Linux в 1C:Документооборот
Функциональные - Документооборот и делопроизводство (СЭД)
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
При переводе организации на российское ПО столкнулся с неожиданной проблемой, не хочет 1С:Документооборот 2.1 сканировать в Astra Linux версии 1.8. Компонента сканирования версии 3.0.1.1033 (из БСП 3.1.12.335), последняя на тот момент, находила библиотеку сканирования libastra-sane-manager.so и не работала, до вызова стандартной библиотеки libsane.so дело не доходило. Через механизм диверта (dpkg-divert), отключил библиотеку Астры, список сканеров на форме настройки получил, но дальше дело не сдвинулось, или просто не сканирует, или клиент вылетает с ошибкой `kernel: traps: 1cv8c[31885] general protection fault.` Идею решения позаимствовал у коллеги //infostart.ru/1c/tools/2678469/, но только саму идею, реализация своя.

Решение такое, расширением садимся на все методы работы с компонентой сканирования и проверяем ОС клиента, если Windows, то сразу выходим, если Linux, то вызываем свой функционал. Всю логику завязываем на утилиту scanimage — это консольная утилита из проекта SANE (Scanner Access Now Easy). Вместо компоненты TWAIN используем общую форму ССДЛ_АдаптерСканированияLinux, код работы с утилитой расположен в модуле ССДЛ_СканированиеLinuxКлиент.

Утилита scanimage обычно уже установлена, но если нет, то ставится из пакета sane-utils.
Командой `scanimage -f "%d\t%v\t%m\t%n"` получаем список доступных сканеров.
Свойства сканера: `scanimage -d <устройство> -A`
Ну и само сканирование: `scanimage -d <устройство> --format=png --mode Gray --resolution 300 --source ADF -l 0 -t 0 -x 210 -y 297 --batch=ssdl-<uuid>-p%04d.png`

Вот пример команды сканирования, например в цвете (`--mode Color`), параметр `--batch` сохраняет каждую страницу в отдельный файл.

Штатная компонента, даже под Windows, не всегда корректно определяла источник сканирования, встречал проблемы в некоторых версиях. Для Linux решил сделать автоопределение, при котором производится попытка сканирования с двустороннего автоподатчика (`duplex`), потом обычного (`adf`, `feeder`), а потом уже со стекла (`flatbed`, `platen`), при наличии соответствующих источников в свойствах. Это немного замедляет процесс при сканировании со стекла, т. к. по остальным источникам будет получена ошибка с кодом 7 (SANE_STATUS_NO_DOCS) или `out of documents`, но практика показывает, что податчики используются чаще.
Проверено на следующих конфигурациях и релизах:
- Документооборот КОРП, релизы 2.1.36.3
- Документооборот КОРП, редакция 3.0, релизы 3.0.21.3
Вступайте в нашу телеграмм-группу Инфостарт