#Область ОписаниеПеременных
&НаКлиенте
Перем СтэкСтраниц;
&НаКлиенте
Перем ДанныеСчитывателя;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
ОсновнойТипКода = ПодарочныеСертификатыСервер.ПолучитьОсновнойТипКодаПодарочногоСертификата();
Если Не Параметры.Свойство("Отбор", СтруктураОтбора) Или СтруктураОтбора = Неопределено Тогда
СтруктураОтбора = Новый Структура;
КонецЕсли;
Если Не Параметры.Свойство("РегистрироватьНовые", РегистрироватьНовые) Тогда
РегистрироватьНовые = Ложь;
КонецЕсли;
Если РегистрироватьНовые И СтруктураОтбора.Свойство("Организация") Тогда
Если ТипЗнч(СтруктураОтбора.Организация) = Тип("Массив") И СтруктураОтбора.Организация.Количество() > 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];
Иначе
КодКарты = Данные;
КонецЕсли;
ДополнительныеПараметры = ПодарочныеСертификатыВызовСервера.ПараметрыОбработкиПолученногоКода();
ДополнительныеПараметры.Отборы = СтруктураОтбора;
ДополнительныеПараметры.РегистрироватьНовые = РегистрироватьНовые;
Результат = ПодарочныеСертификатыВызовСервера.ОбработатьПолученныйКодНаСервере(Данные, ПолученныйТипКода, ДополнительныеПараметры);
Для Каждого СтрокаТЧ Из Результат Цикл
ЗаполнитьЗначенияСвойств(НайденныеПодарочныеСертификаты.Добавить(), СтрокаТЧ);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборПодарочногоСертификата(ТекущиеДанные)
ПодарочныеСертификатыКлиент.ОбработатьВыборПодарочногоСертификата(ВладелецФормы, ТекущиеДанные, ТипКода, РегистрироватьНовые, Ложь);
Если ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьПолученныйКодНаКлиентеВОбработкеОжидания()
ОбработатьПолученныйКодНаКлиенте(ДанныеСчитывателя, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод"));
КонецПроцедуры
&НаКлиенте
Процедура ДалееОбработчикОжидания()
Далее(Команды["Далее"]);
КонецПроцедуры
#КонецОбласти
#КонецОбласти