Настройки РМК / Кассовая ссылка СБП / Модуль формы

файл

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

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

&НаСервере
Процедура УстановитьДоступностьРеквизитов()
	
	Элементы.Магазин.Доступность = ЗначениеЗаполнено(ДоговорПодключения);
	
КонецПроцедуры

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

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