Настройки ЮKassa / Модуль объекта

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
	
	ИнициализироватьОбъект(ДанныеЗаполнения);
	
КонецПроцедуры

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	РегистрыСведений.СтатусыОнлайнОплат.ОбновитьЗначениеРеквизитаОрганизация(Ссылка, Организация);
	
КонецПроцедуры

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

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

Функция НастройкаУникальна()
	
	Если ПометкаУдаления Тогда
		Возврат Истина;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	НастройкиОнлайнОплат.Наименование КАК НайденныйДоговор,
	|	""ИдентификаторМагазина"" КАК Реквизит
	|ИЗ
	|	Справочник.НастройкиОнлайнОплат КАК НастройкиОнлайнОплат
	|ГДЕ
	|	НастройкиОнлайнОплат.Ссылка <> &Ссылка
	|	И НастройкиОнлайнОплат.ИдентификаторМагазина = &ИдентификаторМагазина
	|	И НЕ НастройкиОнлайнОплат.ПометкаУдаления
	|	И НЕ НастройкиОнлайнОплат.Недействительна
	|	И НастройкиОнлайнОплат.СДоговором = ИСТИНА
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	НастройкиОнлайнОплат.Наименование,
	|	""Организация""
	|ИЗ
	|	Справочник.НастройкиОнлайнОплат КАК НастройкиОнлайнОплат
	|ГДЕ
	|	НастройкиОнлайнОплат.Ссылка <> &Ссылка
	|	И НастройкиОнлайнОплат.Организация = &Организация
	|	И НЕ НастройкиОнлайнОплат.ПометкаУдаления
	|	И НЕ НастройкиОнлайнОплат.Недействительна";
	
	Запрос.УстановитьПараметр("ИдентификаторМагазина", ИдентификаторМагазина);
	Запрос.УстановитьПараметр("Организация",           Организация);
	Запрос.УстановитьПараметр("Ссылка",                Ссылка);
	Результат = Запрос.Выполнить();
	ТекущийДоговорУникален = Результат.Пустой();
	
	Если Не ТекущийДоговорУникален Тогда
		
		Выборка = Результат.Выбрать();
		Выборка.Следующий();
		Если Выборка.Реквизит = "Организация" Тогда 
			ШаблонСообщения = НСтр("ru = 'В информационной базе уже существует настройка для организации %1'");
		ИначеЕсли Выборка.Реквизит = "ИдентификаторМагазина" Тогда
			ШаблонСообщения = НСтр("ru = 'В информационной базе уже существует настройка с таким идентификатором магазина
				|%2 (%3)'");
		КонецЕсли;	
		
		ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			ШаблонСообщения,
			Организация, 
			ИдентификаторМагазина,
			Выборка.НайденныйДоговор);
			
		ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
	КонецЕсли;
	
	Возврат ТекущийДоговорУникален;
	
КонецФункции

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

Процедура ИнициализироватьОбъект(ДанныеЗаполнения)

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

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

#КонецЕсли

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