Не требуется установка дополнительных программ и компонентов (кроме драйвера сканера, естественно)
Данная обработка использует компоненту Twain которая хранится в макете обработки, никакие внешние процедуры из конфигурации ей не нужны что делает ее универсальной. Единственное только возможны изменения в процедурах регистрации обработки
Если Метаданные.ОбщиеМакеты.Найти("ПрисоединенныеФайлы")<>Неопределено ТОгда
Для каждого Спр Из Метаданные.Справочники Цикл
Если ПрисоединенныеФайлы.КОбъектуМожноПрисоединятьФайлы(Справочники[Спр.Имя].ПустаяСсылка()) Тогда
ПараметрыРегистрации.Назначение.Добавить("Справочник." + Спр.Имя);
КонецЕсли;
КонецЦикла;
Для каждого Спр Из Метаданные.Документы Цикл
Если ПрисоединенныеФайлы.КОбъектуМожноПрисоединятьФайлы(Документы[Спр.Имя].ПустаяСсылка()) Тогда
ПараметрыРегистрации.Назначение.Добавить("Документ." + Спр.Имя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для работы со сканерами мы используем Windows Image Acquisition (WIA)-это полнофункциональный компонент для обработки изображений, обеспечивающий сквозные возможности обработки изображений. Уровень автоматизации WIA позволяет легко получать изображения с цифровых камер, сканеров или веб-камер, а также вращать, масштабировать и аннотировать файлы изображений https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wiaaut/-wiaaut-wiadevicetype
.....
КодВозврата = ПодключитьВнешнююКомпоненту("ВнешняяОбработка.СканированиеДокументов.Макет.КомпонентаTWAIN", "twain");
.....
Соответсвие = Новый Соответствие;
Соответсвие.Вставить("DeviceManager", Новый COMОбъект("WIA.DeviceManager"));
Соответсвие.Вставить("ImageFile", Новый COMОбъект("WIA.ImageFile"));
Соответсвие.Вставить("CommonDialog", Новый COMОбъект("WIA.CommonDialog"));
Соответсвие.Вставить("ImageProcess", Новый COMОбъект("WIA.ImageProcess"));
.....
Для определения списка устройств:
Функция ПолучитьУстройства() Экспорт
Массив = Новый Массив;
Если Не ПроинициализироватьКомпоненту() Тогда
Возврат Массив;
КонецЕсли;
Для Каждого DeviceInfo Из Обработка_ПараметрыПриложения["СтандартныеПодсистемы.ИнтерфейсWIA"]["DeviceManager"].DeviceInfos() Цикл
Массив.Добавить(DeviceInfo.Properties("Name").Value);
КонецЦикла;
Возврат Массив;
КонецФункции
Получить нужное устройство для работы и обработки:
Функция ПолучитьУстройство(ИмяУстройства)
Для Каждого DeviceInfo Из Обработка_ПараметрыПриложения["СтандартныеПодсистемы.ИнтерфейсWIA"]["DeviceManager"].DeviceInfos() Цикл
Если ВРЕГ(DeviceInfo.Properties("Name").Value) = ВРЕГ(ИмяУстройства) Тогда
Возврат DeviceInfo;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Для работы с диалоговыми окнами необходимо определить несколько переменных:
Типы файлов:
СоответствиеФорматID = Новый Соответствие;
СоответствиеФорматID.Вставить(-1, "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}");
СоответствиеФорматID.Вставить("BMP", "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}");
СоответствиеФорматID.Вставить("PNG", "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}");
СоответствиеФорматID.Вставить("GIF", "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}");
СоответствиеФорматID.Вставить("JPG", "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}");
СоответствиеФорматID.Вставить("JPEG", "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}");
СоответствиеФорматID.Вставить("TIFF", "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}");
Типы изображений:
СоответствиеЦветностьID = Новый Соответствие;
СоответствиеЦветностьID.Вставить(-1, 0); //Не задано
СоответствиеЦветностьID.Вставить(0, 4); //Монохромное (текст)
СоответствиеЦветностьID.Вставить(1, 2); //Чернобелое
СоответствиеЦветностьID.Вставить(2, 1); //Цветное
Для запуска сканера в нужном режиме без диалога:
Image = CommonDialog.ShowAcquireImage(WiaDeviceType, WiaImageIntent, WiaImageBias, СоответствиеФорматID.Получить(ФорматКартинки));
Для запуска помощника сканирования:
....
objDevice=CommonDialog.ShowSelectDevice(WiaDeviceType,false,false);
Image = CommonDialog.ShowAcquisitionWizard(objDevice); //ПолучитьУстройство(ИмяУстройства));
....
Если желаем полностью настроить сканер программно и запустить сканирование без диалогов:
РазмерГоризонтально = Окр(210 / 25.4 * Разрешение, 0);
РазмерВертикально = Окр(296 / 25.4 * Разрешение, 0);
Device = Обработка_ПараметрыПриложения["СтандартныеПодсистемы.ИнтерфейсWIA"]["DeviceManager"]; //Новый COMОбъект("WIA.DeviceManager");
DeviceInfo = Device.DeviceInfos();
Если DeviceInfo.Count() > 0 Тогда
objDevice = CommonDialog.ShowSelectDevice(WiaDeviceType, Ложь, Ложь);
Сканер = objDevice.Items(1);
СканерПараметры = Сканер.Properties();
СканерПараметры.Item("6146").Value = Цветность;
СканерПараметры.Item("6147").Value = Разрешение;
СканерПараметры.Item("6148").Value = Разрешение;
СканерПараметры.Item("6149").Value = 0;
СканерПараметры.Item("6150").Value = 0;
СканерПараметры.Item("6151").Value = РазмерГоризонтально;
СканерПараметры.Item("6152").Value = РазмерВертикально;
Image = Сканер.Transfer();
КонецЕсли;
Весь список свойств можно получить через отладку
И последнее — это как и где получить возможные разрешения для сканера. Они также хранятся в свойствах каждого элемента.
В принципе, для работы со сканером как бы все есть, даже более.
Также данную библиотеку можно использовать и для получения видео и для обработки изображений. Например, вот так с помощью нее можно конвертировать изображение в нужный формат данных:
ImageProcess = Обработка_ПараметрыПриложения["СтандартныеПодсистемы.ИнтерфейсWIA"]["ImageProcess"];
Если ImageProcess.Filters.Count = 0 ТОгда
ImageProcess.Filters.Add(ImageProcess.FilterInfos("Convert").FilterID);
Конецесли;
ImageProcess1 = ImageProcess.Filters(1);
Для К = 1 По ImageProcess1.Properties.Count Цикл
Если ImageProcess1.Properties(К).Name = "FormatID" Тогда
ImageProcess1.Properties(К).Value = СоответствиеФорматID.Получить(ФорматКартинки);
Прервать;
КонецЕсли;
КонецЦикла;
Image = ImageProcess.Apply(Image); //применяем фильтр на изображение
Обработка тестировалась на платформе 1С:Предприятие 8.3 (8.3.15).
Проверено на конфигурациях БП 3.0, ЗКГУ 3.1, УНФ 1.6, УТ 11.4, Розница 2.2.
Компонента работает на 64 битной платформе 1С? Ранее то не работала..
Щас проверю на ВебКлиенте точно не работает
Работает