Подарочные сертификаты / Считывание подарочного сертификата / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем СтэкСтраниц; // Массив - История переходов для возврата по кнопке назад

&НаКлиенте
Перем ДанныеСчитывателя; // Кэш данных считывателя магнитной карты

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
	
	ОсновнойТипКода = ПодарочныеСертификатыСервер.ПолучитьОсновнойТипКодаПодарочногоСертификата();
	
	Если Не Параметры.Свойство("Отбор", СтруктураОтбора) Или СтруктураОтбора = Неопределено Тогда
		СтруктураОтбора = Новый Структура;	
	КонецЕсли;
	
	Если Не Параметры.Свойство("РегистрироватьНовые", РегистрироватьНовые) Тогда
		РегистрироватьНовые = Ложь;
	КонецЕсли;
	
	Если РегистрироватьНовые И СтруктураОтбора.Свойство("Организация") Тогда
		Если ТипЗнч(СтруктураОтбора.Организация) = Тип("Массив") И СтруктураОтбора.Организация.Количество() > 1 Тогда
			Элементы.НайденныеПодарочныеСертификатыОрганизация.Видимость = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Параметры.КодКарты) Тогда
		
		// При считывании в форме списка было найдено несколько карт с данным кодом,
		// требуется предложить карты на выбор пользователю.
		Если Параметры.ТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
			Если ТипЗнч(Параметры.КодКарты) = Тип("Массив") Тогда
				Текст = НСтр("ru = 'Обнаружено несколько подарочных сертификатов, соответствующих считанному магнитному коду.
				                   |Выберите подходящую карту.'");
			Иначе
				Текст = НСтр("ru = 'Обнаружено несколько подарочных сертификатов с магнитным кодом %1.
				                   |Выберите подходящую карту.'");
			КонецЕсли;
		Иначе
			Текст = НСтр("ru = 'Обнаружено несколько подарочных сертификатов со штрихкодом %1.
			                   |Выберите подходящую карту.'");
		КонецЕсли;
		НадписьВыборПодарочногоСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Параметры.КодКарты);
		
		ЗаполнитьНайденныеПодарочныеСертификатыНаСервере(Параметры.КодКарты, Параметры.ТипКода);
		
		Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборПодарочногоСертификата;
		
	Иначе
		
		Если ЗначениеЗаполнено(ОсновнойТипКода) Тогда
			ТипКода = ОсновнойТипКода;
			Элементы.ТипКода.Видимость = Ложь;
		Иначе
			ТипКода = Перечисления.ТипыКодовКарт.Штрихкод;
		КонецЕсли;
		
		Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеПодарочногоСертификата;
		
	КонецЕсли;
	
	Элементы.СтраницыКнопкиНазад.ТекущаяСтраница = Элементы.СтраницыКнопкиНазад.ПодчиненныеЭлементы.КнопкаНазадОтсутствует;
	Элементы.СтраницыКнопкиДалее.ТекущаяСтраница = Элементы.СтраницыКнопкиДалее.ПодчиненныеЭлементы.КнопкаГотово;
	
	Если Не ЗначениеЗаполнено(ОсновнойТипКода) Тогда
		Текст = НСтр("ru = 'Считайте подарочный сертификат при помощи сканера штрихкода
		                   |(считывателя магнитных карт) или введите код вручную'");
	ИначеЕсли ОсновнойТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
		Текст = НСтр("ru = 'Считайте подарочный сертификат при помощи считывателя
		                   |магнитных карт или введите магнитный код вручную'");
	ИначеЕсли ОсновнойТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
		Текст = НСтр("ru = 'Считайте подарочный сертификат при помощи сканера
		                   |штрихкода или введите штрихкод вручную'");
	КонецЕсли;
	НадписьСчитываниеПодарочногоСертификата = Текст;

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	СтэкСтраниц = Новый Массив;
	
	МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода,СчитывательМагнитныхКарт");

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

&НаКлиенте
Процедура ПриЗакрытии()
	
	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ТипКодаОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура КодКартыПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(КодКарты) Тогда
		ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НайденныеПодарочныеСертификатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
	
КонецПроцедуры

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

&НаКлиенте
Процедура Назад(Команда)
	
	Если СтэкСтраниц.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Элементы.Страницы.ТекущаяСтраница = СтэкСтраниц[СтэкСтраниц.Количество()-1];
	СтэкСтраниц.Удалить(СтэкСтраниц.Количество()-1);
	
	Если СтэкСтраниц.Количество() = 0 Тогда
		Элементы.СтраницыКнопкиНазад.ТекущаяСтраница = Элементы.СтраницыКнопкиНазад.ПодчиненныеЭлементы.КнопкаНазадОтсутствует;
	КонецЕсли;
	
	Элементы.СтраницыКнопкиДалее.ТекущаяСтраница = Элементы.СтраницыКнопкиДалее.ПодчиненныеЭлементы.КнопкаГотово;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НайденныеПодарочныеСертификаты.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеПодарочныеСертификаты.Ссылка");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеПодарочныеСертификаты.АвтоматическаяРегистрацияПриПервомСчитывании");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет());
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);

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

#Область ШтрихкодыИТорговоеОборудование

&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
	
	Если Элементы.Страницы.ТекущаяСтраница <> Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеПодарочногоСертификата Тогда
		Возврат;
	КонецЕсли;
	
	Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
		МассивШтрихкодов = ДанныеШтрихкодов;
	Иначе
		МассивШтрихкодов = Новый Массив;
		МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
	КонецЕсли;
	
	ОбработатьПолученныйКодНаКлиенте(МассивШтрихкодов[0].Штрихкод, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод"));
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьДанныеСчитывателяМагнитныхКарт(Данные)
	
	Если Элементы.Страницы.ТекущаяСтраница <> Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеПодарочногоСертификата Тогда
		Возврат;
	КонецЕсли;
	
	ДанныеСчитывателя = Данные;
	ПодключитьОбработчикОжидания("ОбработатьПолученныйКодНаКлиентеВОбработкеОжидания", 0.1, Истина);
	
КонецПроцедуры

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

#Область Прочее

&НаКлиенте
Процедура ПерейтиНаСтраницу(Страница)
	
	СтэкСтраниц.Добавить(Элементы.Страницы.ТекущаяСтраница);
	Элементы.Страницы.ТекущаяСтраница = Страница;
	Элементы.СтраницыКнопкиНазад.ТекущаяСтраница = Элементы.СтраницыКнопкиНазад.ПодчиненныеЭлементы.КнопкаНазад;
	
	Если Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборПодарочногоСертификата Тогда
		Если ТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
			Текст = НСтр("ru = 'Обнаружено несколько подарочных сертификатов с магнитным кодом %1.
			                   |Выберите подходящую карту.'");
		Иначе
			Текст = НСтр("ru = 'Обнаружено несколько подарочных сертификатов со штрихкодом %1.
			                   |Выберите подходящую карту.'");
		КонецЕсли;
		НадписьВыборПодарочногоСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, КодКарты);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьПолученныйКодНаКлиенте(Данные, ПолученныйТипКода)
	
	ЗаполнитьНайденныеПодарочныеСертификатыНаСервере(Данные, ПолученныйТипКода);
	
	Если НайденныеПодарочныеСертификаты.Количество() = 0 Тогда
		ПодарочныеСертификатыКлиент.СообщитьПользователюЧтоПодарочныйСертификатНеНайден(КодКарты, ТипКода, СтруктураОтбора);
		Возврат;
	ИначеЕсли НайденныеПодарочныеСертификаты.Количество() > 1 Тогда
		ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборПодарочногоСертификата);
		Текст = НСтр("ru = 'Обнаружено несколько подарочных сертификатов с кодом %1.
		                   |Выберите подходящий подарочный сертификат.'");
		НадписьВыборПодарочногоСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, КодКарты);
	ИначеЕсли НайденныеПодарочныеСертификаты.Количество() = 1 Тогда
		ОбработатьВыборПодарочногоСертификата(НайденныеПодарочныеСертификаты[0]);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНайденныеПодарочныеСертификатыНаСервере(Данные, ПолученныйТипКода)
	
	НайденныеПодарочныеСертификаты.Очистить();
	
	Если ПодарочныеСертификатыКлиентСервер.НеобходимаПредобработкаДанных(Данные, ПолученныйТипКода)
		И ТипЗнч(Данные) = Тип("Массив") Тогда
		КодКарты = Данные[0];
	Иначе
		КодКарты = Данные;
	КонецЕсли;
	
	ДополнительныеПараметры = ПодарочныеСертификатыВызовСервера.ПараметрыОбработкиПолученногоКода();
	ДополнительныеПараметры.Отборы = СтруктураОтбора;
	ДополнительныеПараметры.РегистрироватьНовые = РегистрироватьНовые;
	
	Результат = ПодарочныеСертификатыВызовСервера.ОбработатьПолученныйКодНаСервере(Данные, ПолученныйТипКода, ДополнительныеПараметры);
	Для Каждого СтрокаТЧ Из Результат Цикл
		ЗаполнитьЗначенияСвойств(НайденныеПодарочныеСертификаты.Добавить(), СтрокаТЧ);
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборПодарочногоСертификата(ТекущиеДанные)
	
	ПодарочныеСертификатыКлиент.ОбработатьВыборПодарочногоСертификата(ВладелецФормы, ТекущиеДанные, ТипКода, РегистрироватьНовые, Ложь);
	Если ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьПолученныйКодНаКлиентеВОбработкеОжидания()
	ОбработатьПолученныйКодНаКлиенте(ДанныеСчитывателя, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод"));
КонецПроцедуры

&НаКлиенте
Процедура ДалееОбработчикОжидания()
	
	Далее(Команды["Далее"]);
	
КонецПроцедуры

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

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

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