Данная обработка использует компоненту 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.