Настройки ЮKassa / Форма элемента / Модуль формы

файл
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2025, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	ЧтениеСуществующегоОбъекта = Истина;
	
	// СтандартныеПодсистемы.УправлениеДоступом
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
	
	ПроверкаПодключенияСервиса = Параметры.ПроверкаПодключенияСервиса;
	
	ЗаполнитьПараметрыФормы(Объект);
	СоздатьПереопределяемуюСтраницу();
	
	// Осуществлен перенос подсистемы из БЭД в БИП, избегаем работы пользователя с негативными представлениями переменных.
	// Переименовать и инвертировать значение обработчиком обновления не представляется возможным,
	// ждем полного перехода прикладных решений и исключения подсистемы из поставки БЭД
	НастройкаИспользуется = Не Объект.Недействительна;
	
	Если НЕ ЧтениеСуществующегоОбъекта Тогда
		Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаОСервисе;
		УстановитьОтображениеЭлементовФормы();
		КлючСохраненияПоложенияОкна = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			"ОнлайнОплатаФормаЭлемента.%1",
			ЧтениеСуществующегоОбъекта);
	Иначе
		Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаКарточкаЭлемента;
		Элементы.КоманднаяПанельКнопки.Видимость = Ложь;
		УправлениеЭлементамиФормыПоДанным();
	КонецЕсли;
	
	Если Не ОнлайнОплаты.НастройкаИнтеграцииДоступна() Тогда
		Элементы.ИспользованиеДоговора.Доступность = Ложь;
		Элементы.НастройкаИспользуется.Доступность = Ложь;
		Элементы.ОтправкаЧековЧерезСервис.Доступность = Ложь;
		Элементы.ФормаИзменитьДату.Доступность = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если ПроверкаПодключенияСервиса Тогда
		ДоступККассеПредоставлен = Ложь;
		НачатьПроверкуДоступаНаСервере();
		ОжидатьЗавершениеПроверитьДоступНаСервере(); 
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_УчетнаяЗаписьЭлектроннойПочты"
		И Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаШаблоныСообщений Тогда 
		
		ПроверитьНастроенныеУчетныеЗаписиЭлектроннойПочтыИОбработатьВидимостьПредупреждения();
		
	ИначеЕсли ИмяСобытия = "Запись_НастройкиОтправкиSMS" 
		И Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаШаблоныСообщений Тогда 
		
		ПроверитьНастройкуSMSИОбработатьВидимостьПредупреждения();
		
	ИначеЕсли ИмяСобытия = "Запись_НастройкиОнлайнОплаты"
		И Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора Тогда 
		
		ВыборкаОрганизаций = УстановитьСписокНеПодключенныхОрганизаций();
		
		Элементы.Организация.СписокВыбора.Очистить();
		Пока ВыборкаОрганизаций.Следующий() Цикл
			Элементы.Организация.СписокВыбора.Добавить(ВыборкаОрганизаций.Организация ,ВыборкаОрганизаций.Представление);
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	Если Не Объект.СДоговором И Не ЗначениеЗаполнено(Объект.ИдентификаторВитрины) Тогда
		Отказ = Истина;
		ОбщегоНазначения.СообщитьПользователю(
			НСтр("ru='Не заполнен идентификатор витрины'"),
			,
			"ИдентификаторВитрины");
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИП.ПередОкончаниемРедактированияДополнительныхНастроекОнлайнОплат(
		Контекст,
		Отказ);
	
	ОнлайнОплатыПереопределяемый.ПередОкончаниемРедактированияДополнительныхНастроекОнлайнОплат(
		Контекст,
		Отказ);
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	ТекущийОбъект.ДополнительныеНастройки.Очистить();
	Для каждого Настройка Из РеквизитыДополнительныхНастроек Цикл
		СтрокаНастроек = ТекущийОбъект.ДополнительныеНастройки.Добавить();
		СтрокаНастроек.Настройка = Настройка.Ключ;
		СтрокаНастроек.Значение = ЭтотОбъект[Настройка.Значение];
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	Если НЕ ЧтениеСуществующегоОбъекта И Модифицированность Тогда
		
		СтандартнаяОбработка = Ложь;
		Отказ = Истина;
		
		ТекстПредупреждения = НСтр("ru = 'Работа помощника подключения к сервису ЮKassa не была завершена.'");
		
		Если Не ЗавершениеРаботы Тогда
			
			Кнопки = Новый СписокЗначений;
			Кнопки.Добавить("Завершить", НСтр("ru = 'Завершить настройку'"));
			Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить настройку'"));
			ОбработкаОтвета = Новый ОписаниеОповещения("ОбработкаОтветаПередЗакрытием", ЭтотОбъект);
			ПоказатьВопрос(ОбработкаОтвета, ТекстПредупреждения, Кнопки, , "Завершить");
			
		КонецЕсли;
		
	ИначеЕсли ПроверкаПодключенияСервиса Тогда
		
		Закрыть(Новый Структура("МагазинПодключен", ДоступККассеПредоставлен));
		
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

#Область КомандыНавигации

&НаКлиенте
Процедура Далее(Команда)
	
	Отказ = Ложь;
	
	Если Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаОСервисе Тогда
		Если СПравиламиОзнакомлен Тогда
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора;
		Иначе
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				НСтр("ru = 'Необходимо согласиться с условиями пользовательского соглашения'"),
				,
				"СПравиламиОзнакомлен");
		КонецЕсли;
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора Тогда
		
		ПроверкаЗаполненияСтраницаВыборОрганизацииДоговора(Отказ);
		
		Если Отказ Тогда
			Возврат;
		КонецЕсли;
		
		Если СДоговором Тогда
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения;
		Иначе
			ПолучитьНастройкиБезДоговора();
			ОжидатьЗавершениеПолученияНастроекБезДоговора();
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация;
		КонецЕсли;
		
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения Тогда
		
		ПроверкаЗаполненияСтраницаПараметрыПодключенияКСервису(Отказ);
		
		Если Отказ Тогда
			Возврат;
		КонецЕсли;
		
		Если ЗначениеЗаполнено(ИдентификаторВитрины) ИЛИ ДоступККассеПредоставлен Тогда
			
			Если ОтображатьПереопределяемые Тогда
				ПриОткрытииСтраницыПереопределяемая();
			ИначеЕсли ОткрыватьСтраницуШаблоныСообщений Тогда
				ОткрытьСтраницуШаблоныСообщений();
			Иначе
				ОткрытьСтраницуРезультатНастройки(Отказ);
			КонецЕсли;
			
		Иначе
			Если Не ДоступККассеПредоставлен Тогда
				ПроверкаПодключения = Истина;
				ПолучитьСтатусПодключенияМагазина();
				ОжидатьЗавершениеПроверкиПодключения();
				Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация;
			КонецЕсли;
			
		КонецЕсли;
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда
		
		Если ДоступККассеПредоставлен Тогда
			Если ОтображатьПереопределяемые Тогда
				ПриОткрытииСтраницыПереопределяемая();
			ИначеЕсли ОткрыватьСтраницуШаблоныСообщений Тогда
				ОткрытьСтраницуШаблоныСообщений();
			Иначе
				ОткрытьСтраницуРезультатНастройки(Отказ);
			КонецЕсли;
		Иначе
			ПолучитьСтатусПодключенияМагазина();
			ОжидатьЗавершениеПроверкиПодключения();
		КонецЕсли;
		
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПереопределяемая Тогда
		
		Отказ = ПриЗакрытииСтраницыПереопределяемая(Отказ);
		
		Если ОткрыватьСтраницуШаблоныСообщений Тогда
			ОткрытьСтраницуШаблоныСообщений();
		Иначе
			ОткрытьСтраницуРезультатНастройки(Отказ);
		КонецЕсли;
		
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаШаблоныСообщений Тогда
		
		ОткрытьСтраницуРезультатНастройки(Отказ);
		
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаРезультатыНастройки Тогда
		
		Если ПроверкаПодключенияСервиса Тогда
			Закрыть(Новый Структура("МагазинПодключен", ДоступККассеПредоставлен));
		Иначе
			Закрыть();
		КонецЕсли;
		
	КонецЕсли;
	
	УстановитьОтображениеЭлементовФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура Назад(Команда)
	
	Если Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора Тогда
		Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаОСервисе;
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения Тогда
		Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора;
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда
		Если СДоговором Тогда
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения;
		Иначе
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора;
		КонецЕсли;
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПереопределяемая Тогда
		Если СДоговором Тогда
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения;
		Иначе
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора;
		КонецЕсли;
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаШаблоныСообщений Тогда
		Если ОтображатьПереопределяемые Тогда
			ПриОткрытииСтраницыПереопределяемая();
		ИначеЕсли СДоговором Тогда
			 Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения;
		Иначе
			Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора;
		КонецЕсли;
	КонецЕсли;
	
	УстановитьОтображениеЭлементовФормы();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПроверитьДоступ(Команда)
	
	Если Модифицированность Тогда
		Оповещение = Новый ОписаниеОповещения("ПроверкаПослеЗакрытияВопросаЗаписатьОбъект", ЭтотОбъект);
		ПоказатьВопрос(Оповещение, 
			НСтр("ru = 'Для проверки доступа необходимо записать изменения. Записать?'"),
			РежимДиалогаВопрос.ДаНет);
	Иначе
		ДоступККассеПредоставлен = Ложь;
		НачатьПроверкуДоступаНаСервере();
		ОжидатьЗавершениеПроверитьДоступНаСервере();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьУчетнуюЗаписьЭлектроннойПочты(Команда)
	
	ОповещениеОЗакрытииПомощника = Новый ОписаниеОповещения(
		"ПослеЗакрытияФормыПомощникаСозданияУчетнойЗаписиПочты",
		ЭтотОбъект);
	
	ОткрытьФорму(
		"Справочник.УчетныеЗаписиЭлектроннойПочты.ФормаОбъекта"
		,
		,
		ЭтотОбъект,
		,
		,
		,
		ОповещениеОЗакрытииПомощника);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьНастройкуОтправкиSMS(Команда)
	
	ОповещениеОЗакрытииПомощника = Новый ОписаниеОповещения(
		"ПослеЗакрытияФормыНастройкиОтправкиSMS",
		ЭтотОбъект);
		
	ОткрытьФорму(
		"ОбщаяФорма.НастройкаОтправкиSMS",
		,
		ЭтотОбъект,
		,
		,
		,
		ОповещениеОЗакрытииПомощника);
	
КонецПроцедуры

&НаКлиенте
Процедура НастроитьМагазин(Команда)
	
	ОткрытьСтраницуНастройкиКастомизации();
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьДатуОбмена(Команда)
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("НастройкаОнлайнОплаты", Объект.Ссылка);
	
	ОткрытьФорму("РегистрСведений.СтатусыОнлайнОплат.ФормаЗаписи", 
		ПараметрыФормы, 
		ЭтотОбъект,
		УникальныйИдентификатор,
		,
		,
		,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

#Область ОбработчикиСобытийЭлементовСтраницФормы

#Область СтраницаПереопределяемая

&НаКлиенте
Процедура ПриОткрытииСтраницыПереопределяемая()
	
	ПроверитьОтображениеПредопределяемых();
	Если Не ОтображатьПереопределяемые Тогда
		Далее(Неопределено);
	Иначе
		Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПереопределяемая;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьОтображениеПредопределяемых()
	
	Отказ = Ложь;
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	ИнтеграцияПодсистемБИП.ПередНачаломРедактированияДополнительныхНастроекОнлайнОплаты(Контекст, Отказ);
	ОнлайнОплатыПереопределяемый.ПередНачаломРедактированияДополнительныхНастроекОнлайнОплаты(Контекст, Отказ);
	
	Если Отказ Тогда
		ОтображатьПереопределяемые = Ложь;
	Иначе
		ГруппаПереопределяемыхЭлементов = ?(
			ЧтениеСуществующегоОбъекта,
			Элементы.ГруппаПереопределяемая,
			Элементы.СтраницаПереопределяемая);
		ОтображатьПереопределяемые = ГруппаПереопределяемыхЭлементов.ПодчиненныеЭлементы.Количество() > 0;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПриЗакрытииСтраницыПереопределяемая(Знач Отказ)
	
	Если Не ОтображатьПереопределяемые Тогда
		Возврат Отказ;
	КонецЕсли;
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИП.ПередОкончаниемРедактированияДополнительныхНастроекОнлайнОплат(
		Контекст,
		Отказ);
	
	ОнлайнОплатыПереопределяемый.ПередОкончаниемРедактированияДополнительныхНастроекОнлайнОплат(
		Контекст,
		Отказ);
		
	Возврат Отказ;
	
КонецФункции

&НаСервере
Процедура СоздатьПереопределяемуюСтраницу()
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	РеквизитыДополнительныхНастроек = Новый Структура;
	
	ГруппаПереопределяемыхЭлементов = ?(
		ЧтениеСуществующегоОбъекта,
		Элементы.ГруппаПереопределяемая,
		Элементы.СтраницаПереопределяемая);
	
	ИнтеграцияПодсистемБИП.ПриСозданииФормыОнлайнОплаты(
		ЭтотОбъект,
		ГруппаПереопределяемыхЭлементов,
		Контекст.Префикс,
		РеквизитыДополнительныхНастроек);
	
	ОнлайнОплатыПереопределяемый.ПриСозданииФормыОнлайнОплаты(
		ЭтотОбъект,
		ГруппаПереопределяемыхЭлементов,
		Контекст.Префикс,
		РеквизитыДополнительныхНастроек);
		
	ПрочитатьРеквизитыДополнительныхНастроек();
	
	ОтображатьПереопределяемые = (ГруппаПереопределяемыхЭлементов.ПодчиненныеЭлементы.Количество() > 0);
	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьРеквизитыДополнительныхНастроек()
	
	Если РеквизитыДополнительныхНастроек = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Для каждого СтрокаНастроек Из Объект.ДополнительныеНастройки Цикл
		
		ИмяРеквизита = "";
		
		Если РеквизитыДополнительныхНастроек.Свойство(СтрокаНастроек.Настройка, ИмяРеквизита) Тогда // АПК:1416 Реквизиты добавляются программно
			
			ЭтотОбъект[ИмяРеквизита] = СтрокаНастроек.Значение;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЭлементПриИзменении(Элемент)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИПКлиент.ЭлементФормыНастроекПриИзменении(Контекст, Элемент);
	ОнлайнОплатыКлиентПереопределяемый.ЭлементФормыНастроекПриИзменении(Контекст, Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЭлементНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИПКлиент.ЭлементФормыНастроекНачалоВыбора(
		Контекст,
		Элемент,
		ДанныеВыбора,
		СтандартнаяОбработка);
	
	ОнлайнОплатыКлиентПереопределяемый.ЭлементФормыНастроекНачалоВыбора(
		Контекст,
		Элемент,
		ДанныеВыбора,
		СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЭлементОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИПКлиент.ЭлементФормыНастроекОбработкаВыбора(
		Контекст,
		Элемент,
		ВыбранноеЗначение,
		СтандартнаяОбработка);
	
	ОнлайнОплатыКлиентПереопределяемый.ЭлементФормыНастроекОбработкаВыбора(
		Контекст,
		Элемент,
		ВыбранноеЗначение,
		СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЭлементНажатие(Элемент)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИПКлиент.ЭлементФормыНастроекНажатие(Контекст, Элемент);
	ОнлайнОплатыКлиентПереопределяемый.ЭлементФормыНастроекНажатие(Контекст, Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЭлементСоздание(Элемент, СтандартнаяОбработка)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИПКлиент.ЭлементФормыНастроекСоздание(
		Контекст,
		Элемент,
		СтандартнаяОбработка);
	
	ОнлайнОплатыКлиентПереопределяемый.ЭлементФормыНастроекСоздание(
		Контекст,
		Элемент,
		СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ДействиеКоманды(Команда)
	
	Контекст = КонтекстФормы(ЭтотОбъект);
	
	ИнтеграцияПодсистемБИПКлиент.КомандаФормыНастроекДействие(Контекст, Команда);
	ОнлайнОплатыКлиентПереопределяемый.КомандаФормыНастроекДействие(Контекст, Команда);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция КонтекстФормы(ЭтотОбъект) 
	
	Контекст = Новый Структура;
	Контекст.Вставить("Форма", ЭтотОбъект);
	Контекст.Вставить("Префикс", "_");
	Контекст.Вставить("НоваяНастройка", НЕ ЭтотОбъект.ЧтениеСуществующегоОбъекта);
	Контекст.Вставить("Организация", ЭтотОбъект.Организация);
	Контекст.Вставить("СДоговором", ЗначениеЗаполнено(ЭтотОбъект.СДоговором));
	
	Возврат Контекст;
	
КонецФункции

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

#Область СтраницаШаблоныСообщений

&НаКлиенте
Процедура СоздатьШаблоныПисемАвтоматическиПриИзменении(Элемент)
	
	ПроверитьНастроенныеУчетныеЗаписиЭлектроннойПочтыИОбработатьВидимостьПредупреждения();
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьШаблоны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;
	КонецЕсли;
	
КонецПроцедуры


#КонецОбласти
#Область Прочее

&НаСервере
Процедура ЗаполнитьПараметрыФормы(ОбъектДанных)
	
	Если Не ЧтениеСуществующегоОбъекта Тогда
		
		Если ЗначениеЗаполнено(Параметры.Организация) Тогда
			Организация = Параметры.Организация;
		ИначеЕсли Параметры.Свойство("ЗначенияЗаполнения") И Параметры.ЗначенияЗаполнения.Свойство("Организация") // АПК:1416 Допустимы оба сценария передачи параметров

			И ЗначениеЗаполнено(Параметры.ЗначенияЗаполнения.Организация) Тогда
			Организация = Параметры.ЗначенияЗаполнения.Организация;
		КонецЕсли;
		
		НеПоказыватьСтраницуКарточкаНастроекПриОткрытии = Истина;
		
	Иначе
		
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбъектДанных);
		
	КонецЕсли;
	
	РезультатИспользуетсяОднаОрганизация = ОнлайнОплатыСлужебный.ИспользуетсяОднаОрганизация();
	
	Если РезультатИспользуетсяОднаОрганизация.ОднаОрганизация Тогда
		ИспользованиеОднойОрганизации = Истина;
		Организация = РезультатИспользуетсяОднаОрганизация.Организация;
	Иначе
		Элементы.ВыбраннаяОрганизация.РежимВыбораИзСписка = Истина;
		Элементы.ВыбраннаяОрганизация.СписокВыбора.Очистить();
		ВыборкаОрганизаций = УстановитьСписокНеПодключенныхОрганизаций(Организация);
		Пока ВыборкаОрганизаций.Следующий() Цикл
			Элементы.ВыбраннаяОрганизация.СписокВыбора.Добавить(ВыборкаОрганизаций.Организация ,ВыборкаОрганизаций.Представление);
		КонецЦикла;
		
		Элементы.Организация.РежимВыбораИзСписка = ЗначениеЗаполнено(Элементы.Организация.СписокВыбора);
		
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаВыборОрганизации",
		"Видимость",
		Не РезультатИспользуетсяОднаОрганизация.ОднаОрганизация);
		
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда
		
		ЕстьОтправкаSMS = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS");
		ЕстьОтправкаПисем = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями");
		РезультатПроверки = ОнлайнОплатыСлужебный.ВсеШаблоныСозданы();
		ВсеШаблоныСозданыSMS = РезультатПроверки.SMS;
		ВсеШаблоныСозданыПисьма = РезультатПроверки.Письмо;
		
		Если НЕ РезультатПроверки.ВсеШаблоны Тогда
			ОткрыватьСтраницуШаблоныСообщений = ИспользоватьШаблоныСообщений(ЕстьОтправкаПисем, ЕстьОтправкаSMS);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОтветаПередЗакрытием(Ответ, ПараметрыВопроса) Экспорт
	
	Если Ответ = "Завершить" Тогда
		Модифицированность = Ложь;
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтображениеЭлементовФормы()
	
	Если Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаОСервисе Тогда
		Элементы.КнопкаНазад.Видимость = Ложь;
		Элементы.КнопкаДалее.Видимость = Истина;
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Настройка подключения к ЮКаssа'");
		ОсновнаяКнопка  = "КнопкаДалее";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаВыборОрганизацииДоговора Тогда
		Элементы.КнопкаНазад.Видимость = Истина;
		Элементы.КнопкаДалее.Видимость = Истина;
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Организация и вариант использования сервиса'");
		ОсновнаяКнопка = "КнопкаДалее";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПараметрыПодключения Тогда
		Элементы.КнопкаНазад.Видимость = Истина;
		Элементы.КнопкаДалее.Видимость = Истина;
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Параметры подключения к сервису'");
		ОсновнаяКнопка = "КнопкаДалее";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда
		Элементы.КнопкаНазад.Видимость = Истина;
		Элементы.КнопкаДалее.Видимость = ДоступККассеПредоставлен;
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Проверка подключения'");
		ОсновнаяКнопка = "КнопкаДалее";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаПереопределяемая Тогда
		Элементы.КнопкаНазад.Видимость = Истина;
		Элементы.КнопкаДалее.Видимость = Истина;
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Настройки учета'");
		ОсновнаяКнопка = "КнопкаДалее";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаШаблоныСообщений Тогда
		Элементы.КнопкаНазад.Видимость = Истина;
		Элементы.КнопкаДалее.Видимость = Истина;
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Выставление счетов клиентам при помощи шаблонов'");
		ОсновнаяКнопка = "КнопкаДалее";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаКарточкаЭлемента Тогда
		Элементы.КнопкаНазад.Видимость   = Ложь;
		Элементы.КнопкаДалее.Видимость   = Ложь;
		Элементы.КнопкаЗакрыть.Видимость = Ложь;
		Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru='Настройка подключения %1 к сервису ЮКаssa'"),
			Строка(Организация));
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто;
		ОсновнаяКнопка = "";
	ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.СтраницаРезультатыНастройки Тогда
		Элементы.КнопкаНазад.Видимость = Ложь;
		Элементы.КнопкаДалее.Видимость = Истина;
		Элементы.КнопкаДалее.Заголовок = НСтр("ru='Готово'");
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
		Заголовок = НСтр("ru='Завершение настройки подключения'");
		Элементы.КнопкаЗакрыть.Видимость = Ложь;
		ОсновнаяКнопка = "КнопкаДалее";
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ОсновнаяКнопка) Тогда
		Элементы[ОсновнаяКнопка].КнопкаПоУмолчанию = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НедействительнаПриИзменении(Элемент)
	
	Объект.Недействительна = НЕ НастройкаИспользуется;
	
КонецПроцедуры

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

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

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