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