#Область ОписаниеПеременных
&НаКлиенте
Перем ПодключаемыйМодуль;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИдентификаторКлиента = Параметры.ИдентификаторКлиента;
НастройкиСканированияПользователя = РаботаСФайлами.ПолучитьНастройкиСканированияПользователя(ИдентификаторКлиента);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиСканированияПользователя);
Если ИмяУстройства <> "" Тогда
Элементы.ИмяУстройства.СписокВыбора.Добавить(ИмяУстройства);
КонецЕсли;
Элементы.КаталогЖурналаСканирования.Доступность = ИспользоватьКаталогЖурналаСканирования;
СпособПреобразованияВPDF = ?(ИспользоватьImageMagickДляПреобразованияВPDF, 1, 0);
ФорматJPG = Перечисления.ФорматыСканированногоИзображения.JPG;
ФорматTIF = Перечисления.ФорматыСканированногоИзображения.TIF;
ФорматМногостраничныйTIF = Перечисления.ФорматыХраненияМногостраничныхФайлов.TIF;
Элементы.ГруппаКачествоJPG.Видимость = (ФорматСканированногоИзображения = ФорматJPG);
Элементы.СжатиеTIFF.Видимость = (ФорматСканированногоИзображения = ФорматTIF);
Элементы.ПутьКПрограммеКонвертации.Доступность = ИспользоватьImageMagickДляПреобразованияВPDF;
УстановитьПодсказки();
ПовторноеСканирование = Параметры.ПовторноеСканирование;
Если Параметры.ПовторноеСканирование Тогда
Элементы.ОК.Заголовок = НСтр("ru='Сканировать'");
КонецЕсли;
ПараметрыЗаданияСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", Неопределено);
Элементы.ОшибкаСканирования.Видимость = ПараметрыЗаданияСканирования <> Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда
МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль(
"ОбращенияВТехническуюПоддержкуСлужебный");
МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект);
Иначе
Элементы.ГруппаОбращенияВТехническуюПоддержку.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда
АдаптироватьДляLinux();
ПоказыватьДиалогСканера = Ложь;
КонецЕсли;
ОбновитьСостояние();
ОбработатьИспользованиеДиалогаСканирования();
Элементы.ОшибкаСканирования.Видимость = Элементы.ОшибкаСканирования.Видимость И Не ОткрытаФормаСканирования();
УстановитьТекстРекомендации();
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если ПоказыватьДиалогСканера Тогда
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Разрешение"));
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Цветность"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыНастройкиСканирования" Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметр);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ИмяУстройстваПриИзменении(Элемент)
ПрочитатьНастройкиСканера();
КонецПроцедуры
&НаКлиенте
Процедура ИмяУстройстваОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ИмяУстройства = ВыбранноеЗначение Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФорматСканированногоИзображенияПриИзменении(Элемент)
Элементы.ГруппаКачествоJPG.Видимость = (ФорматСканированногоИзображения = ФорматJPG);
Элементы.СжатиеTIFF.Видимость = (ФорматСканированногоИзображения = ФорматTIF);
УстановитьПодсказки();
КонецПроцедуры
&НаКлиенте
Процедура ПутьКПрограммеКонвертацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НЕ РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда
Возврат;
КонецЕсли;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПолноеИмяФайла = ПутьКПрограммеКонвертации;
Фильтр = НСтр("ru = 'Исполняемые файлы(*.exe)|*.exe'");
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файл для преобразования в PDF'");
Если ДиалогОткрытияФайла.Выбрать() Тогда
ПутьКПрограммеКонвертации = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпособПреобразованияВPDFПриИзменении(Элемент)
ИспользоватьImageMagickДляПреобразованияВPDF = СпособПреобразованияВPDF = 1;
ОтработатьИзмененияИспользоватьImageMagick();
КонецПроцедуры
&НаКлиенте
Процедура КачествоJPGПриИзменении(Элемент)
Элементы.КачествоJPG.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Качество (%1)'"), КачествоJPG);
КонецПроцедуры
&НаКлиенте
Процедура ИмяУстройстваНачалоВыбора(Элемент, СтандартнаяОбработка)
Попытка
МассивУстройств = РаботаСФайламиСлужебныйКлиент.ПолучитьУстройства(ЭтотОбъект, ПодключаемыйМодуль);
Исключение
МассивУстройств = Новый Массив;
КонецПопытки;
Если МассивУстройств.Количество() > 0 Тогда
Элемент.СписокВыбора.ЗагрузитьЗначения(МассивУстройств);
Иначе
СтандартнаяОбработка = Ложь;
ПоказатьПредупреждение(,НСтр("ru = 'Не обнаружено подключенных сканеров. Проверьте подключение сканера.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьДиалогСканераПриИзменении(Элемент)
ОбработатьИспользованиеДиалогаСканирования();
КонецПроцедуры
&НаКлиенте
Процедура КаталогЖурналаСканированияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если НЕ РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогОткрытияФайла.ПолноеИмяФайла = КаталогЖурналаСканирования;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь для сохранения журнала сканирования'");
Если ДиалогОткрытияФайла.Выбрать() Тогда
КаталогЖурналаСканирования = ДиалогОткрытияФайла.Каталог;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьКаталогЖурналаСканированияПриИзменении(Элемент)
Элементы.КаталогЖурналаСканирования.Доступность = ИспользоватьКаталогЖурналаСканирования;
КонецПроцедуры
&НаКлиенте
Процедура РекомендацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
Если НавигационнаяСсылка = "Запустить32БитныйКлиент" Тогда
СтандартнаяОбработка = Ложь;
Запустить32БитныйКлиент();
Иначе
Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'");
ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылка = "ВопросВПоддержку" Тогда
ОбработчикЗавершения = Новый ОписаниеОповещения(
"ПродолжитьОтправкуВопросаВПоддержку",
ЭтотОбъект);
Если Не ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ПредставлениеОшибки = НСтр("ru='Вызвана помощь из настроек сканирования.'");
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.СформироватьИнформациюДляПоддержки(
ПредставлениеОшибки,
ОбработчикЗавершения);
ИначеЕсли НавигационнаяСсылка = "ИнформацияДляОтправкиВПоддержку" Тогда
ОбработчикЗавершения = Новый ОписаниеОповещения(
"ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку",
ЭтотОбъект);
Если Не ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ПредставлениеОшибки = НСтр("ru='Вызвана помощь из настроек сканирования.'");
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.СформироватьИнформациюДляПоддержки(
ПредставлениеОшибки,
ОбработчикЗавершения);
Иначе
Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'");
ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОК(Команда)
ОчиститьСообщения();
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
НастройкиСканированияПользователя = РаботаСФайламиКлиентСервер.НастройкиСканированияПользователя();
ЗаполнитьЗначенияСвойств(НастройкиСканированияПользователя, ЭтотОбъект);
Если ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда
НастройкиСканированияПользователя.ПутьКПрограммеКонвертации = "convert";
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("НастройкиСканированияПользователя", НастройкиСканированияПользователя);
Контекст.Вставить("ОшибкаПроверкиЗаполнения", Ложь);
Если НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования Тогда
Если НастройкиСканированияПользователя.КаталогЖурналаСканирования = "" Тогда
ТекстОшибки = НСтр("ru='Не заполнен путь к журналу сканирования.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "КаталогЖурналаСканирования");
Контекст.ОшибкаПроверкиЗаполнения = Истина;
Результат = Новый Структура("Успешно", Истина);
ПослеПроверкиДоступностиКаталогаСканирования(Результат, Контекст)
Иначе
Оповещение = Новый ОписаниеОповещения("ПослеПроверкиДоступностиКаталогаСканирования", ЭтотОбъект, Контекст);
РаботаСФайламиСлужебныйКлиент.ПроверитьДоступностьКаталога(Оповещение, НастройкиСканированияПользователя.КаталогЖурналаСканирования);
КонецЕсли;
Иначе
Результат = Новый Структура("Успешно", Истина);
ПослеПроверкиДоступностиКаталогаСканирования(Результат, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСтандартныеНастройки(Команда)
ПрочитатьНастройкиСканера();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНомераОтсканированныхФайлов(Команда)
ОткрытьФорму("РегистрСведений.НомераОтсканированныхФайлов.ФормаСписка");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПродолжитьОтправкуВопросаВПоддержку(Результат, ДополнительныеПараметры) Экспорт
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ОбращенияВТехническуюПоддержкуСлужебныйКлиент");
ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения();
ПараметрыОбращения.ТехнологическаяИнформация = Результат.ТехнологическаяИнформация;
ПараметрыОбращения.ДополнительныеФайлы = Результат.ДополнительныеФайлы;
ПараметрыОбращения.Тема = НСтр("ru = 'Проблема при настройке сканирования'");
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку(
ЭтотОбъект,
ПараметрыОбращения);
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку(Результат, ДополнительныеПараметры) Экспорт
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ОбращенияВТехническуюПоддержкуСлужебныйКлиент");
ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения();
ПараметрыОбращения.ТехнологическаяИнформация = Результат.ТехнологическаяИнформация;
ПараметрыОбращения.ДополнительныеФайлы = Результат.ДополнительныеФайлы;
МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку(
ЭтотОбъект,
ПараметрыОбращения);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьТекстРекомендации()
Рекомендации = Новый Массив;
Рекомендации.Добавить(НСтр("ru = 'Попробуйте следующие варианты:'"));
Рекомендации.Добавить(" • " + НСтр("ru = 'Проверьте подключение сканера и повторите попытку сканирования.'"));
Если Не ПоказыватьДиалогСканера И Не ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда
Рекомендация = " • " + НСтр("ru = 'Смените способ задания настроек на <b>Расширенные в диалоге сканера</b>.'");
Рекомендации.Добавить(Рекомендация);
КонецЕсли;
РазрешениеИзображения = ПредопределенноеЗначение("Перечисление.РазрешенияСканированногоИзображения.dpi1200");
Если ПоказыватьДиалогСканера Или Разрешение = РазрешениеИзображения Тогда
Рекомендации.Добавить(" • " + НСтр("ru = 'Снизьте разрешение сканирования до <b>600 dpi</b>.'"));
КонецЕсли;
СистемнаяИнформация = Новый СистемнаяИнформация();
Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
Шаблон = " • " + НСтр(
"ru = 'Установите и запустите <a href = ""%1"">тонкий клиент 1С:Предприятия для Windows (32-bit)</a>,
| в котором доступно больше устройств и настроек сканирования.'");
Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, "Запустить32БитныйКлиент");
Рекомендации.Добавить(Рекомендация);
КонецЕсли;
Элементы.Рекомендации.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
СтрСоединить(Рекомендации, Символы.ПС));
КонецПроцедуры
&НаКлиенте
Процедура Запустить32БитныйКлиент()
#Если Не ВебКлиент Тогда
КаталогПрограммы32 = СтрЗаменить(КаталогПрограммы(), "\Program Files\", "\Program Files (x86)\");
ИмяПриложения = КаталогПрограммы32 + "1cv8.exe";
ФайлПриложения = Новый Файл(ИмяПриложения);
Если ФайлПриложения.Существует() Тогда
ФайловаяСистемаКлиент.ЗапуститьПрограмму(ИмяПриложения);
Иначе
СистемнаяИнформация = Новый СистемнаяИнформация();
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(
"https://releases.1c.ru/version_files?nick=Platform83&ver=" + СистемнаяИнформация.ВерсияПриложения);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСостояние()
Элементы.КачествоJPG.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Качество (%1)'"), КачествоJPG);
Элементы.ФорматСканированногоИзображения.Доступность = Ложь;
Элементы.Разрешение.Доступность = Ложь;
Элементы.Цветность.Доступность = Ложь;
Элементы.Поворот.Доступность = Ложь;
Элементы.РазмерБумаги.Доступность = Ложь;
Элементы.ДвустороннееСканирование.Доступность = Ложь;
Элементы.АвтоматическаяПодачаДокументов.Доступность = Ложь;
Элементы.УстановитьСтандартныеНастройки.Доступность = Ложь;
Элементы.ПреобразоватьВPDF.Доступность = Ложь;
Элементы.КачествоJPG.Доступность = Ложь;
Элементы.СжатиеTIFF.Доступность = Ложь;
Элементы.ФорматХраненияМногостраничный.Доступность = Ложь;
Элементы.СпособПреобразованияВPDF.Доступность = Ложь;
Элементы.ПоказыватьДиалогСканера.Доступность = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения("ОбновитьСостояниеПослеИнициализации", ЭтотОбъект);
РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(ОписаниеОповещения, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСостояниеПослеИнициализации(РезультатПроверкиИнициализации, Контекст) Экспорт
ПодключаемыйМодуль = РезультатПроверкиИнициализации.Подключено;
Если Не ПодключаемыйМодуль Тогда
Элементы.ИмяУстройства.Доступность = Ложь;
Возврат;
КонецЕсли;
ПодключаемыйМодуль = РезультатПроверкиИнициализации.ПодключаемыйМодуль;
Если Не РаботаСФайламиСлужебныйКлиент.ГотовностьКСканированию(ЭтотОбъект, ПодключаемыйМодуль) Тогда
Элементы.ИмяУстройства.ПодсказкаВвода = НСтр("ru='Проверьте подключение сканера'");
Возврат;
Иначе
Элементы.ИмяУстройства.ПодсказкаВвода = "";
КонецЕсли;
Если ПустаяСтрока(ИмяУстройства) Тогда
Возврат;
КонецЕсли;
ПрочитатьНастройкиСканераИОбновитьЗначения(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьНастройкиСканера()
Модифицированность = Истина;
Элементы.ДвустороннееСканирование.Доступность = Ложь;
Элементы.АвтоматическаяПодачаДокументов.Доступность = Ложь;
Если ПустаяСтрока(ИмяУстройства) Тогда
Элементы.Поворот.Доступность = Ложь;
Элементы.РазмерБумаги.Доступность = Ложь;
Возврат;
КонецЕсли;
ПрочитатьНастройкиСканераИОбновитьЗначения(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьНастройкиСканераИОбновитьЗначения(ОбновлятьЗначения)
Элементы.ФорматСканированногоИзображения.Доступность = Истина;
Элементы.Разрешение.Доступность = Истина;
Элементы.Цветность.Доступность = Истина;
Элементы.УстановитьСтандартныеНастройки.Доступность = Истина;
Элементы.ПреобразоватьВPDF.Доступность = Истина;
Элементы.КачествоJPG.Доступность = Истина;
Элементы.СжатиеTIFF.Доступность = Истина;
Элементы.ФорматХраненияМногостраничный.Доступность = Истина;
Элементы.СпособПреобразованияВPDF.Доступность = Истина;
Элементы.ПоказыватьДиалогСканера.Доступность = Истина;
РазрешениеЧисло = РаботаСФайламиСлужебныйКлиент.НастройкаСканера(ЭтотОбъект, ПодключаемыйМодуль,
ИмяУстройства, "XRESOLUTION");
ЦветностьЧисло = РаботаСФайламиСлужебныйКлиент.НастройкаСканера(ЭтотОбъект, ПодключаемыйМодуль,
ИмяУстройства, "PIXELTYPE");
ПоворотЧисло = РаботаСФайламиСлужебныйКлиент.НастройкаСканера(ЭтотОбъект, ПодключаемыйМодуль,
ИмяУстройства, "ROTATION");
РазмерБумагиЧисло = РаботаСФайламиСлужебныйКлиент.НастройкаСканера(ЭтотОбъект, ПодключаемыйМодуль,
ИмяУстройства, "SUPPORTEDSIZES");
ДвустороннееСканированиеЧисло = РаботаСФайламиСлужебныйКлиент.НастройкаСканера(ЭтотОбъект, ПодключаемыйМодуль,
ИмяУстройства, "DUPLEX");
АвтоматическаяПодачаДокументовЧисло = РаботаСФайламиСлужебныйКлиент.НастройкаСканера(ЭтотОбъект, ПодключаемыйМодуль,
ИмяУстройства, "FEEDER");
Элементы.Поворот.Доступность = (ПоворотЧисло <> -1);
Элементы.РазмерБумаги.Доступность = (РазмерБумагиЧисло <> -1);
Элементы.ДвустороннееСканирование.Доступность = (ДвустороннееСканированиеЧисло <> -1);
Если ОбновлятьЗначения Тогда
ОбновитьЗначение(ДвустороннееСканирование, ?((ДвустороннееСканированиеЧисло = 1), Истина, Ложь), Модифицированность);
КонецЕсли;
Элементы.АвтоматическаяПодачаДокументов.Доступность = (АвтоматическаяПодачаДокументовЧисло <> -1);
Если ОбновлятьЗначения Тогда
ОбновитьЗначение(АвтоматическаяПодачаДокументов, ?((АвтоматическаяПодачаДокументовЧисло = 1), Истина, Ложь), Модифицированность);
ПреобразоватьПараметрыСканераВПеречисления(
РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло);
ОбработатьИспользованиеДиалогаСканирования();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПреобразоватьПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло)
Результат = РаботаСФайламиСлужебный.ПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло,
ПоворотЧисло, РазмерБумагиЧисло);
ОбновитьЗначение(Разрешение, Результат.Разрешение, Модифицированность);
ОбновитьЗначение(Цветность, Результат.Цветность, Модифицированность);
ОбновитьЗначение(Поворот, Результат.Поворот, Модифицированность);
ОбновитьЗначение(РазмерБумаги, Результат.РазмерБумаги, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура ОтработатьИзмененияИспользоватьImageMagick()
Элементы.ПутьКПрограммеКонвертации.Доступность = ИспользоватьImageMagickДляПреобразованияВPDF;
КонецПроцедуры
&НаСервере
Процедура УстановитьПодсказки()
ПодсказкаФормата = "";
РасширеннаяПодсказка = Строка(Элементы.ПреобразоватьВPDF.РасширеннаяПодсказка.Заголовок);
Подсказки = СтрРазделить(РасширеннаяПодсказка, Символы.ПС);
ТекущийФормат = Строка(ФорматСканированногоИзображения);
Для Каждого Подсказка Из Подсказки Цикл
Если СтрНачинаетсяС(Подсказка, ТекущийФормат) Тогда
ПодсказкаФормата = Подсказка;
КонецЕсли;
КонецЦикла;
Элементы.ОписаниеФорматаОдностраничногоДокумента.Заголовок = ПодсказкаФормата;
КонецПроцедуры
&НаКлиенте
Процедура ОКЗавершение(НастройкиСканированияПользователя)
РаботаСФайламиКлиент.СохранитьНастройкиСканированияПользователя(НастройкиСканированияПользователя);
Результат = Новый Структура("ПовторноеСканирование", ПовторноеСканирование);
Закрыть(Результат);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПроверкиУстановленнойПрограммыКонвертации(РезультатЗапуска, ВнешнийКонтекст) Экспорт
Если СтрНайти(РезультатЗапуска.ПотокВывода, "ImageMagick") = 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибочно указан путь к приложению %1.'"), "ImageMagick");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , "ПутьКПрограммеКонвертации");
ИначеЕсли Не ВнешнийКонтекст.ОшибкаПроверкиЗаполнения Тогда
ОКЗавершение(ВнешнийКонтекст.НастройкиСканированияПользователя);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьИспользованиеДиалогаСканирования()
Элементы.ГруппаПараметрыСканирования.Доступность = Не ПоказыватьДиалогСканера;
Элементы.ФорматСканированногоИзображения.Доступность = Не ПоказыватьДиалогСканера;
Элементы.КачествоJPG.Доступность = Не ПоказыватьДиалогСканера;
Элементы.СжатиеTIFF.Доступность = Не ПоказыватьДиалогСканера;
Элементы.Разрешение.ОтметкаНезаполненного = Не ПоказыватьДиалогСканера;
Элементы.Цветность.ОтметкаНезаполненного = Не ПоказыватьДиалогСканера;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗначение(Приемник, Источник, Модифицированность)
Модифицированность = Модифицированность Или Приемник <> Источник;
Приемник = ?(ЗначениеЗаполнено(Источник), Источник, Приемник);
КонецПроцедуры
&НаКлиенте
Функция ОткрытаФормаСканирования()
Для Каждого ОкноКлиентскогоПриложения Из ПолучитьОкна() Цикл
Для Каждого СодержимоеОкна Из ОкноКлиентскогоПриложения.Содержимое Цикл
Если СодержимоеОкна.ИмяФормы = "Обработка.Сканирование.Форма.РезультатСканирования" Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура ПослеПолученияТехническойИнформации(Результат, Контекст) Экспорт
Элементы.ОшибкаСканирования.Видимость = Ложь;
КонецПроцедуры
&НаСервере
Процедура АдаптироватьДляLinux()
Элементы.ПоказыватьДиалогСканера.Видимость = Ложь;
Элементы.Поворот.Видимость = Ложь;
ДоступныеФорматы = Новый Массив;
ДоступныеФорматы.Добавить(Перечисления.ФорматыСканированногоИзображения.PNG);
ДоступныеФорматы.Добавить(Перечисления.ФорматыСканированногоИзображения.JPG);
Элементы.ФорматСканированногоИзображения.СписокВыбора.ЗагрузитьЗначения(ДоступныеФорматы);
Элементы.ФорматСканированногоИзображения.РежимВыбораИзСписка = Истина;
Если ДоступныеФорматы.Найти(ФорматСканированногоИзображения) = Неопределено Тогда
ФорматСканированногоИзображения = Перечисления.ФорматыСканированногоИзображения.PNG;
Модифицированность = Истина;
КонецЕсли;
Элементы.ПутьКПрограммеКонвертации.Видимость = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПослеПроверкиДоступностиКаталогаСканирования(Результат, ВнешнийКонтекст) Экспорт
НастройкиСканированияПользователя = ВнешнийКонтекст.НастройкиСканированияПользователя;
ОшибкаПроверкиЗаполнения = ВнешнийКонтекст.ОшибкаПроверкиЗаполнения;
Если Не Результат.Успешно Тогда
ТекстОшибки = НСтр("ru='Каталог журнала сканирования недоступен для записи. Выберите другой каталог.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "КаталогЖурналаСканирования");
ОшибкаПроверкиЗаполнения = Истина;
КонецЕсли;
Если НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF Тогда
Если Не ЗначениеЗаполнено(НастройкиСканированияПользователя.ПутьКПрограммеКонвертации) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Не указан путь к приложению %1.'"),
"ImageMagick");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "ПутьКПрограммеКонвертации");
ОшибкаПроверкиЗаполнения = Истина;
Иначе
Контекст = Новый Структура;
Контекст.Вставить("Контекст", НастройкиСканированияПользователя);
Контекст.Вставить("ОшибкаПроверкиЗаполнения", ОшибкаПроверкиЗаполнения);
Контекст.Вставить("НастройкиСканированияПользователя", НастройкиСканированияПользователя);
ОбработчикРезультатаПроверки = Новый ОписаниеОповещения("ПослеПроверкиУстановленнойПрограммыКонвертации", ЭтотОбъект,
Контекст);
РаботаСФайламиКлиент.НачатьПроверкуНаличияПрограммыКонвертации(НастройкиСканированияПользователя.ПутьКПрограммеКонвертации,
ОбработчикРезультатаПроверки);
КонецЕсли;
ИначеЕсли Не ОшибкаПроверкиЗаполнения Тогда
ОКЗавершение(НастройкиСканированияПользователя);
КонецЕсли;
КонецПроцедуры
#КонецОбласти