#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент();
Если ЭтоМобильныйКлиент Тогда
Элементы.ОтсканироватьQRКод.Видимость = Ложь;
КонецЕсли;
БизнесСетьПереопределяемый.УстановитьКартинкуПодсказкиОтображенияQRКодаНаДокументе(Элементы.КартинкаШаблонДокументаСQRКодом);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключенСканер = Ложь;
БизнесСетьКлиентПереопределяемый.ПриОпределенииПодключенияУстройстваДляСканированияQRКода(ЭтотОбъект, ПодключенСканер);
ТолькоРучнойВвод = Не ПодключенСканер И Не ЭтоМобильныйКлиент;
ИзменитьОтображениеСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Элементы.ВариантыВводаСсылки.ТекущаяСтраница = Элементы.ОжиданиеПоискаДокумента Тогда
Возврат;
КонецЕсли;
ОбработатьРезультатСканирования(Данные);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОтсканироватьQRКод(Команда)
#Если МобильноеПриложениеКлиент Тогда
Если Не СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
ВызватьИсключение НСтр("ru = 'Сканирование QR-кодов не поддерживается'");
КонецЕсли;
ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов(НСтр("ru = 'Наведите камеру на QR-код'"), ОбработчикСканирования);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура НайтиДокументПоСсылке(Команда)
ЗаполнитьПубличнуюСсылкуНаДокумент();
НайтиИОткрытьФормуПредпросмотраЭДПоQRКоды();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ЗаполнитьПубличнуюСсылкуНаДокумент()
ПубличнаяСсылка = "https://1c.ru/m/" + ПоследниеСимволыСсылки;
КонецПроцедуры
&НаКлиенте
Процедура НайтиИОткрытьФормуПредпросмотраЭДПоQRКоды()
ОчиститьСообщения();
УстановитьСтраницуОжидания(Истина);
ОписаниеПриЗавершении = Новый ОписаниеОповещения("ПолучитьДанныеДокументаПоQRКодуЗавершение", ЭтотОбъект);
БизнесСетьКлиент.ПолучитьДанныеДокументаПоQRКоду(ЭтотОбъект, УникальныйИдентификатор, ПубличнаяСсылка, ОписаниеПриЗавершении);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьДанныеДокументаПоQRКодуЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Или ТипЗнч(Результат) <> Тип("Структура") Тогда
УстановитьСтраницуОжидания(Ложь);
Возврат;
КонецЕсли;
Если Результат.Свойство("Статус") И Результат.Статус = "Ошибка" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.КраткоеПредставлениеОшибки);
УстановитьСтраницуОжидания(Ложь);
Возврат;
КонецЕсли;
Если Результат.Сообщения <> Неопределено Тогда
Для Каждого Сообщение Из Результат.Сообщения Цикл
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
ДанныеРезультата = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если ДанныеРезультата = Неопределено Тогда
УстановитьСтраницуОжидания(Ложь);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеРезультата.ИдентификаторВнутренний) Тогда
Идентификатор = Новый УникальныйИдентификатор(ДанныеРезультата.ИдентификаторВнутренний);
Иначе
Идентификатор = Новый УникальныйИдентификатор();
КонецЕсли;
Закрыть();
ДанныеРезультата.Вставить("АдресХранилища", ПоместитьВоВременноеХранилище(Base64Значение(ДанныеРезультата.Источник.documentData), Идентификатор));
КонтекстВызова = Новый Структура("СтруктураЭД", ДанныеРезультата);
ОткрытьФорму("Обработка.БизнесСеть.Форма.ПросмотрДокумента", КонтекстВызова,, ДанныеРезультата.ИдентификаторВнутренний);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСтраницуОжидания(Установить)
Если Установить Тогда
Элементы.ВариантыВводаСсылки.ТекущаяСтраница = Элементы.ОжиданиеПоискаДокумента;
Иначе
Элементы.ВариантыВводаСсылки.ТекущаяСтраница =
?(ТолькоРучнойВвод, Элементы.ТолькоРучнойВвод, Элементы.ВсеВарианты);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьРезультатСканирования(Данные)
ПубличнаяСсылка = СокрЛП(Данные);
НайтиИОткрытьФормуПредпросмотраЭДПоQRКоды();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
#Если МобильноеПриложениеКлиент Тогда
СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов();
Если Результат = Истина И ЗначениеЗаполнено(Штрихкод) Тогда
ОбработатьРезультатСканирования(Штрихкод);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьОтображениеСтраницы()
Если ТолькоРучнойВвод Тогда
Элементы.ВариантыВводаСсылки.ТекущаяСтраница = Элементы.ТолькоРучнойВвод;
КонецЕсли;
КонецПроцедуры
#КонецОбласти