#Область ОписаниеПеременных
&НаКлиенте
Перем ВыполняетсяЗакрытие;
&НаКлиенте
Перем СтэкСтраниц;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода,СчитывательМагнитныхКарт";
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
Режим = Параметры.Режим;
Дата = ТекущаяДатаСеанса();
ТребуемыйВидЗаменяемойКарты = Параметры.ТребуемыйВидЗаменяемойКарты;
ТребуемыйВидНовойКарты = Параметры.ТребуемыйВидНовойКарты;
Если Параметры.Свойство("Основание") И ЗначениеЗаполнено(Параметры.Основание) Тогда
ЗаменяемаяКарта = Параметры.Основание;
Иначе
ЗаменяемаяКарта = Параметры.ЗаменяемаяКарта;
КонецЕсли;
Партнер = Параметры.Партнер;
Контрагент = Параметры.Контрагент;
Соглашение = Параметры.Соглашение;
Если ЗначениеЗаполнено(Партнер) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Партнеры.Клиент КАК Клиент
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Партнер);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Если Не Выборка.Клиент Тогда
ВызватьИсключение СтрШаблон(НСтр("ru = 'Партнер ""%1"" не является клиентом. Регистрация карт лояльности возможна только для партнеров, являющихся клиентами.'"), Партнер);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Элементы.СоздатьНовогоПартнера.Видимость = ПравоДоступа("Добавление", Метаданные.Справочники.Партнеры);
Если Не ЗначениеЗаполнено(Партнер) И ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
ДанныеКарты = КартыЛояльностиВызовСервера.ПолучитьДанныеКартыЛояльности(ЗаменяемаяКарта);
Партнер = ДанныеКарты.Партнер;
Контрагент = ДанныеКарты.Контрагент;
Соглашение = ДанныеКарты.Соглашение;
Если ЗначениеЗаполнено(Партнер) Тогда
Элементы.ЗаполнитьИнформациюОВладельцеКарты.Доступность = Ложь;
Элементы.Партнер.Доступность = Ложь;
Элементы.СоздатьНовогоПартнера.Доступность = Ложь;
КонецЕсли;
Если ДанныеКарты.Статус = Перечисления.СтатусыКартЛояльности.Аннулирована Тогда
ВызватьИсключение СтрШаблон(НСтр("ru = 'Карта лояльности %1 уже аннулирована.'"), ЗаменяемаяКарта);
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Партнер) И Не ЗначениеЗаполнено(ЗаменяемаяКарта) И Режим = "ЗаменаКартыЛояльности" Тогда
ЗаменяемаяКарта = ПолучитьКартуПоУмолчаниюДляПартнера(Партнер);
КонецЕсли;
ОсновнойТипКода = КартыЛояльностиСервер.ПолучитьОсновнойТипКодаКартыЛояльности();
Если ЗначениеЗаполнено(ОсновнойТипКода) Тогда
ТипПервогоКодаНовойКарты = ОсновнойТипКода;
Если ОсновнойТипКода = Перечисления.ТипыКодовКарт.Штрихкод Тогда
ТипВторогоКодаНовойКарты = Перечисления.ТипыКодовКарт.МагнитныйКод;
Иначе
ТипВторогоКодаНовойКарты = Перечисления.ТипыКодовКарт.Штрихкод;
КонецЕсли;
Элементы.ТипПервогоКодаНовойКарты.Видимость = Ложь;
Иначе
ТипПервогоКодаНовойКарты = Перечисления.ТипыКодовКарт.Штрихкод;
ТипВторогоКодаНовойКарты = Перечисления.ТипыКодовКарт.МагнитныйКод;
КонецЕсли;
Если Режим = "РегистрацияНовойКартыЛояльности" Тогда
Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности;
Заголовок = НСтр("ru = 'Регистрация новой карты лояльности'");
ИначеЕсли Режим = "ЗаменаКартыЛояльности" Тогда
Если ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности;
Иначе
Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности;
КонецЕсли;
Заголовок = НСтр("ru = 'Замена карты лояльности'");
Иначе
Режим = "РегистрацияНовойКартыЛояльности";
Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборРежимаРегистрацииКартыЛояльности;
Заголовок = НСтр("ru = 'Помощник регистрации карты лояльности'");
КонецЕсли;
ЗаполнитьИнформациюОВладельцеКарты = "Сейчас";
Элементы.СтраницыКнопкиНазад.ТекущаяСтраница = Элементы.СтраницыКнопкиНазад.ПодчиненныеЭлементы.КнопкаНазадОтсутствует;
Элементы.СтраницыКнопкиДалее.ТекущаяСтраница = Элементы.СтраницыКнопкиДалее.ПодчиненныеЭлементы.КнопкаДалее;
Если Не ЗначениеЗаполнено(ОсновнойТипКода) Тогда
Текст = НСтр("ru = 'Считайте новую карту лояльности при помощи сканера штрихкода (считывателя магнитных карт) или введите код вручную'");
ИначеЕсли ОсновнойТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
Текст = НСтр("ru = 'Считайте новую карту лояльности при помощи считывателя магнитных карт или введите магнитный код вручную'");
ИначеЕсли ОсновнойТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
Текст = НСтр("ru = 'Считайте новую карту лояльности при помощи сканера штрихкода или введите штрихкод вручную'");
КонецЕсли;
НадписьСчитываниеНовойКартыЛояльности = Текст;
ЗадаватьВопросПриЗакрытии = Ложь;
ИспользуютсяГруппыДоступаПартнеров = Справочники.ГруппыДоступаПартнеров.ИспользуютсяГруппыДоступа();
Если Не ИспользуютсяГруппыДоступаПартнеров Тогда
Элементы.ГруппаДоступа.Видимость = Ложь;
КонецЕсли;
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтэкСтраниц = Новый Массив;
Если ЗаполнитьИнформациюОВладельцеКарты = "Позже" Тогда
Элементы.ГруппаИнформацияОВладельцеКарты.Доступность = Ложь;
Иначе
Элементы.ГруппаГруппаДоступа.Доступность = Ложь;
КонецЕсли;
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, ПоддерживаемыеТипыПодключаемогоОборудования);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Не ВыполняетсяЗакрытие И Модифицированность Тогда
Если ЗавершениеРаботы Тогда
ТекстПредупреждения = НСтр("ru='Данные были изменены.
|Перед завершением работы рекомендуется сохранить изменения,
|иначе измененные данные будут утеряны.'");
Отказ = Истина;
Возврат;
Иначе
Если ЗадаватьВопросПриЗакрытии Тогда
УдалитьКартуЛояльности = Не Отказ;
Отказ = Истина;
ТекстВопроса = НСтр("ru = 'Закрыть форму помощника? Введенные данные будут потеряны.'");
ПоказатьВопрос(Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект,Новый Структура("УдалитьКартуЛояльности", УдалитьКартуЛояльности) ),
ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
УдалитьКартуЛояльности = ДополнительныеПараметры.УдалитьКартуЛояльности;
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Да Тогда
ВыполняетсяЗакрытие = Истина;
Если УдалитьКартуЛояльности И ЗначениеЗаполнено(НоваяКарта) Тогда
УдалитьЗарегистрированнуюКартуЛояльности();
КонецЕсли;
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
ИначеЕсли ИмяСобытия ="TracksData" Тогда
ОбработатьДанныеСчитывателяМагнитныхКарт(Параметр);
КонецЕсли;
КонецЕсли;
Если ИмяСобытия = "ВыборПартнераНайдено" Тогда
Партнер = Параметр.Партнер;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
ЗаполнитьИнформациюОВладельцеКарты = Настройки.Получить("ЗаполнитьИнформациюОВладельцеКарты");
Если ЗначениеЗаполнено(Партнер) И ЗаполнитьИнформациюОВладельцеКарты = "Позже" Тогда
ЗаполнитьИнформациюОВладельцеКарты = "Сейчас";
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ЗаполнитьИнформациюОВладельцеКартыПриИзменении(Элемент)
Элементы.ГруппаИнформацияОВладельцеКарты.Доступность = Не ЗаполнитьИнформациюОВладельцеКарты = "Позже";
Элементы.ГруппаГруппаДоступа.Доступность = ЗаполнитьИнформациюОВладельцеКарты = "Позже";
КонецПроцедуры
&НаКлиенте
Процедура ЗаменяемаяКартаПриИзменении(Элемент)
Если ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПервыйКодНовойКартыПриИзменении(Элемент)
Если ЗначениеЗаполнено(ПервыйКодНовойКарты) Тогда
ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльностиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльностиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура МагнитныйКодНовойКартыПриИзменении(Элемент)
Если ЗначениеЗаполнено(ВторойКодНовойКарты) Тогда
ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ШтрихкодНовойКартыПриИзменении(Элемент)
Если ЗначениеЗаполнено(ВторойКодНовойКарты) Тогда
ПодключитьОбработчикОжидания("ДалееОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПартнерСчитываниеЗаменяемойКартыЛояльностиПриИзменении(Элемент)
Если Не ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
ЗаменяемаяКарта = ПолучитьКартуПоУмолчаниюДляПартнера(Партнер);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоглашениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыВыбораСоглашения = ПродажиКлиент.ПараметрыНачалаВыбораСоглашенияСКлиентом();
ПараметрыВыбораСоглашения.Элемент = Элемент;
ПараметрыВыбораСоглашения.Партнер = Партнер;
ПараметрыВыбораСоглашения.Документ = Соглашение;
ПараметрыВыбораСоглашения.ДатаДокумента = Дата;
ПараметрыВыбораСоглашения.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.РеализацияКлиенту");
ПродажиКлиент.НачалоВыбораСоглашенияСКлиентом(ПараметрыВыбораСоглашения, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТипПервогоКодаНовойКартыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#Область ОбработчикиКоманд
&НаКлиенте
Процедура Отмена(Команда)
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура Назад(Команда)
Если СтэкСтраниц.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Элементы.Страницы.ТекущаяСтраница = СтэкСтраниц[СтэкСтраниц.Количество()-1];
СтэкСтраниц.Удалить(СтэкСтраниц.Количество()-1);
УстановитьЗаголовок(Элементы.Страницы.ТекущаяСтраница);
Если СтэкСтраниц.Количество() = 0 Тогда
Элементы.СтраницыКнопкиНазад.ТекущаяСтраница = Элементы.СтраницыКнопкиНазад.ПодчиненныеЭлементы.КнопкаНазадОтсутствует;
КонецЕсли;
Элементы.Далее.КнопкаПоУмолчанию = Истина;
Элементы.СтраницыКнопкиДалее.ТекущаяСтраница = Элементы.СтраницыКнопкиДалее.ПодчиненныеЭлементы.КнопкаДалее;
ЗадаватьВопросПриЗакрытии = Истина;
КонецПроцедуры
&НаКлиенте
Процедура Далее(Команда)
ОтключитьОбработчикОжидания("ДалееОбработчикОжидания");
ОчиститьСообщения();
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборРежимаРегистрацииКартыЛояльности Тогда
Если Режим = "РегистрацияНовойКартыЛояльности" Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности);
ИначеЕсли Режим = "ЗаменаКартыЛояльности" Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности);
КонецЕсли;
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности Тогда
Если Не ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Заменяемая карта"" не заполнено.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
"ЗаменяемаяКарта");
Возврат;
КонецЕсли;
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборЗаменяемойКартыЛояльности Тогда
ТекущиеДанные = Элементы.НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ОбработатьВыборЗаменяемойКартыЛояльности(ТекущиеДанные);
КонецЕсли;
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности Тогда
Если Не ЗначениеЗаполнено(ПервыйКодНовойКарты) Тогда
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Штрихкод"" не заполнено.'");
Иначе
ТекстСообщения = НСтр("ru = 'Поле ""Магнитный код"" не заполнено.'");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
"ПервыйКодНовойКарты");
Возврат;
КонецЕсли;
ОбработатьПервыйКодНовойКартыНаКлиенте(ПервыйКодНовойКарты, ТипПервогоКодаНовойКарты, Ложь);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборНовойКартыЛояльности Тогда
ТекущиеДанные = Элементы.НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ОбработатьВыборНовойКартыЛояльности(ТекущиеДанные);
КонецЕсли;
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаУточнениеВторогоКодаКартыЛояльности Тогда
Если ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод")
И ЗначениеЗаполнено(ШтрихкодНовойКарты) Тогда
ОбработатьВторойКодНовойКартыНаКлиенте(ШтрихкодНовойКарты, Ложь);
ИначеЕсли ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод")
И ЗначениеЗаполнено(МагнитныйКодНовойКарты) Тогда
ОбработатьВторойКодНовойКартыНаКлиенте(МагнитныйКодНовойКарты, Ложь);
Иначе
Если ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Поле ""Штрихкод"" не заполнено.'"),
,
"ШтрихкодНовойКарты");
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Поле ""Магнитный код"" не заполнено.'"),
,
"МагнитныйКодНовойКарты");
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗадаватьВопросПриЗакрытии = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьНовогоПартнера(Команда)
ОткрытьФорму("Справочник.Партнеры.Форма.ПомощникНового",Новый Структура("ВводНовогоРозничногоПокупателя",Истина), ВладелецФормы);
КонецПроцедуры
&НаКлиенте
Процедура Готово(Команда)
ОчиститьСообщения();
Если НоваяКартаПерсонизирована Тогда
Если ЗаполнитьИнформациюОВладельцеКарты = "Сейчас" Тогда
Если Не ЗначениеЗаполнено(Партнер) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Клиент"" не заполнено.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
"Партнер");
Возврат;
КонецЕсли;
Иначе
Если Элементы.ГруппаДоступа.Видимость и Не ЗначениеЗаполнено(ГруппаДоступа) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Группа доступа"" не заполнено.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
"ГруппаДоступа");
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ГотовоНаСервере();
ЗадаватьВопросПриЗакрытии = Ложь;
Закрыть();
Если НоваяКартаПерсонизирована И ЗначениеЗаполнено(Партнер) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Зарегистрирована карта лояльности %1 для клиента %2.'"), НоваяКарта, Партнер);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Зарегистрирована карта лояльности %1.'"), НоваяКарта);
КонецЕсли;
Оповестить(
"Запись_КартаЛояльности",
Новый Структура,
НоваяКарта);
ПоказатьОповещениеПользователя(
НСтр("ru = 'Зарегистрирована карта лояльности'"),
ПолучитьНавигационнуюСсылку(НоваяКарта),
ТекстСообщения,
БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьАнкетыMicrosoftWord(Команда)
Если Не ЗначениеЗаполнено(НоваяКарта) Тогда
ЗарегистрироватьКартуЛояльности("Позже", Ложь);
КонецЕсли;
КартыЛояльностиКлиент.ПечатьАнкетыMicrosoftWord(НоваяКарта);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьАнкетыMXL(Команда)
Если Не ЗначениеЗаполнено(НоваяКарта) Тогда
ЗарегистрироватьКартуЛояльности("Позже", Ложь);
КонецЕсли;
КартыЛояльностиКлиент.ПечатьАнкетыMXL(НоваяКарта);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьАнкетыOpenOfficeOrgWriter(Команда)
Если Не ЗначениеЗаполнено(НоваяКарта) Тогда
ЗарегистрироватьКартуЛояльности("Позже", Ложь);
КонецЕсли;
КартыЛояльностиКлиент.ПечатьАнкетыOpenOfficeOrgWriter(НоваяКарта);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Ссылка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Ссылка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
КонецПроцедуры
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
МассивШтрихкодов = ДанныеШтрихкодов;
Иначе
МассивШтрихкодов = Новый Массив;
МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
КонецЕсли;
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности Тогда
ОбработатьПервыйКодНовойКартыНаКлиенте(МассивШтрихкодов[0].Штрихкод, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод"), Ложь);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаУточнениеВторогоКодаКартыЛояльности Тогда
Если ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ОбработатьВторойКодНовойКартыНаКлиенте(МассивШтрихкодов[0].Штрихкод, Ложь);
КонецЕсли;
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности Тогда
ОбработатьПервыйКодЗаменяемойКартыНаКлиенте(МассивШтрихкодов[0].Штрихкод, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод"), Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьДанныеСчитывателяМагнитныхКарт(Данные)
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности Тогда
ОбработатьПервыйКодНовойКартыНаКлиенте(Данные, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод"), Истина);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаУточнениеВторогоКодаКартыЛояльности Тогда
Если ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
ОбработатьВторойКодНовойКартыНаКлиенте(Данные, Истина);
КонецЕсли;
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности Тогда
ОбработатьПервыйКодЗаменяемойКартыНаКлиенте(Данные, ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод"), Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиенте
Процедура УстановитьЗаголовок(Страница)
Если Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборРежимаРегистрацииКартыЛояльности Тогда
Заголовок = НСтр("ru = 'Помощник регистрации карт лояльности'");
ИначеЕсли Режим = "РегистрацияНовойКартыЛояльности" Тогда
Заголовок = НСтр("ru = 'Регистрация новой карты лояльности'");
ИначеЕсли Режим = "ЗаменаКартыЛояльности" Тогда
Заголовок = НСтр("ru = 'Замена карты лояльности'");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиНаСтраницу(Страница)
СтэкСтраниц.Добавить(Элементы.Страницы.ТекущаяСтраница);
Элементы.Страницы.ТекущаяСтраница = Страница;
Элементы.СтраницыКнопкиНазад.ТекущаяСтраница = Элементы.СтраницыКнопкиНазад.ПодчиненныеЭлементы.КнопкаНазад;
Если Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВводИнформацииОВладельцеКарты Тогда
Элементы.СтраницыКнопкиДалее.ТекущаяСтраница = Элементы.СтраницыКнопкиДалее.ПодчиненныеЭлементы.КнопкаГотово;
Элементы.Готово.КнопкаПоУмолчанию = Истина;
Иначе
Элементы.Далее.КнопкаПоУмолчанию = Истина;
КонецЕсли;
УстановитьЗаголовок(Страница);
Если Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборНовойКартыЛояльности Тогда
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
Текст = НСтр("ru = 'Обнаружено несколько карт лояльности с магнитным кодом %1.
|Выберите подходящую карту.'");
Иначе
Текст = НСтр("ru = 'Обнаружено несколько карт лояльности со штрихкодом %1.
|Выберите подходящую карту.'");
КонецЕсли;
НадписьВыборКартыЛояльности = СтрШаблон(Текст, ПервыйКодНовойКарты);
ИначеЕсли Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборЗаменяемойКартыЛояльности Тогда
Если ТипКодаЗаменяемойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
Текст = НСтр("ru = 'Обнаружено несколько карт лояльности с магнитным кодом %1.
|Выберите подходящую карту.'");
Иначе
Текст = НСтр("ru = 'Обнаружено несколько карт лояльности со штрихкодом %1.
|Выберите подходящую карту.'");
КонецЕсли;
НадписьВыборКартыЛояльности = СтрШаблон(Текст, ПервыйКодНовойКарты);
ИначеЕсли Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности Тогда
ТекущийЭлемент = Элементы.ПервыйКодНовойКарты;
ИначеЕсли Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности Тогда
ТекущийЭлемент = Элементы.ЗаменяемаяКарта;
ИначеЕсли Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаУточнениеВторогоКодаКартыЛояльности Тогда
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
ТекущийЭлемент = Элементы.ШтрихкодНовойКарты;
Текст = НСтр("ru = 'Карта лояльности ""%1"" (Магнитный код: %2) является картой смешанного типа (имеет магнитный и штриховой коды).
|Считайте при помощи сканера штрихкода или укажите вручную штрихкод карты.'");
Иначе
ТекущийЭлемент = Элементы.МагнитныйКодНовойКарты;
Текст = НСтр("ru = 'Карта лояльности ""%1"" (Штрихкод: %2) является картой смешанного типа (имеет магнитный и штриховой коды).
|Считайте при помощи считывателя магнитных карт или укажите вручную магнитный код карты.'");
КонецЕсли;
НадписьУточнениеВторогоКодаКартыЛояльности = СтрШаблон(Текст, ВидНовойКарты, ПервыйКодНовойКарты);
ИначеЕсли Страница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВводИнформацииОВладельцеКарты Тогда
Если ТипНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКарт.Смешанная") Тогда
Текст = НСтр("ru = 'Карта лояльности ""%1"" (%2: %3, %4: %5) является персонализированной.
|Для завершения регистрации уточните информацию о владельце карты.'");
НадписьВводИнформацииОВладельцеКарты = СтрШаблон(Текст, ВидНовойКарты, ТипПервогоКодаНовойКарты, ПервыйКодНовойКарты, ТипВторогоКодаНовойКарты, ВторойКодНовойКарты);
Иначе
Текст = НСтр("ru = 'Карта лояльности ""%1"" (%2: %3) является персонализированной.
|Для завершения регистрации уточните информацию о владельце карты.'");
НадписьВводИнформацииОВладельцеКарты = СтрШаблон(Текст, ВидНовойКарты, ТипПервогоКодаНовойКарты, ПервыйКодНовойКарты);
КонецЕсли;
Если ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
НадписьВводИнформацииОВладельцеКарты = СтрШаблон(НСтр("ru = 'Заменяемая карта лояльности ""%1"" будет аннулирована.'"), ЗаменяемаяКарта)
+ Символы.ПС + НадписьВводИнформацииОВладельцеКарты;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОбработатьПервыйКодНовойКартыНаСервере(Данные, ТипКода, Предобработка)
НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Очистить();
ВторойКодНовойКарты = "";
Если ТипКода = Перечисления.ТипыКодовКарт.МагнитныйКод Тогда
ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод");
ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод");
Если Предобработка Тогда
ПервыйКодНовойКарты = Данные[0];
МагнитныйКодНовойКарты = Данные[0];
КартыЛояльности = КартыЛояльностиВызовСервера.НайтиКартыЛояльностиПоДаннымСоСчитывателяМагнитныхКарт(Данные);
Иначе
ПервыйКодНовойКарты = Данные;
МагнитныйКодНовойКарты = Данные;
КартыЛояльности = КартыЛояльностиСервер.НайтиКартыЛояльностиПоМагнитномуКоду(ПервыйКодНовойКарты);
КонецЕсли;
ШтрихкодНовойКарты = "";
Иначе
ПервыйКодНовойКарты = Данные;
ШтрихкодНовойКарты = Данные;
ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод");
ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод");
КартыЛояльности = КартыЛояльностиВызовСервера.НайтиКартыЛояльностиПоШтрихкоду(ПервыйКодНовойКарты);
МагнитныйКодНовойКарты = "";
КонецЕсли;
Для Каждого СтрокаТЧ Из КартыЛояльности.ЗарегистрированныеКартыЛояльности Цикл
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) И ТребуемыйВидНовойКарты <> СтрокаТЧ.ВидКарты Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
НоваяСтрока.Наименование = Строка(СтрокаТЧ.Ссылка) + ?(ЗначениеЗаполнено(СтрокаТЧ.Партнер) И ЗначениеЗаполнено(СтрокаТЧ.Ссылка), " " + СтрШаблон(НСтр("ru = 'Партнер: %1'"), Строка(СтрокаТЧ.Партнер)), "");
КонецЦикла;
Для Каждого СтрокаТЧ Из КартыЛояльности.НеЗарегистрированныеКартыЛояльности Цикл
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) И ТребуемыйВидНовойКарты <> СтрокаТЧ.ВидКарты Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
НоваяСтрока.Наименование = СтрШаблон(НСтр("ru = 'Незарегистрированная карта: %1'"), Строка(СтрокаТЧ.ВидКарты));
КонецЦикла;
Если НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Количество() = 0 Тогда
Если ТипКода = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Штрихкод ""%1"" не соответствует виду карт лояльности ""%2""'"), ПервыйКодНовойКарты, ТребуемыйВидНовойКарты);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Штрихкод ""%1"" не соответствует ни одному из видов карт лояльности.'"), ПервыйКодНовойКарты);
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Магнитный код ""%1"" не соответствует виду карт лояльности ""%2""'"), ПервыйКодНовойКарты, ТребуемыйВидНовойКарты);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Магнитный код ""%1"" не соответствует ни одному из видов карт лояльности.'"), ПервыйКодНовойКарты);
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
"ПервыйКодНовойКарты");
КонецЕсли;
Возврат НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Количество() > 0;
КонецФункции
&НаСервере
Функция ОбработатьВторойКодНовойКартыНаСервере(Данные, Предобработка)
Результат = Ложь;
Если ТипВторогоКодаНовойКарты = Перечисления.ТипыКодовКарт.МагнитныйКод Тогда
Если Предобработка Тогда
ВторойКодНовойКарты = Данные[0];
МагнитныйКодНовойКарты = Данные[0];
КартыЛояльности = КартыЛояльностиВызовСервера.НайтиКартыЛояльностиПоДаннымСоСчитывателяМагнитныхКарт(Данные);
Иначе
ВторойКодНовойКарты = Данные;
МагнитныйКодНовойКарты = Данные;
КартыЛояльности = КартыЛояльностиСервер.НайтиКартыЛояльностиПоМагнитномуКоду(ВторойКодНовойКарты);
КонецЕсли;
Иначе
ШтрихкодНовойКарты = Данные;
ВторойКодНовойКарты = Данные;
КартыЛояльности = КартыЛояльностиВызовСервера.НайтиКартыЛояльностиПоШтрихкоду(ВторойКодНовойКарты);
КонецЕсли;
Для Каждого СтрокаТЧ Из КартыЛояльности.НеЗарегистрированныеКартыЛояльности Цикл
Если ЗначениеЗаполнено(ВидНовойКарты) И ВидНовойКарты = СтрокаТЧ.ВидКарты Тогда
Результат = Истина;
Если ТипВторогоКодаНовойКарты = Перечисления.ТипыКодовКарт.МагнитныйКод Тогда
МагнитныйКодНовойКарты = СтрокаТЧ.МагнитныйКод;
ВторойКодНовойКарты = СтрокаТЧ.МагнитныйКод;
Иначе
ШтрихкодНовойКарты = СтрокаТЧ.Штрихкод;
ВторойКодНовойКарты = СтрокаТЧ.Штрихкод;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаТЧ Из КартыЛояльности.ЗарегистрированныеКартыЛояльности Цикл
Если ЗначениеЗаполнено(ВидНовойКарты) И ВидНовойКарты = СтрокаТЧ.ВидКарты Тогда
Если ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ТекстСообщения = НСтр("ru = 'Штрихкод ""%1"" уже зарегистрирован для карты ""%2"".'");
Поле = "ШтрихкодНовойКарты";
КодКарты = СтрокаТЧ.Штрихкод;
Иначе
ТекстСообщения = НСтр("ru = 'Магнитный код ""%1"" уже зарегистрирован для карты ""%2"".'");
Поле = "МагнитныйКодНовойКарты";
КодКарты = СтрокаТЧ.МагнитныйКод;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, КодКарты, СтрокаТЧ.Ссылка),
,
Поле);
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Если Не Результат Тогда
Если ТипВторогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Штрихкод ""%1"" не соответствует виду карт лояльности ""%2""'"), ВторойКодНовойКарты, ТребуемыйВидНовойКарты);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Штрихкод ""%1"" не соответствует ни одному из видов карт лояльности.'"), ВторойКодНовойКарты);
КонецЕсли;
Поле = "ШтрихкодНовойКарты";
Иначе
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Магнитный код ""%1"" не соответствует виду карт лояльности ""%2""'"), ВторойКодНовойКарты, ТребуемыйВидНовойКарты);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Магнитный код ""%1"" не соответствует ни одному из видов карт лояльности.'"), ВторойКодНовойКарты);
КонецЕсли;
Поле = "МагнитныйКодНовойКарты";
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
Поле);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОбработатьПервыйКодНовойКартыНаКлиенте(Данные, ТипКода, Предобработка)
ОчиститьСообщения();
Результат = ОбработатьПервыйКодНовойКартыНаСервере(Данные, ТипКода, Предобработка);
Если Не Результат Тогда
Возврат;
КонецЕсли;
Если НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Количество() > 1 Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборНовойКартыЛояльности);
ИначеЕсли НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Количество() = 1 Тогда
ОбработатьВыборНовойКартыЛояльности(НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности[0]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВторойКодНовойКартыНаКлиенте(Данные, Предобработка)
ОчиститьСообщения();
Результат = ОбработатьВторойКодНовойКартыНаСервере(Данные, Предобработка);
Если Не Результат Тогда
Возврат;
КонецЕсли;
Если НоваяКартаПерсонизирована Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВводИнформацииОВладельцеКарты);
Иначе
Готово(Команды["Готово"]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборНовойКартыЛояльности(ТекущиеДанные)
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ПервыйКодНовойКарты = ТекущиеДанные.Штрихкод;
ШтрихкодНовойКарты = ТекущиеДанные.Штрихкод;
Иначе
ПервыйКодНовойКарты = ТекущиеДанные.МагнитныйКод;
МагнитныйКодНовойКарты = ТекущиеДанные.МагнитныйКод;
КонецЕсли;
Если ЗначениеЗаполнено(НоваяКарта) и Не ЗначениеРеквизитаОбъекта(НоваяКарта, "Штрихкод") = ПервыйКодНовойКарты Тогда
УдалитьЗарегистрированнуюКартуЛояльности();
КонецЕсли;
Если ЗначениеЗаполнено(ТекущиеДанные.Ссылка) И ТекущиеДанные.Ссылка <> НоваяКарта Тогда
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ТекстСообщения = НСтр("ru = 'Карта ""%1"" со штрихкодом %2 уже зарегистрирована.'");
Иначе
ТекстСообщения = НСтр("ru = 'Карта ""%1"" с магнитным кодом %2 уже зарегистрирована.'");
КонецЕсли;
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, ТекущиеДанные.ВидКарты, ПервыйКодНовойКарты),
,
"ПервыйКодНовойКарты",);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборНовойКартыЛояльности Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, ТекущиеДанные.ВидКарты, ПервыйКодНовойКарты),
,
СтрШаблон("НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности[%1].Наименование", НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Индекс(ТекущиеДанные)),);
КонецЕсли;
ИначеЕсли НЕ ЗначениеЗаполнено(ТекущиеДанные.Ссылка)
И (ТекущиеДанные.СтатусВидаКарты <> ПредопределенноеЗначение("Перечисление.СтатусыВидовКартЛояльности.Действует")
ИЛИ (ЗначениеЗаполнено(ТекущиеДанные.ДатаОкончанияДействия) И КонецДня(ТекущиеДанные.ДатаОкончанияДействия) < Дата)) Тогда
Если ТекущиеДанные.СтатусВидаКарты = ПредопределенноеЗначение("Перечисление.СтатусыВидовКартЛояльности.Действует") Тогда
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ТекстСообщения = НСтр("ru = 'Срок действия карты ""%1"" со штрихкодом %2 истек.'");
Иначе
ТекстСообщения = НСтр("ru = 'Срок действия карты ""%1"" с магнитным кодом %2 истек.'");
КонецЕсли;
Иначе
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ТекстСообщения = НСтр("ru = 'Карта ""%1"" со штрихкодом %2 аннулирована.'");
Иначе
ТекстСообщения = НСтр("ru = 'Карта ""%1"" с магнитным кодом %2 аннулирована.'");
КонецЕсли;
КонецЕсли;
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, ТекущиеДанные.ВидКарты, ПервыйКодНовойКарты),
,
"ПервыйКодНовойКарты",);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборНовойКартыЛояльности Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, ТекущиеДанные.ВидКарты, ПервыйКодНовойКарты),
,
СтрШаблон("НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности[%1].Наименование", НайденныеКартыЛояльностиСчитываниеНовойКартыЛояльности.Индекс(ТекущиеДанные)),);
КонецЕсли;
Иначе
ВидНовойКарты = ТекущиеДанные.ВидКарты;
ТипНовойКарты = ТекущиеДанные.ТипКарты;
НоваяКартаПерсонизирована = ТекущиеДанные.Персонализирована;
Если ТекущиеДанные.ТипКарты = ПредопределенноеЗначение("Перечисление.ТипыКарт.Смешанная") Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаУточнениеВторогоКодаКартыЛояльности);
Если ТипПервогоКодаНовойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
Элементы.СтраницыУточнениеКода.ТекущаяСтраница = Элементы.СтраницыУточнениеКода.ПодчиненныеЭлементы.ГруппаУточнениеШтрихкода;
Иначе
Элементы.СтраницыУточнениеКода.ТекущаяСтраница = Элементы.СтраницыУточнениеКода.ПодчиненныеЭлементы.ГруппаУточнениеМагнитногоКода;
КонецЕсли;
Иначе
Если НоваяКартаПерсонизирована Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВводИнформацииОВладельцеКарты);
Иначе
Готово(Команды["Готово"]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОбработатьПервыйКодЗаменяемойКартыНаСервере(Данные, ТипКода, Предобработка)
НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Очистить();
ТипКодаЗаменяемойКарты = ТипКода;
Если ТипКода = Перечисления.ТипыКодовКарт.МагнитныйКод Тогда
Если Предобработка Тогда
КодЗаменяемойКарты = Данные[0];
КартыЛояльности = КартыЛояльностиВызовСервера.НайтиКартыЛояльностиПоДаннымСоСчитывателяМагнитныхКарт(Данные);
Иначе
КодЗаменяемойКарты = Данные;
КартыЛояльности = КартыЛояльностиСервер.НайтиКартыЛояльностиПоМагнитномуКоду(КодЗаменяемойКарты);
КонецЕсли;
Иначе
КодЗаменяемойКарты = Данные;
КартыЛояльности = КартыЛояльностиВызовСервера.НайтиКартыЛояльностиПоШтрихкоду(КодЗаменяемойКарты);
КонецЕсли;
Для Каждого СтрокаТЧ Из КартыЛояльности.ЗарегистрированныеКартыЛояльности Цикл
Если ЗначениеЗаполнено(ТребуемыйВидЗаменяемойКарты) И ТребуемыйВидЗаменяемойКарты <> СтрокаТЧ.ВидКарты Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
НоваяСтрока.Наименование = Строка(СтрокаТЧ.Ссылка) + ?(ЗначениеЗаполнено(СтрокаТЧ.Партнер) И ЗначениеЗаполнено(СтрокаТЧ.Ссылка), " " + СтрШаблон(НСтр("ru = 'Партнер: %1'"), Строка(СтрокаТЧ.Партнер)), "");
КонецЦикла;
Для Каждого СтрокаТЧ Из КартыЛояльности.НеЗарегистрированныеКартыЛояльности Цикл
Если ЗначениеЗаполнено(ТребуемыйВидЗаменяемойКарты) И ТребуемыйВидЗаменяемойКарты <> СтрокаТЧ.ВидКарты Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
НоваяСтрока.Наименование = СтрШаблон(НСтр("ru = 'Незарегистрированная карта: %1'"), Строка(СтрокаТЧ.ВидКарты));
КонецЦикла;
Если НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Количество() > 0 Тогда
Если ТипКодаЗаменяемойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Штрихкод ""%1"" не соответствует виду карт лояльности ""%2""'"), КодЗаменяемойКарты, ТребуемыйВидНовойКарты);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Штрихкод ""%1"" не соответствует ни одному из видов карт лояльности.'"), КодЗаменяемойКарты);
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(ТребуемыйВидНовойКарты) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Магнитный код ""%1"" не соответствует виду карт лояльности ""%2""'"), КодЗаменяемойКарты, ТребуемыйВидНовойКарты);
Иначе
ТекстСообщения = СтрШаблон(НСтр("ru = 'Магнитный код ""%1"" не соответствует ни одному из видов карт лояльности.'"), КодЗаменяемойКарты);
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
"ПервыйКодНовойКарты");
КонецЕсли;
Возврат НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Количество() > 0;
КонецФункции
&НаКлиенте
Процедура ОбработатьПервыйКодЗаменяемойКартыНаКлиенте(Данные, ТипКода, Предобработка)
ОчиститьСообщения();
Результат = ОбработатьПервыйКодЗаменяемойКартыНаСервере(Данные, ТипКода, Предобработка);
Если Не Результат Тогда
Возврат;
КонецЕсли;
Если НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Количество() > 1 Тогда
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборНовойКартыЛояльности);
ИначеЕсли НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Количество() = 1 Тогда
ОбработатьВыборЗаменяемойКартыЛояльности(НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности[0]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборЗаменяемойКартыЛояльности(ТекущиеДанные)
Если ТипКодаЗаменяемойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод") Тогда
КодЗаменяемойКарты = ТекущиеДанные.МагнитныйКод;
Иначе
КодЗаменяемойКарты = ТекущиеДанные.Штрихкод;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда
ЗаменяемаяКарта = ТекущиеДанные.Ссылка;
СтруктураДанных = КартыЛояльностиВызовСервера.ПолучитьДанныеКартыЛояльности(ТекущиеДанные.Ссылка);
Если ЗначениеЗаполнено(СтруктураДанных.Контрагент) И Не ЗначениеЗаполнено(Контрагент) Тогда
Контрагент = СтруктураДанных.Контрагент;
КонецЕсли;
Если ЗначениеЗаполнено(СтруктураДанных.Соглашение) И Не ЗначениеЗаполнено(Соглашение) Тогда
Соглашение = СтруктураДанных.Соглашение;
КонецЕсли;
ПерейтиНаСтраницу(Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеНовойКартыЛояльности);
Иначе
Если ТипКодаЗаменяемойКарты = ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод") Тогда
ТекстСообщения = НСтр("ru = 'Карта ""%1"" со штрихкодом %2 еще не зарегистрирована и не может быть заменена.'");
Иначе
ТекстСообщения = НСтр("ru = 'Карта ""%1"" с магнитным кодом %2 еще не зарегистрирована и не может быть заменена.'");
КонецЕсли;
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаСчитываниеЗаменяемойКартыЛояльности Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, ТекущиеДанные.ВидКарты, КодЗаменяемойКарты),
,
"ЗаменяемаяКарта",);
ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Страницы.ПодчиненныеЭлементы.ГруппаВыборЗаменяемойКартыЛояльности Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, ТекущиеДанные.ВидКарты, КодЗаменяемойКарты),
,
СтрШаблон("НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности[%1].Наименование", НайденныеКартыЛояльностиСчитываниеЗаменяемойКартыЛояльности.Индекс(ТекущиеДанные)),);
КонецЕсли;
Возврат;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗарегистрироватьКартуЛояльности(ЗаполнитьИнформациюОВладельцеКарты, РегистрироватьПартнера)
Если НоваяКартаПерсонизирована И ЗаполнитьИнформациюОВладельцеКарты = "Сейчас" Тогда
СтруктураДанныхКартыЛояльности = КартыЛояльностиСервер.ИнициализироватьДанныеКартыЛояльности();
СтруктураДанныхКартыЛояльности.ВидКарты = ВидНовойКарты;
Если ТипПервогоКодаНовойКарты = Перечисления.ТипыКодовКарт.Штрихкод Тогда
СтруктураДанныхКартыЛояльности.Штрихкод = ПервыйКодНовойКарты;
СтруктураДанныхКартыЛояльности.МагнитныйКод = ВторойКодНовойКарты;
Иначе
СтруктураДанныхКартыЛояльности.Штрихкод = ВторойКодНовойКарты;
СтруктураДанныхКартыЛояльности.МагнитныйКод = ПервыйКодНовойКарты;
КонецЕсли;
СтруктураДанныхКартыЛояльности.Партнер = Партнер;
СтруктураДанныхКартыЛояльности.Контрагент = Контрагент;
СтруктураДанныхКартыЛояльности.Соглашение = Соглашение;
НоваяКарта = КартыЛояльностиСервер.ЗарегистрироватьКартуЛояльности(СтруктураДанныхКартыЛояльности);
Иначе
СтруктураДанныхКартыЛояльности = КартыЛояльностиСервер.ИнициализироватьДанныеКартыЛояльности();
СтруктураДанныхКартыЛояльности.ВидКарты = ВидНовойКарты;
СтруктураДанныхКартыЛояльности.Вставить("ГруппаДоступа", ГруппаДоступа);
Если ТипПервогоКодаНовойКарты = Перечисления.ТипыКодовКарт.Штрихкод Тогда
СтруктураДанныхКартыЛояльности.Штрихкод = ПервыйКодНовойКарты;
СтруктураДанныхКартыЛояльности.МагнитныйКод = ВторойКодНовойКарты;
Иначе
СтруктураДанныхКартыЛояльности.Штрихкод = ВторойКодНовойКарты;
СтруктураДанныхКартыЛояльности.МагнитныйКод = ПервыйКодНовойКарты;
КонецЕсли;
Если НоваяКартаПерсонизирована И РегистрироватьПартнера Тогда
НоваяКарта = КартыЛояльностиСервер.СоздатьПартнераИЗарегистрироватьКартуЛояльности(СтруктураДанныхКартыЛояльности);
Иначе
НоваяКарта = КартыЛояльностиСервер.ЗарегистрироватьКартуЛояльности(СтруктураДанныхКартыЛояльности);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИзменитьДанныеПартнераКартыЛояльности()
КартаОбъект = НоваяКарта.ПолучитьОбъект();
Если НоваяКартаПерсонизирована Тогда
Если ЗаполнитьИнформациюОВладельцеКарты = "Сейчас" Тогда
КартаОбъект.Партнер = Партнер;
КартаОбъект.Контрагент = Контрагент;
КартаОбъект.Соглашение = Соглашение;
Иначе
Если Не ЗначениеЗаполнено(КартаОбъект.Партнер) Тогда
СтруктураДанныхКартыЛояльности = КартыЛояльностиСервер.ИнициализироватьДанныеКартыЛояльности();
СтруктураДанныхКартыЛояльности.ВидКарты = ВидНовойКарты;
Если ТипПервогоКодаНовойКарты = Перечисления.ТипыКодовКарт.Штрихкод Тогда
СтруктураДанныхКартыЛояльности.Штрихкод = ПервыйКодНовойКарты;
СтруктураДанныхКартыЛояльности.МагнитныйКод = ВторойКодНовойКарты;
Иначе
СтруктураДанныхКартыЛояльности.Штрихкод = ВторойКодНовойКарты;
СтруктураДанныхКартыЛояльности.МагнитныйКод = ПервыйКодНовойКарты;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
КартаОбъект.Партнер = КартыЛояльностиСервер.СоздатьПартнераДержателяКартыЛояльности(СтруктураДанныхКартыЛояльности);
КонецЕсли;
КартаОбъект.Контрагент = Неопределено;
КартаОбъект.Соглашение = Неопределено;
КонецЕсли;
Иначе
КартаОбъект.Партнер = Неопределено;
КартаОбъект.Контрагент = Неопределено;
КартаОбъект.Соглашение = Неопределено;
КонецЕсли;
КартаОбъект.Записать();
КонецПроцедуры
&НаСервере
Процедура УдалитьЗарегистрированнуюКартуЛояльности()
УстановитьПривилегированныйРежим(Истина);
КартаОбъект = НоваяКарта.ПолучитьОбъект();
КартаОбъект.Удалить();
НоваяКарта = Справочники.КартыЛояльности.ПустаяСсылка();
КонецПроцедуры
&НаСервере
Процедура ГотовоНаСервере()
Если Не ЗначениеЗаполнено(НоваяКарта) Тогда
ЗарегистрироватьКартуЛояльности(ЗаполнитьИнформациюОВладельцеКарты, Истина);
Иначе
ИзменитьДанныеПартнераКартыЛояльности();
КонецЕсли;
Если ЗначениеЗаполнено(ЗаменяемаяКарта) Тогда
КартыЛояльностиСервер.АннулироватьКартуЛояльности(ЗаменяемаяКарта);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееОбработчикОжидания()
Далее(Команды["Далее"]);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКартуПоУмолчаниюДляПартнера(Партнер)
Возврат КартыЛояльностиСервер.ПолучитьКартуПоУмолчаниюДляПартнера(Партнер);
КонецФункции
&НаСервереБезКонтекста
Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область Инициализация
ВыполняетсяЗакрытие = Ложь;
#КонецОбласти