#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.Загрузить(
Параметры.НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.Выгрузить());
ДоговорПодключенияДоИзменения = Параметры.ДоговорПодключения;
ДоговорПодключения = Параметры.ДоговорПодключения;
МагазинДоИзменения = Параметры.Магазин;
Магазин = Параметры.Магазин;
КассоваяСсылка = Параметры.КассоваяСсылка;
ИдентификаторОплаты = Параметры.ИдентификаторОплаты;
МассивДоговоровПодключения = Новый Массив();
Для Каждого НастройкаПодключения Из НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров Цикл
Если МассивДоговоровПодключения.Найти(НастройкаПодключения.ДоговорПодключения) = Неопределено Тогда
МассивДоговоровПодключения.Добавить(НастройкаПодключения.ДоговорПодключения);
КонецЕсли;
КонецЦикла;
Элементы.ДоговорПодключения.СписокВыбора.ЗагрузитьЗначения(МассивДоговоровПодключения);
ОтобразитьNFCСсылку();
ОтборДляПоиска = Новый Структура("КассовыеСсылки", Истина);
ПоддерживаютсяОперацииПоКассовойСсылке = (НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.НайтиСтроки(ОтборДляПоиска).Количество() > 0);
Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.НастройкиРМК)
Или Не ПоддерживаютсяОперацииПоКассовойСсылке
Или ЗначениеЗаполнено(КассоваяСсылка) Тогда
ТолькоПросмотр = Истина;
Элементы.ДоговорПодключения.ТолькоПросмотр = Истина;
Элементы.ИдентификаторОплаты.ТолькоПросмотр = Истина;
Элементы.КассоваяСсылка.ТолькоПросмотр = Истина;
Элементы.NFCСсылка.ТолькоПросмотр = Истина;
Если Не ПоддерживаютсяОперацииПоКассовойСсылке Тогда
ШаблонСообщения = НСтр("ru = 'Форма открыта в режиме просмотра. Не найдено действующих договоров подключения к платежным системам, поддерживающих операции с видом ссылки %1'");
ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСообщения,
ПредопределенноеЗначение("Перечисление.ВидыСсылокСБП.КассоваяСсылкаСБП")));
Иначе
Если ЗначениеЗаполнено(ДоговорПодключения) Тогда
ОтборДляПоиска.Вставить("ДоговорПодключения", ДоговорПодключения);
Если НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.НайтиСтроки(ОтборДляПоиска).Количество() = 0 Тогда
ШаблонСообщения = НСтр("ru = 'Форма открыта в режиме просмотра. По указанному договору подключения не поддерживаются операции с видом ссылки %1'");
ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСообщения,
ПредопределенноеЗначение("Перечисление.ВидыСсылокСБП.КассоваяСсылкаСБП")));
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
УстановитьДоступностьКоманд();
УстановитьДоступностьРеквизитов();
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
ПараметрыЗакрытияФормы = Новый Структура();
ПараметрыЗакрытияФормы.Вставить("ДоговорПодключения", Неопределено);
ПараметрыЗакрытияФормы.Вставить("КассоваяСсылка", "");
ПараметрыЗакрытияФормы.Вставить("Магазин", "");
ПараметрыЗакрытияФормы.Вставить("ИдентификаторОплаты", "");
Если Не ТолькоПросмотр И ЗначениеЗаполнено(ИдентификаторОплаты) Тогда
ПараметрыЗакрытияФормы.Вставить("ДоговорПодключения", ДоговорПодключения);
ПараметрыЗакрытияФормы.Вставить("КассоваяСсылка", КассоваяСсылка);
ПараметрыЗакрытияФормы.Вставить("Магазин", Магазин);
ПараметрыЗакрытияФормы.Вставить("ИдентификаторОплаты", ИдентификаторОплаты);
КонецЕсли;
Оповестить("ЗавершитьСозданиеКассовойСсылкиСБП", ПараметрыЗакрытияФормы);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ОтобразитьNFCСсылку();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДоговорПодключенияПриИзменении(Элемент)
ОчиститьСообщения();
Если ДоговорПодключения = ДоговорПодключенияДоИзменения Тогда
Возврат;
КонецЕсли;
Магазин = ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка");
ОтборДляПоиска = Новый Структура("ДоговорПодключения, КассовыеСсылки", ДоговорПодключения, Истина);
НастройкиПодключения = НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.НайтиСтроки(ОтборДляПоиска);
Магазины = Новый Массив();
Для Каждого НастройкаПодключения Из НастройкиПодключения Цикл
Магазины.Добавить(НастройкаПодключения.Магазин);
КонецЦикла;
Если ЗначениеЗаполнено(ДоговорПодключения) И НастройкиПодключения.Количество() = 0 Тогда
ШаблонСообщения = НСтр("ru = 'Договор %1 не поддерживает операции с видом ссылки %2'");
ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСообщения,
ДоговорПодключения,
ПредопределенноеЗначение("Перечисление.ВидыСсылокСБП.КассоваяСсылкаСБП")));
ДоговорПодключения = ДоговорПодключенияДоИзменения;
Магазин = МагазинДоИзменения;
Иначе
ДоговорПодключенияДоИзменения = ДоговорПодключения;
Магазин = Магазины[0];
Элементы.Магазин.СписокВыбора.ЗагрузитьЗначения(Магазины);
МагазинДоИзменения = Магазины[0];
КонецЕсли;
УстановитьДоступностьКоманд();
УстановитьДоступностьРеквизитов();
КонецПроцедуры
&НаКлиенте
Процедура МагазинПриИзменении(Элемент)
ОчиститьСообщения();
Если НЕ ЗначениеЗаполнено(ДоговорПодключения) Тогда
ШаблонСообщения = НСтр("ru = 'Не выбран договор подключения.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ШаблонСообщения);
КонецЕсли;
ОтборДляПоиска = Новый Структура(
"ДоговорПодключения,Магазин,КассовыеСсылки",
ДоговорПодключения, Магазин, Истина);
Если ЗначениеЗаполнено(Магазин)
И НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.НайтиСтроки(ОтборДляПоиска).Количество() = 0 Тогда
ШаблонСообщения = НСтр("ru = 'Договор %1, Магазин %2 - не поддерживает операции с видом ссылки %3'");
ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСообщения,
ДоговорПодключения,
Магазин,
ПредопределенноеЗначение("Перечисление.ВидыСсылокСБП.КассоваяСсылкаСБП")));
Магазин = МагазинДоИзменения;
КонецЕсли;
Если Магазин <> МагазинДоИзменения Тогда
МагазинДоИзменения = Магазин;
КонецЕсли;
УстановитьДоступностьКоманд();
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияИнструкцияПрограммированияМеткиНажатие(Элемент)
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(
"https://downloads.v8.1c.ru/content/Instruction/programming-NFC-tags.pdf");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ЗакрытьФорму(Команда)
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура СформироватьQRКод(Команда)
СформироватьQRКодНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьQRКод(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПодключитьКассовуюСсылкуЗавершение",
ЭтотОбъект);
ПереводыСБПc2bКлиент.ПодключитьКассовуюСсылку(
НастройкаПодключения(),
ОписаниеОповещения,
ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПодключитьКассовуюСсылкуЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
КассоваяСсылка = Результат.КассоваяСсылка;
ИдентификаторОплаты = Результат.ИдентификаторОплаты;
ОтобразитьNFCСсылку();
КонецПроцедуры
&НаСервере
Процедура СформироватьQRКодНаСервере()
НастройкаПодключения = НастройкаПодключения();
НастройкиТорговойТочки = СистемаБыстрыхПлатежей.НастройкиПодключения(НастройкаПодключения);
Если НЕ НастройкиТорговойТочки.НастройкиСБПc2b.КассовыеСсылки Тогда
ТекстОшибки = НСтр("ru = 'Настройка подключения не поддерживает работу с кассовыми ссылками СБП.'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
РезультатСоздания = ПереводыСБПc2b.КассоваяСсылка(НастройкаПодключения);
Если ЗначениеЗаполнено(РезультатСоздания.СообщениеОбОшибке) Тогда
ОбщегоНазначения.СообщитьПользователю(РезультатСоздания.СообщениеОбОшибке);
Возврат;
КонецЕсли;
КассоваяСсылка = РезультатСоздания.КассоваяСсылка;
ИдентификаторОплаты = РезультатСоздания.ИдентификаторОплаты;
ОтобразитьNFCСсылку();
КонецПроцедуры
&НаСервере
Процедура ОтобразитьNFCСсылку()
Если ЗначениеЗаполнено(КассоваяСсылка) Тогда
NFCСсылка = ПереводыСБПc2bКлиентСервер.ФункциональнаяСсылкаNFC(КассоваяСсылка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция НастройкаПодключения()
Возврат РозничныеПродажиЛокализация.НастройкаПодключения(ДоговорПодключения, Магазин);
КонецФункции
&НаСервере
Процедура УстановитьДоступностьКоманд()
Элементы.ФормаСформироватьQRКод.Доступность = Ложь;
Элементы.ФормаПодключитьQRКод.Доступность = Ложь;
Если ЗначениеЗаполнено(ДоговорПодключения)
И НЕ ЗначениеЗаполнено(КассоваяСсылка) Тогда
ОтборДляПоиска = Новый Структура("ДоговорПодключения,КассовыеСсылки",ДоговорПодключения,Истина);
НайденныеНастройки = НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.НайтиСтроки(ОтборДляПоиска);
Если НайденныеНастройки.Количество() Тогда
Элементы.ФормаСформироватьQRКод.Доступность = НайденныеНастройки[0].КассовыеСсылки;
Элементы.ФормаПодключитьQRКод.Доступность = Элементы.ФормаСформироватьQRКод.Доступность И НайденныеНастройки[0].ПодключениеКассовойСсылки;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьРеквизитов()
Элементы.Магазин.Доступность = ЗначениеЗаполнено(ДоговорПодключения);
КонецПроцедуры
#КонецОбласти