Общее описание
В составе БСП есть отличная компонента для работы со сканерами. Но основная ее проблема — это отсутствие поддержки 64-разрядной платформы. Решили исправить это ограничение, написав версию компоненты, т.к. уже есть опыт работы с PDF (Внешняя компонента печати PDF (Native Win 32/64)), заодно решили добавить поддержку этого формата. Работа с PDF основана на проекте PDFium из состава проекта Chromium/Chrome, для работы с TWAIN использован свободный проект twpp https://github.com/xricht17/twpp. https://github.com
Компонента полностью совместима с вызовами оригинальной компоненты из БСП, что позволяет легко и просто использовать ее как замену стандартной компоненты без всяких доработок.
В отличие от оригинальной данная компонента позволяет работать и в режиме сервера (если есть такая потребность), т.к. в нее добавлена функция, которая не использует внешние события, впрочем эту функцию удобно использовать и на клиенте через асинхронные вызовы, чтобы опять же не использовать внешние события.
Для подключения компоненты используются стандартные методы УстановитьВнешнююКомпоненту() на Клиенте в синхронном режиме, ПодключитьВнешнююКомпоненту() на Сервере или на Клиенте в синхронном режиме, и НачатьУстановкуВнешнейКомпоненты() и НачатьПодключениеВнешнейКомпоненты() на Клиенте в асинхронном режиме вызовов.
Перед началом работы на стороне клиента в асинхронном режиме необходимо вызвать установку компоненты:
НачатьУстановкуВнешнейКомпоненты(ОбработчикРезультата, АдресКомпоненты);
Далее необходимо ее подключить и можно вызывать ее методы:
НачатьПодключениеВнешнейКомпоненты(ОбработчикРезультата, АдресКомпоненты, "ScanAddIn");
Примерный код использования компоненты на стороне Клиента в асинхронном режиме может выглядеть так:
Перем мКомпонента;
&НаКлиенте
Процедура Сканировать(Команда)
Если мКомпонента = Неопределено Тогда
УстановитьКомпоненту(
Новый ОписаниеОповещения("СканироватьПродолжение", ЭтотОбъект));
Возврат;
КонецЕсли;
СканироватьПродолжение(Истина, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура СканироватьПродолжение(КомпонентаПодключена, ДополнительныеПараметры) Экспорт
Если НЕ КомпонентаПодключена Тогда
Возврат;
КонецЕсли;
Если мКомпонента = Неопределено Тогда
мКомпонента = Новый("AddIn.ScanAddIn.AddInNativeExtension");
КонецЕсли;
мКомпонента.НачатьВызовСканировать(Новый ОписаниеОповещения("СканироватьЗавершение", ЭтотОбъект),
ПоказыватьДиалог,
Устройство,
Формат,
Разрешение,
Цветность,
Поворот,
РазмерБумаги,
?(Формат = "TIF", СжатиеTIFF, КачествоJPEG),
ДвустороннееСканирование,
Путь,
Многостраничность);
КонецПроцедуры
&НаКлиенте
Процедура СканироватьЗавершение(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт
Если РезультатВызова <> Неопределено Тогда
МассивФайлов = СтрРазделить(РезультатВызова, "*", Ложь);
Для Каждого ИмяФайла Из МассивФайлов Цикл
ДобавитьОтсканированыйФайл(ЭтотОбъект, ИмяФайла);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКомпоненту(ОбработчикРезультата) Экспорт
Обработчик = Новый ОписаниеОповещения("УстановитьКомпонентуЗавершение", ЭтотОбъект, ОбработчикРезультата);
НачатьУстановкуВнешнейКомпоненты(Обработчик, АдресКомпоненты);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКомпонентуЗавершение(ОбработчикРезультата) Экспорт
НачатьПодключениеВнешнейКомпоненты(ОбработчикРезультата, АдресКомпоненты, "ScanAddIn");
КонецПроцедуры
Состав поставки
После покупки на почту придет файл архив.
В публикации на вкладке «Бесплатные файлы» представлены следующие дополнения:
- расширение Сканирование64.cfe, которое позволяет использовать данную компоненту практически в любой конфигурации, использующей БСП, без внесения изменений в основную конфигурацию и не снимая типовую конфигурацию с поддержки (в расширении отсутствует компонента, поэтому ее нужно загрузить в макет Скан64_КомпонентаTWAIN после покупки).
- обработка TestScan.epf, демонстрирующая функциональность данной компоненты (в обработке так же отсутствует компонента, поэтому ее нужно загрузить в макет после покупки).
Компонента работает как на x86, так и x86_64 платформах, в режиме Сервера, Тонкого клиента и Веб-клиента (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer), распространяется в виде пакетного файла, который содержит в себе все версии компоненты.
Методы:
Версия / Version() — вернет строку с описанием версии.
ВыбратьУстройство / SelectDevice() — откроет диалог (средствами драйвера TWAIN) и вернет строку с именем устройства.
НачатьСканирование / BeginScan(ОткрыватьДиалог, Устройство, Формат, Разрешение, Цветность, Поворот, РазмерБумаги, СжатиеКачество, ДвустороннееСканирование, Путь, Многостраничность) — выполнит сканирование и сохранит файл на диск, вернет Истина, если не было ошибок. Генерирует внешние события при получении изображения, завершении сканирования или прерывании пользователем (описаны ниже). Если ОткрыватьДиалог = Истина, то откроет диалог сканирования (поставляемый драйвером сканера) с возможностью настроек сканирования.
Параметры:
ОткрыватьДиалог (Булево) — обязательный, определяет показывать диалог устройства или нет
Устройство (Строка) — обязательный, имя устройства
Формат (Строка) — необязательный, формат сохранения картинки, принимает значения:
PNG (по умолчанию);
JPG;
BMP;
GIF;
TIF;
PDF;
Разрешение (Число) — необязательный, разрешение DPI, например 200
Цветность (Число) — необязательный, принимает значения 0 (черно-белое), 1 (оттенки серого), 2 (цветное)
Поворот (Число) — необязательный, угол поворота в градусах, допустимы значения 0, 90, 180, 270, не все сканеры поддерживают эту настройку
РазмерБумаги (Число) — необязательный, не все сканеры поддерживают эту настройку, принимает значения:
0 (не задано);
11 (А3);
1 (А4);
5 (А5);
6 (B4);
2 (B5);
7 (B6);
14 (C4);
15 (C5);
16 (C6);
3 (USLetter);
4 (USLegal);
10 (USExecutive).
СжатиеКачество (Число) — необязательный, для формата JPG сюда передается качество (от 1 до 100, 100 – максимальное качество и максимальный размер, по умолчанию - 75), для формата TIF – сжатие, значения:
2 – LZW (по умолчанию);
3 – CCITT3;
4 – CCITT4;
5 – RLE;
6 – без сжатия.
ДвустороннееСканирование (Булево) — необязательный, определяет режим сканирования с двух сторон, не все сканеры поддерживают эту настройку
Путь (Строка) — необязательный, определяет каталог, в котором будут сохранятся файлы, если не указан или указана пустая строка, то используется каталог временных файлов ОС
Многостраничность (Булево) — необязательный, для форматов PDF и TIF определяет возможность сохранять отсканированные страницы в один файл
Сканировать / Scan(ОткрыватьДиалог, Устройство, Формат, Разрешение, Цветность, Поворот, РазмерБумаги, СжатиеКачество, ДвустороннееСканирование, Путь, Многостраничность) — выполнит сканирование и сохранит файл на диск, вернет список всех отсканированных файлов, разделенных «*», если не было ошибок, если были ошибки, то вернёт «Неопределено». В отличие от функции «НачатьСканирование» не генерирует внешние события. Параметры полностью соответствуют функции «НачатьСканирование».
ЕстьУстройства / IsDevicePresent() — вернет Истина, если есть хоть одно TWAIN-устройство.
ПолучитьУстройства / EnumDevices() — вернет список доступных устройств в виде текстовых строк, разделенных разделителем (переводом строк).
Тест / Test() — то же, что «НачатьСканирование», но не обращается к TWAIN-драйверу, а сразу генерирует события, используется для тестирования.
ПолучитьНастройку / GetSetting(Устройство, Настройка) — возвращает значение указанной настройки (Число).
Параметры:
Устройство (Строка) — обязательный, имя устройства
Настройка (Строка) — обязательный, имя настройки, возможные значения:
- XRESOLUTION (разрешение – DPI);
- PIXELTYPE (цветность);
- ROTATION (поворот);
- SUPPORTEDSIZES (размер бумаги);
- DUPLEX (двустороннее сканирование).
ОбъединитьВМногостраничныйФайл / CombineToMultipageFile(СтрокаВсехПутей, ФайлРезультата, НеИспользуется) — объединяет несколько изображений в один многостраничный файл (TIF или PDF).
Параметры:
СтрокаВсехПутей (Строка) — обязательный, пути ко все файлам изображений, разделенные символом «*»
ФайлРезультата (Строка) — обязательный, путь к результирующему файлу (TIF или PDF)
НеИспользуется (Любой) — необязательный, сохранен для совместимости
РазделитьМногостраничныйФайл / SplitMultipageFile(ИмяВходногоФайла, НеИспользуется, Разрешение, ФорматВыходныхФайлов, ПутьРезультата) — разделяет многостраничный файл (TIF или PDF) на несколько изображений.
Параметры:
ИмяВходногоФайла (Строка) — обязательный, путь к многостраничному файлу (TIF или PDF)
НеИспользуется (Любой) — необязательный, сохранен для совместимости
Разрешение (Число) — необязательный, разрешение выходных изображений (только для PDF), по умолчанию 150
ФорматВыходныхФайлов (Строка) — необязательный, разрешение выходных изображений, принимает те же значения, что и формат для сканирования, по умолчанию PNG
ПутьРезультата (Строка) — необязательный, путь к каталогу, куда будут сохранены выходные изображения, по умолчанию тот же каталог хранения входного файла
Внешние события:
Источник = TWAIN, событие = ImageAcquired — генерируется методом «НачатьСканирование» при получении каждого изображения, в параметре Данные передается полный путь к файлу изображения.
Источник = TWAIN, событие = EndBatch — генерируется методом «НачатьСканирование» при окончании сканирования.
Источник = TWAIN, событие = UserPressedCancel — генерируется методом «НачатьСканирование», когда пользователь нажал Отмена в стандартном диалоге сканирования (поставляемом производителем сканера).
Важно
Компонента помещается в макет целиком, в виде архива, распаковывать архив и устанавливать из него ничего не нужно.
В асинхронном режиме вызовы методов должны выполняться через НачатьВызов, например:
Компонента.НачатьВызовСканировать(Новый ОписаниеОповещения("СканироватьЗавершение", ЭтотОбъект),
ПоказыватьДиалог,
Устройство,
Формат,
Разрешение,
Цветность,
Поворот,
РазмерБумаги,
?(Формат = "TIF", СжатиеTIFF, КачествоJPEG),
ДвустороннееСканирование,
Путь,
Многостраничность);
Техническая поддержка и обновления
Бесплатный период техподдержки составляет 1 месяц после покупки.
Также после приобретения вы получаете 1 месяц бесплатных обновлений.
По окончании бесплатного периода вы можете приобрести услугу технической поддержки с доступом к обновлениям на платной основе.
Проверить наличие обновлений можно в личном кабинете. Если обновления недоступны - загрузить новую версию можно после покупки обновлений/технической поддержки.
Задать вопрос по программе можно по кнопке "Техподдержка" на странице описания.
При создании тикета необходимо предоставить:
- Номер заказа
- Описание вопроса. Если это ошибки - напишите порядок ваших действий с программой, которые к ней привели (приложите видео/скриншоты/отчеты об ошибке)
- Точную конфигурацию 1С, и версию платформы, на которой используете купленное решение (наименование и версию 1С можно взять из раздела "О программе"), версию купленной программы.
К созданной заявке подключается специалист. Дальнейшее обсуждение проблемы будет проходить в тикете техподдержки. Стандартный срок реакции - 24 часа в рабочие дни с момента обращения.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.8.464
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.130.22
- Управление нашей фирмой, редакция 1.6, релизы 1.6.26.213