#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Параметры.ОснованиеПлатежа) Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ОснованиеПлатежа = Параметры.ОснованиеПлатежа;
НастройкаОнлайнОплаты = ОнлайнОплатыСлужебный.НастройкаОнлайнОплатыОснованияПлатежа(ОснованиеПлатежа);
Если НастройкаОнлайнОплаты = Неопределено Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не обнаружены настройки подключения к ЮKassa'"));
Отказ = Истина;
Возврат;
КонецЕсли;
Если Не ОнлайнОплатыСлужебный.ПроверитьЗаполнениеОснованияПлатежа(ОснованиеПлатежа) Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Если НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис Тогда
ЗаполнитьСпискиКонтактнойИнформации();
КонецЕсли;
ТребуетсяОбновлениеДанныхВСервисе = Ложь;
ТребуетсяОбновлениеКонтактнойИнформацииВСервисе = Ложь;
ДанныеОснованияПлатежаВСервисеОбработаны = Ложь;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
ВариантОтправки = "ЭлектроннаяПочта";
ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда
ВариантОтправки = "Телефон";
КонецЕсли;
НастройкиШаблонов = ОнлайнОплатыСлужебный.НастройкиШаблоновСообщений();
КлючПоПодсистемам = УправлениеЭлементамиФормыПоПодсистемам();
КлючПоНастройкам = УправлениеЭлементамиФормыПоНастройкам();
УправлениеЭлементамиФормыПоДанным();
КлючСохраненияПоложенияОкна = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='ОнлайнОплата.%1.%2%3'"),
Заголовок,
КлючПоПодсистемам,
КлючПоНастройкам);
ВосстановитьШаблоныПоУмолчанию();
РезультатОбновления = ОбновлениеИнформационнойБазы.ОбъектОбработан(
"Справочник.НастройкиОнлайнОплат.ФормаПодготовкиПлатежнойСсылки");
Если Не РезультатОбновления.Обработан Тогда
ТолькоПросмотр = Истина;
Элементы.ДекорацияДлительнаяОперация.Видимость = Ложь;
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Не завершен переход на новую версию программы,
| формирование и отправка ссылки временно запрещены.'");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УправлениеЭлементамиФормыПоВариантуОтправки();
Если Не ТолькоПросмотр Тогда
ЗаполнитьДанныеОснованияПлатежаВСервисе();
ИнтернетПоддержкаПользователейКлиент.УстановитьОтображениеКнопкиКопироватьВБуфер(
Элементы,
СтандартныйФорматДанныхБуфераОбмена.Текст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Если НастройкиШаблонов.Используется
И ЗначениеЗаполнено(ОснованиеПлатежа) Тогда
СохранитьШаблоныПоУмолчанию(
ОснованиеПлатежа,
ШаблонСообщенияЭлектроннаяПочта,
ШаблонСообщенияТелефон);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
#Область ДоставкаЧека
&НаКлиенте
Процедура ВариантДоставкиЧекаЭлектроннаяПочтаПриИзменении(Элемент)
ТребуетсяОбновлениеКонтактнойИнформацииВСервисе = Истина;
УправлениеЭлементамиФормыПоДанным();
КонецПроцедуры
&НаКлиенте
Процедура ВариантДоставкиЧекаТелефонПриИзменении(Элемент)
ТребуетсяОбновлениеКонтактнойИнформацииВСервисе = Истина;
УправлениеЭлементамиФормыПоДанным();
КонецПроцедуры
&НаКлиенте
Процедура ДоставкаЧекаЭлектроннаяПочтаПриИзменении(Элемент)
ВариантДоставкиЧека = "ЭлектроннаяПочта";
ТребуетсяОбновлениеКонтактнойИнформацииВСервисе = Истина;
УправлениеЭлементамиФормыПоДанным();
КонецПроцедуры
&НаКлиенте
Процедура ДоставкаЧекаТелефонПриИзменении(Элемент)
ДоставкаЧекаТелефон = ФорматироватьНомер(ДоставкаЧекаТелефон);
ВариантДоставкиЧека = "Телефон";
ТребуетсяОбновлениеКонтактнойИнформацииВСервисе = Истина;
УправлениеЭлементамиФормыПоДанным();
КонецПроцедуры
#КонецОбласти
#Область ОтправкаСсылки
&НаКлиенте
Процедура ВариантОтправкиЭлектроннаяПочтаПриИзменении(Элемент)
УправлениеЭлементамиФормыПоВариантуОтправки();
КонецПроцедуры
&НаКлиенте
Процедура ВариантОтправкиТелеграмПриИзменении(Элемент)
УправлениеЭлементамиФормыПоВариантуОтправки();
КонецПроцедуры
&НаКлиенте
Процедура ВариантОтправкиТелефонПриИзменении(Элемент)
УправлениеЭлементамиФормыПоВариантуОтправки();
КонецПроцедуры
&НаКлиенте
Процедура ВариантОтправкиWhatsAppПриИзменении(Элемент)
УправлениеЭлементамиФормыПоВариантуОтправки();
КонецПроцедуры
#КонецОбласти
#Область ПодсказкаФормы
&НаКлиенте
Процедура ДекорацияПояснениеКФормеОбработкаНавигационнойСсылки(
Элемент,
НавигационнаяСсылкаФорматированнойСтроки,
СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьНастройку" Тогда
СтандартнаяОбработка = Ложь;
ОткрытьНастройкуОнлайнОплаты();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОбновитьСсылку(Команда)
Если ЗначениеЗаполнено(ПлатежнаяСсылка)
Или ТребуетсяОбновлениеДанныхВСервисе
Или ТребуетсяОбновлениеКонтактнойИнформацииВСервисе Тогда
НачатьФормированиеПлатежнойСсылки();
Иначе
ЗаполнитьДанныеОснованияПлатежаВСервисе();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КопироватьВБуфер(Команда)
КопироватьСсылкуВБуфер();
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьСсылку(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаОтменитьСсылку", ЭтотОбъект);
ПоказатьВопрос(Оповещение,
НСтр("ru = 'Платежная ссылка станет недоступна для оплаты покупателю. Продолжить?'"),
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьСсылку(Команда)
Если ЗначениеЗаполнено(ПлатежнаяСсылка) Тогда
Закрыть();
ОтправитьПлатежнуюСсылку();
Иначе
ОбработкаОтправки = Новый ОписаниеОповещения("ОтправитьСсылкуПослеФормирования", ЭтотОбъект);
НачатьФормированиеПлатежнойСсылки(ОбработкаОтправки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ОтправкаСсылки
&НаКлиенте
Процедура ОтправитьПлатежнуюСсылку()
ШаблоныИспользуются = НастройкиШаблонов.Используется;
Если ВариантОтправки = "ЭлектроннаяПочта" Тогда
Если ШаблоныИспользуются И ЗначениеЗаполнено(ШаблонСообщенияЭлектроннаяПочта) Тогда
СформироватьСообщениеДляОтправки(КонструкторПараметровОтправки(ШаблонСообщенияЭлектроннаяПочта, "Письмо"));
Иначе
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(КонструкторПараметровОтправкиБезШаблона());
КонецЕсли;
КонецЕсли;
ИначеЕсли ВариантОтправки = "Телефон" Тогда
Если ШаблоныИспользуются И ЗначениеЗаполнено(ШаблонСообщенияТелефон) Тогда
СформироватьСообщениеДляОтправки(КонструкторПараметровОтправки(ШаблонСообщенияТелефон, "СообщениеSMS"));
Иначе
ПоказатьФормуСообщения(
Новый Структура("Текст, Получатель, ДополнительныеПараметры", ПлатежнаяСсылка, СписокПолучателей())
,
"СообщениеSMS",
ОснованиеПлатежа);
КонецЕсли;
ИначеЕсли ВариантОтправки = "Телеграм" Тогда
ПараметрыОтправки = ИнтернетПоддержкаПользователейКлиент.НовыйПараметрыОтправкиВМессенджеры();
ПараметрыОтправки.Мессенджер = "Телеграм";
ИнтернетПоддержкаПользователейКлиент.ОткрытьURLОтправкиВМессенджеры(
СообщениеДляМессенджеров(ВариантОтправки),
ПлатежнаяСсылка,
ПараметрыОтправки);
ИначеЕсли ВариантОтправки = "WhatsApp" Тогда
ПараметрыОтправки = ИнтернетПоддержкаПользователейКлиент.НовыйПараметрыОтправкиВМессенджеры();
ПараметрыОтправки.Мессенджер = "WhatsApp";
ПараметрыОтправки.СписокПолучателей = СписокПолучателей();
ИнтернетПоддержкаПользователейКлиент.ОткрытьURLОтправкиВМессенджеры(
СообщениеДляМессенджеров(ВариантОтправки),
ПлатежнаяСсылка,
ПараметрыОтправки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьСсылкуПослеФормирования(Результат, ДопПараметры) Экспорт
Если ЗначениеЗаполнено(ПлатежнаяСсылка) Тогда
Закрыть();
ОтправитьПлатежнуюСсылку();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция КонструкторПараметровОтправки(Шаблон, ВидСообщения)
ПараметрыОтправки = Новый Структура();
ПараметрыОтправки.Вставить("Шаблон", Шаблон);
ПараметрыОтправки.Вставить("Предмет", ОснованиеПлатежа);
ПараметрыОтправки.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыОтправки.Вставить("ДополнительныеПараметры", Новый Структура);
ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПреобразовыватьHTMLДляФорматированногоДокумента", Истина);
ПараметрыОтправки.ДополнительныеПараметры.Вставить("ВидСообщения", ВидСообщения);
ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПроизвольныеПараметры", Новый Соответствие);
ПараметрыОтправки.ДополнительныеПараметры.Вставить("ОтправитьСразу", Ложь);
ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПлатежнаяСсылка", ПлатежнаяСсылка);
ПараметрыОтправки.ДополнительныеПараметры.Вставить("КонтактныеДанныеЧека", КонтактныеДанныеЧека());
ПараметрыОтправки.ДополнительныеПараметры.Вставить("СценарийЗаполнения", "ОнлайнОплаты");
Возврат ПараметрыОтправки;
КонецФункции
&НаКлиенте
Функция КонструкторПараметровОтправкиБезШаблона()
ПараметрыСообщения = Новый Структура;
ПараметрыСообщения.Вставить("Получатель", СписокПолучателей());
ПараметрыСообщения.Вставить("Предмет", ОснованиеПлатежа);
ПараметрыСообщения.Вставить("ПлатежнаяСсылка", ПлатежнаяСсылка);
ПараметрыСообщения.Вставить("Тема", НСтр("ru = 'Ссылка для оплаты'"));
Если ИнтернетПоддержкаПользователейВызовСервера.ОтправлятьПисьмаВФорматеHTML() Тогда
ПараметрыСообщения.Вставить(
"Текст",
Новый Структура(
"ТекстHTML, СтруктураВложений",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстПисьмаБезШаблонаHTML(),
ПлатежнаяСсылка),
Новый Структура()));
Иначе
ПараметрыСообщения.Вставить(
"Текст",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПисьмаБезШаблонаТекст(), ПлатежнаяСсылка));
КонецЕсли;
ИнтеграцияПодсистемБИПКлиент.ЗаполнитьПараметрыСообщенияБезШаблона(ПараметрыСообщения);
ОнлайнОплатыКлиентПереопределяемый.ЗаполнитьПараметрыСообщенияБезШаблона(ПараметрыСообщения);
Возврат ПараметрыСообщения;
КонецФункции
&НаКлиенте
Процедура СформироватьСообщениеДляОтправки(ПараметрыОтправки)
Результат = СформироватьСообщениеНаСервере(ПараметрыОтправки);
ПоказатьФормуСообщения(Результат, ПараметрыОтправки.ДополнительныеПараметры.ВидСообщения, ПараметрыОтправки.Предмет);
КонецПроцедуры
&НаСервереБезКонтекста
Функция СформироватьСообщениеНаСервере(Знач ПараметрыОтправки)
МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений");
Результат = МодульШаблоныСообщений.СформироватьСообщение(
ПараметрыОтправки.Шаблон,
ПараметрыОтправки.Предмет,
ПараметрыОтправки.УникальныйИдентификатор,
ПараметрыОтправки.ДополнительныеПараметры);
Вложения = Новый Массив;
Для каждого ЭлементКоллекции Из Результат.Вложения Цикл
ТекущееВложение = Новый Структура;
ТекущееВложение.Вставить("Представление");
ТекущееВложение.Вставить("АдресВоВременномХранилище");
ТекущееВложение.Вставить("Кодировка");
ТекущееВложение.Вставить("Идентификатор");
ЗаполнитьЗначенияСвойств(ТекущееВложение, ЭлементКоллекции);
Вложения.Добавить(ТекущееВложение);
КонецЦикла;
Результат.Вставить("Предмет", ПараметрыОтправки.Предмет);
Результат.Вложения = Вложения;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПоказатьФормуСообщения(Сообщение, ВидСообщения, Предмет)
Если ВидСообщения = "СообщениеSMS" Тогда
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда
ДополнительныеПараметры = Новый Структура("ИсточникКонтактнойИнформации, Предмет, ПеревестиВТранслит");
Если Сообщение.ДополнительныеПараметры <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, Сообщение.ДополнительныеПараметры);
КонецЕсли;
ДополнительныеПараметры.Предмет = Предмет;
Получатели = Новый Массив;
ЗаполнитьПолучателейИзСообщения(Получатели, Сообщение);
МодульОтправкаSMSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОтправкаSMSКлиент");
МодульОтправкаSMSКлиент.ОтправитьSMS(Получатели, Сообщение.Текст, ДополнительныеПараметры);
Иначе
КопироватьСсылкуВБуфер();
КонецЕсли;
Иначе
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(Сообщение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПолучателейИзСообщения(Получатели, Сообщение)
Если ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений") Тогда
Для каждого ЭлементКоллекции Из Сообщение.Получатель Цикл
КонтактныеДанные = Новый Структура;
КонтактныеДанные.Вставить("Телефон", ЭлементКоллекции.Значение);
КонтактныеДанные.Вставить("Представление", ЭлементКоллекции.Представление);
КонтактныеДанные.Вставить("ИсточникКонтактнойИнформации", Неопределено);
Получатели.Добавить(КонтактныеДанные);
КонецЦикла;
ИначеЕсли ТипЗнч(Сообщение.Получатель) = Тип("Массив") Тогда
Для каждого ЭлементКоллекции Из Сообщение.Получатель Цикл
КонтактныеДанные = Новый Структура;
КонтактныеДанные.Вставить("Телефон", ЭлементКоллекции.НомерТелефона);
КонтактныеДанные.Вставить("Представление", ЭлементКоллекции.Представление);
КонтактныеДанные.Вставить("ИсточникКонтактнойИнформации", ЭлементКоллекции.ИсточникКонтактнойИнформации);
Получатели.Добавить(КонтактныеДанные);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ТекстПисьмаБезШаблонаHTML()
HTMLСтрока =
"<html>
|<head>
|<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
|<meta http-equiv=""X-UA-Compatible"" content=""IE=Edge"" />
|<meta name=""format-detection"" content=""telephone=no"" />
|</head>
|<body>
|<p>Ссылка для оплаты: <a href=""%1"">%1</a></p>
|
|</body>
|</html>";
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1'"), HTMLСтрока);
КонецФункции
&НаКлиенте
Функция ТекстПисьмаБезШаблонаТекст()
Возврат НСтр("ru = 'Ссылка для оплаты: %1'");
КонецФункции
&НаСервере
Функция СписокПолучателей()
СписокПолучателей = Новый СписокЗначений;
Если ВариантОтправки = "Телеграм" Или ВариантОтправки = "WhatsApp" Тогда
ВариантОтправкиДляСпискаПолучателей = "Телефон";
Иначе
ВариантОтправкиДляСпискаПолучателей = ВариантОтправки;
КонецЕсли;
Если ВариантОтправкиДляСпискаПолучателей = "ЭлектроннаяПочта" И ЗначениеЗаполнено(ДоставкаЧекаЭлектроннаяПочта) Тогда
СписокПолучателей.Добавить(ДоставкаЧекаЭлектроннаяПочта);
ИначеЕсли ВариантОтправкиДляСпискаПолучателей = "Телефон" И ЗначениеЗаполнено(ДоставкаЧекаТелефон) Тогда
СписокПолучателей.Добавить("+7" + ФорматироватьНомер(ДоставкаЧекаТелефон));
Иначе
ИнтеграцияПодсистемБИП.ПриФормированииСпискаПолучателейСообщения(
ОснованиеПлатежа,
ВариантОтправкиДляСпискаПолучателей,
СписокПолучателей);
ОнлайнОплатыПереопределяемый.ПриФормированииСпискаПолучателейСообщения(
ОснованиеПлатежа,
ВариантОтправкиДляСпискаПолучателей,
СписокПолучателей);
КонецЕсли;
Возврат СписокПолучателей;
КонецФункции
&НаКлиенте
Функция СообщениеДляМессенджеров(ВариантОтправки)
Если ВариантОтправки = "WhatsApp" Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ссылка для оплаты: %1'"),
ПлатежнаяСсылка);
Иначе
ТекстСообщения = НСтр("ru = 'Ссылка для оплаты.'");
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
#КонецОбласти
#Область РаботаССервисом
&НаКлиенте
Процедура ЗаполнитьДанныеОснованияПлатежаВСервисе()
ИмяМетода = "ДанныеОснованияПлатежаВСервисе";
ВходящиеПараметры = Новый Структура;
ВходящиеПараметры.Вставить("ОснованиеПлатежа", ОснованиеПлатежа);
ВходящиеПараметры.Вставить("НастройкаОнлайнОплаты", НастройкаОнлайнОплаты);
УправлениеЭлементамиФормаПриОжиданииОтветаСервиса(НСтр("ru = 'Ожидание ответа сервиса о текущем состоянии счета.'"));
ДлительнаяОперация = ДанныеОснованияПлатежаВСервисе(ВходящиеПараметры, УникальныйИдентификатор);
ОжидатьЗавершенияМетодаСервиса(ИмяМетода, ДлительнаяОперация);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьДанныеОснованияПлатежаВСервисе()
Если ДанныеОснованияПлатежаВСервисе = Неопределено Тогда
Возврат;
КонецЕсли;
Если ДанныеОснованияПлатежаВСервисе.ОтсутствуетДоступ
Или ДанныеОснованияПлатежаВСервисе.Статус = "Ошибка" Тогда
ДанныеОснованияПлатежаВСервисеОбработаны = Ложь;
Элементы.КопироватьВБуфер.Доступность = Ложь;
Элементы.ДекорацияПояснениеКФорме.Заголовок = НСтр("ru = 'Ошибка во время выполнения запроса.'");
Возврат;
КонецЕсли;
ДанныеОснованияПлатежаВСервисеОбработаны = Истина;
Если ДанныеОснованияПлатежаВСервисе.Статус = "Новый" Тогда
СсылкаОтменена = Ложь;
НачатьФормированиеПлатежнойСсылки();
Иначе
Элементы.ДекорацияПояснениеКФорме.Заголовок = "";
ПлатежнаяСсылка = ДанныеОснованияПлатежаВСервисе.ПлатежнаяСсылка;
КонтактныеДанныеЭлектронногоЧека = ДанныеОснованияПлатежаВСервисе.КонтактныеДанныеЭлектронногоЧека;
Если ДанныеОснованияПлатежаВСервисе.Статус = "НеОплачен" Тогда
Если ОснованиеПлатежаИзменено(ОснованиеПлатежа, НастройкаОнлайнОплаты, ДанныеОснованияПлатежаВСервисе) Тогда
ТребуетсяОбновлениеДанныхВСервисе = Истина;
КонецЕсли;
ИначеЕсли ДанныеОснованияПлатежаВСервисе.Статус = "Отменен" Тогда
СсылкаОтменена = Истина;
Иначе
УстановитьВариантДоставкиЧека(КонтактныеДанныеЭлектронногоЧека);
СсылкаОтменена = Ложь;
КонецЕсли;
КонецЕсли;
УправлениеЭлементамиФормыПоДанным();
КонецПроцедуры
&НаКлиенте
Процедура НачатьФормированиеПлатежнойСсылки(Знач ОписаниеОповещения = Неопределено)
ОчиститьСообщения();
КонтактныеДанныеЧека = КонтактныеДанныеЧека();
Если Не ПроверитьВозможностьФормированияПлатежнойСсылки(КонтактныеДанныеЧека) Тогда
Возврат;
КонецЕсли;
ИмяМетода = "ПлатежнаяСсылка";
ВходящиеПараметры = Новый Структура;
ВходящиеПараметры.Вставить("ОснованиеПлатежа", ОснованиеПлатежа);
ВходящиеПараметры.Вставить("НастройкаОнлайнОплаты", НастройкаОнлайнОплаты);
ВходящиеПараметры.Вставить("КонтактныеДанныеЧека", КонтактныеДанныеЧека);
УправлениеЭлементамиФормаПриОжиданииОтветаСервиса(НСтр("ru = 'Ожидание формирования платежной ссылки.'"));
ДлительнаяОперация = ФормированиеПлатежнойСсылкиВСервисе(ВходящиеПараметры, УникальныйИдентификатор);
ОжидатьЗавершенияМетодаСервиса(ИмяМетода, ДлительнаяОперация, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура НачатьОтменуПлатежнойСсылки(Знач ОписаниеОповещения = Неопределено)
ОчиститьСообщения();
ИмяМетода = "ОтменаПлатежнойСсылки";
ВходящиеПараметры = Новый Структура;
ВходящиеПараметры.Вставить("ОснованиеПлатежа", ОснованиеПлатежа);
ВходящиеПараметры.Вставить("НастройкаОнлайнОплаты", НастройкаОнлайнОплаты);
УправлениеЭлементамиФормаПриОжиданииОтветаСервиса(НСтр("ru = 'Ожидание отмены платежной ссылки.'"));
ДлительнаяОперация = ОтменаПлатежнойСсылкиВСервисе(ВходящиеПараметры, УникальныйИдентификатор);
ОжидатьЗавершенияМетодаСервиса(ИмяМетода, ДлительнаяОперация, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Асинх Процедура КопироватьСсылкуВБуфер()
УдалосьПоместить = Ждать ИнтернетПоддержкаПользователейКлиент.ПоместитьСтрокуВБуферОбмена(
ПлатежнаяСсылка);
Если УдалосьПоместить Тогда
ПоказатьОповещениеПользователя(
НСтр("ru = 'Ссылка получена'"),
,
НСтр("ru = 'Ссылка для оплаты через ЮKassa скопирована в буфер обмена'"));
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОснованиеПлатежаИзменено(
Знач ОснованиеПлатежа,
Знач НастройкаОнлайнОплаты,
Знач ДанныеОснованияПлатежаВСервисе)
ВходящиеПараметры = Новый Структура;
ВходящиеПараметры.Вставить("ОснованиеПлатежа", ОснованиеПлатежа);
ВходящиеПараметры.Вставить("НастройкаОнлайнОплаты", НастройкаОнлайнОплаты);
ВходящиеПараметры.Вставить("ДанныеОснованияПлатежаВСервисе", ДанныеОснованияПлатежаВСервисе);
Возврат ОнлайнОплатыСлужебный.ОснованиеПлатежаИзменено(ВходящиеПараметры);
КонецФункции
&НаКлиенте
Функция ПроверитьВозможностьФормированияПлатежнойСсылки(КонтактныеДанныеЧека)
Проверено = Истина;
СообщенияОбОшибках = Новый Массив;
Если НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис Тогда
Если ЗначениеЗаполнено(КонтактныеДанныеЧека) Тогда
Если ВариантДоставкиЧека = "ЭлектроннаяПочта"
И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(КонтактныеДанныеЧека) Тогда
Проверено = Ложь;
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Некорректный адрес доставки электронного чека'"));
КонецЕсли;
Иначе
Проверено = Ложь;
Если ВариантДоставкиЧека = "ЭлектроннаяПочта" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указан адрес доставки электронного чека'"));
ИначеЕсли ВариантДоставкиЧека = "Телефон" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Не указан номер телефона для доставки электронного чека'"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Проверено;
КонецФункции
#КонецОбласти
#Область РаботаССервисомВФоне
&НаСервереБезКонтекста
Функция ДанныеОснованияПлатежаВСервисе(Знач ВходящиеПараметры, Знач ИдентификаторФормы)
ДлительнаяОперация = ОнлайнОплатыСлужебный.ДанныеОснованияПлатежаВСервисеВФоне(
ВходящиеПараметры,
ИдентификаторФормы);
Возврат ДлительнаяОперация;
КонецФункции
&НаСервереБезКонтекста
Функция ФормированиеПлатежнойСсылкиВСервисе(Знач ВходящиеПараметры, Знач ИдентификаторФормы)
ДлительнаяОперация = ОнлайнОплатыСлужебный.ФормированиеПлатежнойСсылкиВСервисеВФоне(
ВходящиеПараметры,
ИдентификаторФормы);
Возврат ДлительнаяОперация;
КонецФункции
&НаСервереБезКонтекста
Функция ОтменаПлатежнойСсылкиВСервисе(Знач ВходящиеПараметры, Знач ИдентификаторФормы)
ДлительнаяОперация = ОнлайнОплатыСлужебный.ОтменаПлатежнойСсылкиВСервисеВФоне(
ВходящиеПараметры,
ИдентификаторФормы);
Возврат ДлительнаяОперация;
КонецФункции
&НаКлиенте
Процедура ОжидатьЗавершенияМетодаСервиса(
Знач ИмяМетода,
Знач ДлительнаяОперация,
Знач ОписаниеОповещения = Неопределено)
ДопПараметры = Новый Структура;
ДопПараметры.Вставить("ИмяМетода", ИмяМетода);
ДопПараметры.Вставить("ОписаниеОповещения", ОписаниеОповещения);
ДлительнаяОперацияЗавершение = Новый ОписаниеОповещения("МетодСервисаЗавершение", ЭтотОбъект, ДопПараметры);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Ложь;
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ПараметрыОжидания.ОповещениеПользователя.Показать = Ложь;
ПараметрыОжидания.ВыводитьСообщения = Истина;
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ДлительнаяОперацияЗавершение, ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура МетодСервисаЗавершение(Знач Результат, Знач ДопПараметры) Экспорт
Элементы.ДекорацияДлительнаяОперация.Видимость = Ложь;
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.КраткоеПредставлениеОшибки);
Элементы.ОбновитьСсылку.Видимость = Истина;
Возврат;
КонецЕсли;
Если Не ЭтоАдресВременногоХранилища(Результат.АдресРезультата) Тогда
Возврат;
КонецЕсли;
РезультатМетода = РезультатФоновогоЗаданияИзВременногоХранилища(Результат.АдресРезультата);
Если ДопПараметры.ИмяМетода = "ПлатежнаяСсылка" Тогда
ПлатежнаяСсылка = РезультатМетода.ПлатежнаяСсылка;
МагазинПодключен = Не РезультатМетода.ОтсутствуетДоступ;
ДанныеОснованияПлатежаВСервисе.Статус = "НеОплачен";
СсылкаОтменена = Ложь;
Если ЗначениеЗаполнено(ПлатежнаяСсылка) Тогда
ТребуетсяОбновлениеДанныхВСервисе = Ложь;
ТребуетсяОбновлениеКонтактнойИнформацииВСервисе = Ложь;
КонецЕсли;
УправлениеЭлементамиФормыПоДанным();
ИначеЕсли ДопПараметры.ИмяМетода = "ДанныеОснованияПлатежаВСервисе" Тогда
ДанныеОснованияПлатежаВСервисе = РезультатМетода;
МагазинПодключен = Не РезультатМетода.ОтсутствуетДоступ;
ОбработатьДанныеОснованияПлатежаВСервисе();
ИначеЕсли ДопПараметры.ИмяМетода = "ОтменаПлатежнойСсылки" Тогда
Если ДанныеОснованияПлатежаВСервисе <> Неопределено Тогда
ДанныеОснованияПлатежаВСервисе.Статус = РезультатМетода.Статус;
КонецЕсли;
Если РезультатМетода.Статус = "Отменен" Тогда
СсылкаОтменена = Истина;
Иначе
СсылкаОтменена = Ложь;
КонецЕсли;
УправлениеЭлементамиФормыПоДанным();
КонецЕсли;
Для Каждого Сообщение Из Результат.Сообщения Цикл
Сообщение.Сообщить();
КонецЦикла;
Если ДопПараметры.ОписаниеОповещения <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ДопПараметры.ОписаниеОповещения, РезультатМетода);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция РезультатФоновогоЗаданияИзВременногоХранилища(Знач Адрес)
Результат = ПолучитьИзВременногоХранилища(Адрес);
УдалитьИзВременногоХранилища(Адрес);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область КонтактнаяИнформация
&НаСервере
Процедура УстановитьВариантДоставкиЧека(Знач КонтактныеДанныеЭлектронногоЧека)
ЭтоАдресЭлектроннойПочты = ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(
КонтактныеДанныеЭлектронногоЧека);
Если ЭтоАдресЭлектроннойПочты Тогда
ДоставкаЧекаЭлектроннаяПочта = КонтактныеДанныеЭлектронногоЧека;
ВариантДоставкиЧека = "ЭлектроннаяПочта";
Иначе
ДоставкаЧекаТелефон = ФорматироватьНомер(КонтактныеДанныеЭлектронногоЧека);
ВариантДоставкиЧека = "Телефон";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСпискиКонтактнойИнформации()
КонтактнаяИнформация = ОнлайнОплатыСлужебный.КонтактнаяИнформацияОснованияПлатежа(ОснованиеПлатежа);
Для Каждого Телефон Из КонтактнаяИнформация.Телефоны Цикл
Элементы.ДоставкаЧекаТелефон.СписокВыбора.Добавить(ФорматироватьНомер(Телефон), Телефон);
КонецЦикла;
Для Каждого ЭлектроннаяПочта Из КонтактнаяИнформация.ЭлектроннаяПочта Цикл
Элементы.ДоставкаЧекаЭлектроннаяПочта.СписокВыбора.Добавить(ЭлектроннаяПочта);
КонецЦикла;
ВариантДоставкиЧека = "ЭлектроннаяПочта";
Если Элементы.ДоставкаЧекаТелефон.СписокВыбора.Количество() > 0 Тогда
ДоставкаЧекаТелефон = Элементы.ДоставкаЧекаТелефон.СписокВыбора[0].Значение;
Элементы.ДоставкаЧекаТелефон.КнопкаВыпадающегоСписка = Истина;
ВариантДоставкиЧека = "Телефон";
КонецЕсли;
Если Элементы.ДоставкаЧекаЭлектроннаяПочта.СписокВыбора.Количество() > 0 Тогда
ДоставкаЧекаЭлектроннаяПочта = Элементы.ДоставкаЧекаЭлектроннаяПочта.СписокВыбора[0].Значение;
Элементы.ДоставкаЧекаЭлектроннаяПочта.КнопкаВыпадающегоСписка = Истина;
ВариантДоставкиЧека = "ЭлектроннаяПочта";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция КонтактныеДанныеЧека()
КонтактныеДанныеЧека = "";
Если НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис Тогда
Если ВариантДоставкиЧека = "ЭлектроннаяПочта"
И ЗначениеЗаполнено(ДоставкаЧекаЭлектроннаяПочта) Тогда
КонтактныеДанныеЧека = ДоставкаЧекаЭлектроннаяПочта;
КонецЕсли;
Если ВариантДоставкиЧека = "Телефон"
И ЗначениеЗаполнено(ДоставкаЧекаТелефон) Тогда
КонтактныеДанныеЧека = "+7" + ФорматироватьНомер(ДоставкаЧекаТелефон);
КонецЕсли;
КонецЕсли;
Возврат КонтактныеДанныеЧека;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ФорматироватьНомер(Номер)
Результат = "";
ДопустимыеСимволы = "1234567890";
Для Позиция = 1 По СтрДлина(Номер) Цикл
Символ = Сред(Номер,Позиция,1);
Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда
Результат = Результат + Символ;
КонецЕсли;
КонецЦикла;
Если СтрДлина(Результат) = 10 Тогда
Возврат Результат;
КонецЕсли;
Если Лев(Результат,1) = "7"
Или Лев(Результат,1) = "8" Тогда
Возврат Сред(Результат, 2, 10);
Иначе
Возврат Лев(Результат, 10);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область УправлениеЭлементамиФормы
&НаСервере
Функция УправлениеЭлементамиФормыПоПодсистемам()
ЕстьЭлектроннаяПочта = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями");
ЕстьОтправкаSMS = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS");
Элементы.ГруппаВариантОтправкиЭлектроннаяПочта.Видимость = ЕстьЭлектроннаяПочта;
Элементы.ГруппаВариантОтправкиТелефон.Видимость = ЕстьОтправкаSMS;
Если Не НастройкиШаблонов.Используется Тогда
Элементы.ГруппаШаблоны.Видимость = Ложь;
КонецЕсли;
Возврат Строка(Элементы.ГруппаВариантОтправки.Видимость)
+ Строка(Элементы.ГруппаВариантОтправки.Группировка)
+ Строка(Элементы.ГруппаВариантОтправкиЭлектроннаяПочта.Видимость)
+ Строка(Элементы.ГруппаВариантОтправкиТелефон.Видимость);
КонецФункции
&НаСервере
Процедура УправлениеЭлементамиФормыПоВариантуОтправки()
Если НастройкиШаблонов.Используется Тогда
Если ВариантОтправки = "ЭлектроннаяПочта" Тогда
Элементы.ГруппаШаблоны.ТекущаяСтраница = Элементы.ГруппаШаблонСообщенияЭлектроннаяПочта;
ИначеЕсли ВариантОтправки = "Телефон" Тогда
Элементы.ГруппаШаблоны.ТекущаяСтраница = Элементы.ГруппаШаблонСообщенияТелефон;
Иначе
Элементы.ГруппаШаблоны.ТекущаяСтраница = Элементы.ГруппаДекорацияОтступ;
КонецЕсли;
Иначе
Элементы.ГруппаШаблоны.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УправлениеЭлементамиФормыПоНастройкам()
Элементы.ГруппаВариантДоставкиЧека.Видимость = НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис;
Если ЗначениеЗаполнено(НастройкаОнлайнОплаты.ИдентификаторВитрины) Тогда
Элементы.ОтменитьСсылку.Видимость = Ложь
КонецЕсли;
Возврат Строка(Элементы.ГруппаВариантДоставкиЧека.Видимость);
КонецФункции
&НаСервере
Процедура УправлениеЭлементамиФормыПоДанным()
Если Не ЗначениеЗаполнено(ПлатежнаяСсылка) Тогда
Элементы.КопироватьВБуфер.Доступность = Ложь;
КонецЕсли;
Элементы.ДоставкаЧекаЭлектроннаяПочта.Видимость = ВариантДоставкиЧека = "ЭлектроннаяПочта";
Элементы.ДоставкаЧекаТелефон.Видимость = ВариантДоставкиЧека = "Телефон";
Если Не ДанныеОснованияПлатежаВСервисеОбработаны Тогда
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Элементы.Страницы.ТолькоПросмотр = Истина;
Элементы.ОтправитьСсылку.Доступность = Ложь;
Элементы.ОтменитьСсылку.Доступность = Ложь;
Возврат;
КонецЕсли;
Если ТребуетсяОбновлениеКонтактнойИнформацииВСервисе
Или ТребуетсяОбновлениеДанныхВСервисе
Или СсылкаОтменена
Или Не ЗначениеЗаполнено(ПлатежнаяСсылка) Тогда
Элементы.ОбновитьСсылку.Видимость = Истина;
Элементы.ОтправитьСсылку.Доступность = Ложь;
Элементы.ОтменитьСсылку.Доступность = Ложь;
Элементы.КопироватьВБуфер.Доступность = Ложь;
Элементы.ПлатежнаяСсылка.Доступность = Ложь;
Иначе
Элементы.ОбновитьСсылку.Видимость = Ложь;
Элементы.ОтменитьСсылку.Доступность = Истина;
Элементы.ПлатежнаяСсылка.Доступность = Истина;
Элементы.ОтправитьСсылку.Доступность = Истина;
КонецЕсли;
Если НастройкаОнлайнОплаты.СДоговором Тогда
НастроитьФормуПослеПроверкиДоступа();
Если Не МагазинПодключен Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Элементы.Страницы.ТолькоПросмотр = Ложь;
Если ТребуетсяОбновлениеДанныхВСервисе Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Внимание! Счет был изменен, требуется обновление ссылки.'");
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ЦветОсобогоТекста;
ИначеЕсли СсылкаОтменена Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Внимание! Ссылка была отменена, для повторной активации необходимо выполнить обновление ссылки.'");
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ЦветОсобогоТекста;
ИначеЕсли ТребуетсяОбновлениеКонтактнойИнформацииВСервисе Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Внимание! Изменились контактные данные, требуется обновление ссылки.'");
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ЦветОсобогоТекста;
Иначе
Если ДанныеОснованияПлатежаВСервисе.Статус = "Оплачен" Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Ссылка для оплаты счета была сформирована и отправлена покупателю. Счет оплачен.'");
ИначеЕсли ДанныеОснованияПлатежаВСервисе.Статус = "ОплаченОжиданиеЧека" Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Ссылка для оплаты счета была сформирована и отправлена покупателю.
|Счет оплачен. Ожидается доставка чека.'");
Иначе
Если ЗначениеЗаполнено(ПлатежнаяСсылка) Тогда
Элементы.КопироватьВБуфер.Доступность = Истина;
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Ссылка для оплаты счета сформирована и готова к отправке покупателю.'");
Иначе
Если НЕ НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Сформируйте ссылку для оплаты счета и отправьте ее покупателю.'");
Иначе
Элементы.ДекорацияПояснениеКФорме.Заголовок =
НСтр("ru = 'Выберите способ доставки электронного чека, сформируйте
|ссылку для оплаты счета и отправьте ее покупателю.'");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
КонецЕсли;
Если ДанныеОснованияПлатежаВСервисе.Статус = "Оплачен"
Или ДанныеОснованияПлатежаВСервисе.Статус = "ОплаченОжиданиеЧека" Тогда
Элементы.Страницы.ТолькоПросмотр = Истина;
Элементы.ОбновитьСсылку.Доступность = Ложь;
Элементы.ОтправитьСсылку.Доступность = Ложь;
Элементы.ОтменитьСсылку.Доступность = Ложь;
Элементы.ДекорацияПояснениеКФорме.ЦветФона = ЦветаСтиля.ЦветФонаПодсказки;
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = Новый Цвет;
ИначеЕсли ДанныеОснованияПлатежаВСервисе.Статус = "Отменен" Тогда
Элементы.Страницы.ТолькоПросмотр = Истина;
Элементы.ОбновитьСсылку.Доступность = Истина;
Элементы.ОтправитьСсылку.Доступность = Ложь;
Элементы.ОтменитьСсылку.Доступность = Ложь;
КонецЕсли;
Возврат;
КонецПроцедуры
&НаСервере
Процедура УправлениеЭлементамиФормаПриОжиданииОтветаСервиса(Знач ПоясняющийТекст)
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Элементы.ДекорацияПояснениеКФорме.Заголовок = ПоясняющийТекст;
Элементы.ОбновитьСсылку.Видимость = Ложь;
Элементы.ДекорацияДлительнаяОперация.Видимость = Истина;
КонецПроцедуры
#КонецОбласти
#Область НастройкиФормы
&НаСервереБезКонтекста
Процедура СохранитьШаблоныПоУмолчанию(
Знач ОснованиеПлатежа,
Знач ШаблонСообщенияЭлектроннаяПочта,
Знач ШаблонСообщенияТелефон)
Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОснованиеПлатежа)) Тогда
ПредставлениеОснования = ОснованиеПлатежа.Метаданные().ПолноеИмя();
Иначе
ПредставлениеОснования = ОснованиеПлатежа;
КонецЕсли;
КлючНастроек = "ШаблоныСообщенийЭлектроннойПочты";
Настройки = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
"ФормаПодготовкиПлатежнойСсылки",
КлючНастроек);
Если Настройки = Неопределено Тогда
ШаблоныПоУмолчанию = Новый Соответствие();
Иначе
ШаблоныПоУмолчанию = Настройки;
КонецЕсли;
ШаблоныПоУмолчанию.Вставить(ПредставлениеОснования, ШаблонСообщенияЭлектроннаяПочта);
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить(
"ФормаПодготовкиПлатежнойСсылки",
КлючНастроек,
ШаблоныПоУмолчанию);
КлючНастроек = "ШаблоныСообщенийSMS";
Настройки = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
"ФормаПодготовкиПлатежнойСсылки",
КлючНастроек);
Если Настройки = Неопределено Тогда
ШаблоныПоУмолчанию = Новый Соответствие();
Иначе
ШаблоныПоУмолчанию = Настройки;
КонецЕсли;
ШаблоныПоУмолчанию.Вставить(ПредставлениеОснования, ШаблонСообщенияТелефон);
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить(
"ФормаПодготовкиПлатежнойСсылки",
КлючНастроек,
ШаблоныПоУмолчанию);
КонецПроцедуры
&НаСервере
Процедура ВосстановитьШаблоныПоУмолчанию()
Если НастройкиШаблонов.Используется
И ЗначениеЗаполнено(ОснованиеПлатежа) Тогда
Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОснованиеПлатежа)) Тогда
ПредставлениеОснования = ОснованиеПлатежа.Метаданные().ПолноеИмя();
Иначе
ПредставлениеОснования = ОснованиеПлатежа;
КонецЕсли;
Настройки = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
"ФормаПодготовкиПлатежнойСсылки",
"ШаблоныСообщенийЭлектроннойПочты");
Если Настройки <> Неопределено
И ТипЗнч(Настройки) = Тип("Соответствие")
И Настройки[ПредставлениеОснования] <> Неопределено Тогда
ШаблонСообщенияЭлектроннаяПочта = Настройки[ПредставлениеОснования];
КонецЕсли;
Настройки = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
"ФормаПодготовкиПлатежнойСсылки",
"ШаблоныСообщенийSMS");
Если Настройки <> Неопределено
И ТипЗнч(Настройки) = Тип("Соответствие")
И Настройки[ПредставлениеОснования] <> Неопределено Тогда
ШаблонСообщенияТелефон = Настройки[ПредставлениеОснования];
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура НастроитьФормуПослеПроверкиДоступа()
Если Не МагазинПодключен Тогда
Если ОнлайнОплатыСлужебный.ЕстьПравоИзмененияНастроек() Тогда
Элементы.ДекорацияПояснениеКФорме.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Истек период доступа к ЮKassa.
|Необходимо повторно <a href = ""ОткрытьНастройку"">предоставить доступ</a>'"));
Иначе
Элементы.ДекорацияПояснениеКФорме.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Истек период доступа к ЮKassa. Необходимо повторно предоставить доступ. Обратитесь к администратору'"));
КонецЕсли;
Элементы.ДекорацияПояснениеКФорме.ЦветТекста = ЦветаСтиля.ЦветТекстаКнопки;
КонецЕсли;
Элементы.КартинкаПредупреждение.Видимость = Не МагазинПодключен;
Элементы.ГруппаВариантДоставкиЧека.Доступность = МагазинПодключен;
Элементы.ГруппаВариантОтправки.Доступность = МагазинПодключен;
Элементы.Справка.Видимость = МагазинПодключен;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНастройкуОнлайнОплаты()
ПараметрыФормы = ОнлайнОплатыСлужебныйКлиент.ОписаниеПараметровФормыНастройкиОнлайнОплаты();
ПараметрыФормы.Ключ = НастройкаОнлайнОплаты.Ссылка;
ПараметрыФормы.ПроверкаПодключенияСервиса= Истина;
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияФормыНастроек", ЭтотОбъект);
ОнлайнОплатыСлужебныйКлиент.ОткрытьФормуНастроекОнлайнОплаты(ПараметрыФормы, ЭтотОбъект, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияФормыНастроек(Результат, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
МагазинПодключен = Результат.МагазинПодключен;
УправлениеЭлементамиФормыПоДанным();
Если МагазинПодключен Тогда
ЗаполнитьДанныеОснованияПлатежаВСервисе();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопросаОтменитьСсылку(РезультатВопроса, Контекст) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
НачатьОтменуПлатежнойСсылки();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти