Бизнес-сеть / Поиск документа по QRКоду / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент();

	Если ЭтоМобильныйКлиент Тогда
		Элементы.ОтсканироватьQRКод.Видимость = Ложь;
	КонецЕсли;

	БизнесСетьПереопределяемый.УстановитьКартинкуПодсказкиОтображенияQRКодаНаДокументе(Элементы.КартинкаШаблонДокументаСQRКодом);

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПодключенСканер = Ложь;
	БизнесСетьКлиентПереопределяемый.ПриОпределенииПодключенияУстройстваДляСканированияQRКода(ЭтотОбъект, ПодключенСканер);
	ТолькоРучнойВвод = Не ПодключенСканер И Не ЭтоМобильныйКлиент;
	ИзменитьОтображениеСтраницы();
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
	
	Если Элементы.ВариантыВводаСсылки.ТекущаяСтраница = Элементы.ОжиданиеПоискаДокумента Тогда
		Возврат;
	КонецЕсли;
	
	ОбработатьРезультатСканирования(Данные);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОтсканироватьQRКод(Команда)
	
	#Если МобильноеПриложениеКлиент Тогда
		
		Если Не СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
			ВызватьИсключение НСтр("ru = 'Сканирование QR-кодов не поддерживается'");
		КонецЕсли;
		
		ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект);
		СредстваМультимедиа.ПоказатьСканированиеШтрихКодов(НСтр("ru = 'Наведите камеру на QR-код'"), ОбработчикСканирования);
		
	#КонецЕсли

КонецПроцедуры

&НаКлиенте
Процедура НайтиДокументПоСсылке(Команда)
	
	ЗаполнитьПубличнуюСсылкуНаДокумент();
	НайтиИОткрытьФормуПредпросмотраЭДПоQRКоды();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ЗаполнитьПубличнуюСсылкуНаДокумент()
	
	ПубличнаяСсылка = "https://1c.ru/m/" + ПоследниеСимволыСсылки;
	
КонецПроцедуры

&НаКлиенте
Процедура НайтиИОткрытьФормуПредпросмотраЭДПоQRКоды()
	
	ОчиститьСообщения();
	УстановитьСтраницуОжидания(Истина);
	
	ОписаниеПриЗавершении = Новый ОписаниеОповещения("ПолучитьДанныеДокументаПоQRКодуЗавершение", ЭтотОбъект);
	БизнесСетьКлиент.ПолучитьДанныеДокументаПоQRКоду(ЭтотОбъект, УникальныйИдентификатор, ПубличнаяСсылка, ОписаниеПриЗавершении);
	
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьДанныеДокументаПоQRКодуЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = Неопределено Или ТипЗнч(Результат) <> Тип("Структура") Тогда
		УстановитьСтраницуОжидания(Ложь);
		Возврат;
	КонецЕсли;
	
	Если Результат.Свойство("Статус") И Результат.Статус = "Ошибка" Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.КраткоеПредставлениеОшибки);
		УстановитьСтраницуОжидания(Ложь);
		Возврат;
	КонецЕсли;
	
	Если Результат.Сообщения <> Неопределено Тогда
		Для Каждого Сообщение Из Результат.Сообщения Цикл
			Сообщение.Сообщить();
		КонецЦикла;
	КонецЕсли;
	
	ДанныеРезультата = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);

	Если ДанныеРезультата = Неопределено Тогда
		УстановитьСтраницуОжидания(Ложь);
		Возврат;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ДанныеРезультата.ИдентификаторВнутренний) Тогда
		Идентификатор = Новый УникальныйИдентификатор(ДанныеРезультата.ИдентификаторВнутренний);
	Иначе
		Идентификатор = Новый УникальныйИдентификатор();
	КонецЕсли;
	
	Закрыть(); //закрываем форму до открытия новой, т.к. форма блокирует весь интерфейс.
	
	ДанныеРезультата.Вставить("АдресХранилища", ПоместитьВоВременноеХранилище(Base64Значение(ДанныеРезультата.Источник.documentData), Идентификатор));
	
	КонтекстВызова = Новый Структура("СтруктураЭД", ДанныеРезультата);
	ОткрытьФорму("Обработка.БизнесСеть.Форма.ПросмотрДокумента", КонтекстВызова,, ДанныеРезультата.ИдентификаторВнутренний);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьСтраницуОжидания(Установить)
	
	Если Установить Тогда
		Элементы.ВариантыВводаСсылки.ТекущаяСтраница = Элементы.ОжиданиеПоискаДокумента;
	Иначе
		Элементы.ВариантыВводаСсылки.ТекущаяСтраница = 
			?(ТолькоРучнойВвод, Элементы.ТолькоРучнойВвод, Элементы.ВсеВарианты); 
	КонецЕсли;
		
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьРезультатСканирования(Данные)
	
	ПубличнаяСсылка = СокрЛП(Данные);
	НайтиИОткрытьФормуПредпросмотраЭДПоQRКоды();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
	
	#Если МобильноеПриложениеКлиент Тогда
		СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов();
		
		Если Результат = Истина И ЗначениеЗаполнено(Штрихкод) Тогда
			ОбработатьРезультатСканирования(Штрихкод);
		КонецЕсли;
		
	#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьОтображениеСтраницы()
	
	Если ТолькоРучнойВвод Тогда
		Элементы.ВариантыВводаСсылки.ТекущаяСтраница = Элементы.ТолькоРучнойВвод;
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

Связанные материалы