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