Эквайринговые терминалы / Модуль менеджера

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

#Область ПрограммныйИнтерфейс

// Функция определяет реквизиты выбранного эквайрингового терминала.
//
// Параметры:
//    ЭквайринговыйТерминал - СправочникСсылка.ЭквайринговыеТерминалы - Ссылка на эквайринговый терминал.
//
// Возвращаемое значение:
//    Структура - Реквизиты эквайрингового терминала.
//
Функция ПолучитьРеквизитыЭквайринговогоТерминала(ЭквайринговыйТерминал) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	ЭквайринговыеТерминалы.Владелец КАК ДоговорЭквайринга,
	|	ЭквайринговыеТерминалы.Владелец.Организация КАК Организация,
	|	ЭквайринговыеТерминалы.Владелец.Контрагент КАК Эквайер,
	|	ЭквайринговыеТерминалы.Владелец.БанковскийСчет.ВалютаДенежныхСредств КАК Валюта,
	|	ЭквайринговыеТерминалы.РазрешитьПлатежиБезУказанияЗаявок
	|ИЗ
	|	Справочник.ЭквайринговыеТерминалы КАК ЭквайринговыеТерминалы
	|ГДЕ
	|	ЭквайринговыеТерминалы.Ссылка = &ЭквайринговыйТерминал
	|";
	
	Запрос.УстановитьПараметр("ЭквайринговыйТерминал", ЭквайринговыйТерминал);
	
	СтруктураРеквизитов = Новый Структура("ДоговорЭквайринга, Организация, Эквайер, Валюта, РазрешитьПлатежиБезУказанияЗаявок");
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		ЗаполнитьЗначенияСвойств(СтруктураРеквизитов, Выборка);
	КонецЕсли;
	
	Возврат СтруктураРеквизитов;
	
КонецФункции

// Функция определяет эквайринговый терминал по выбранной организации и/или договору эквайринга.
//
// Возвращает эквайринговый терминал, если найден один эквайринговый терминал.
// Возвращает пустую ссылку, если эквайринговый терминал не найден или эквайринговых терминалов больше одного.
//
// Параметры:
//    Организация - СправочникСсылка.Организации - Выбранная организация.
//    Договор - СправочникСсылка.ДоговорыЭквайринга - Выбранный договор подключения к платежной системе.
//
// Возвращаемое значение:
//    СправочникСсылка.ЭквайринговыеТерминалы - Найденный эквайринговый терминал.
//
Функция ЭквайринговыйТерминалПоУмолчанию(Организация = Неопределено, Договор = Неопределено) Экспорт
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
	|	ЭквайринговыеТерминалы.Ссылка КАК ЭквайринговыйТерминал
	|ИЗ
	|	Справочник.ЭквайринговыеТерминалы КАК ЭквайринговыеТерминалы
	|ГДЕ
	|	НЕ ЭквайринговыеТерминалы.ПометкаУдаления
	|	И (ЭквайринговыеТерминалы.Владелец.Организация = &Организация
	|		ИЛИ &Организация = Неопределено)
	|	И (ЭквайринговыеТерминалы.Владелец = &Договор
	|		ИЛИ &Договор = Неопределено)
	|");
	
	Запрос.УстановитьПараметр("Организация", ?(ЗначениеЗаполнено(Организация), Организация, Неопределено));
	Запрос.УстановитьПараметр("Договор", ?(ЗначениеЗаполнено(Договор), Договор, Неопределено));
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Количество()=1 И Выборка.Следующий() Тогда
		ЭквайринговыйТерминал = Выборка.ЭквайринговыйТерминал;
	Иначе
		ЭквайринговыйТерминал = Справочники.ЭквайринговыеТерминалы.ПустаяСсылка();
	КонецЕсли;
	
	Возврат ЭквайринговыйТерминал;
	
КонецФункции

// Возвращает эквайринговый терминал по подключенному оборудованию
// 
// Параметры:
//  РабочееМесто - СправочникСсылка.РабочиеМеста - Рабочее место
//  ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства
// 
// Возвращаемое значение:
//  Неопределено, СправочникСсылка.ЭквайринговыеТерминалы - Эквайринговый терминал по подключенному оборудованию
Функция ЭквайринговыйТерминалПоПодключенномуОборудованию(РабочееМесто, ИдентификаторУстройства) Экспорт
	
	РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	НастройкиРМКЭквайринговыеТерминалы.ЭквайринговыйТерминал КАК ЭквайринговыйТерминал
	|ИЗ
	|	Справочник.НастройкиРМК.ЭквайринговыеТерминалы КАК НастройкиРМКЭквайринговыеТерминалы
	|ГДЕ
	|	НастройкиРМКЭквайринговыеТерминалы.Ссылка.РабочееМесто = &РабочееМесто
	|	И НастройкиРМКЭквайринговыеТерминалы.ПодключаемоеОборудование = &ИдентификаторУстройства
	|";
	Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто);
	Запрос.УстановитьПараметр("РабочееМестоОборудования", РабочееМесто);
	Запрос.УстановитьПараметр("ИдентификаторУстройства", ИдентификаторУстройства);
	
	ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
	
	Если ВыборкаЗапроса.Следующий() Тогда
		Возврат ВыборкаЗапроса.ЭквайринговыйТерминал;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции
	
// Функция определяет эквайринговые терминалы по переданной организации и рабочему месту и возвращает их настройки РМК.
//
// Параметры:
//    Организация - СправочникСсылка.Организации - Организация, по которой необходимо вернуть описания экваринговых терминалов.
//    РабочееМесто - СправочникСсылка.РабочиеМеста - Текущее рабочее место.
//    ИспользоватьПодключаемоеОборудование - Булево -
//
// Возвращаемое значение:
//    СписокЗначений из Структура:
//    	* Ссылка - СправочникСсылка.ЭквайринговыеТерминалы - 
//    	* ПодключаемоеОборудование - СправочникСсылка.ПодключаемоеОборудование - 
//    	* ИспользоватьБезПодключенияОборудования - Булево -
//    	* НеЗапрашиватьНомерКарты - Булево -
//
Функция ПараметрыЭквайринговыхТерминаловПоОрганизации(Организация, РабочееМесто, ИспользоватьПодключаемоеОборудование) Экспорт

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

// Функция возвращает оборудование ЭТ с признаком СверятьИтогиНаЭТПриЗакрытииКассовойСмены
// 
// Параметры:
//  РабочееМесто - СправочникСсылка.РабочиеМеста - Рабочее место
//  ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - Идентификатор устройства ККТ
// 
// Возвращаемое значение:
//  СправочникСсылка.ПодключаемоеОборудование - оборудование ЭТ.
//
Функция ПодключаемоеОборудованиеЭквайринговогоТерминалаДляСверкиИтогов(ПодключаемоеОборудованиеККТ) Экспорт 
	
	РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	НастройкиРМКЭквайринговыеТерминалы.ПодключаемоеОборудование КАК ПодключаемоеОборудование
	|ИЗ
	|	Справочник.НастройкиРМК.ЭквайринговыеТерминалы КАК НастройкиРМКЭквайринговыеТерминалы
	|ГДЕ
	|	НастройкиРМКЭквайринговыеТерминалы.Ссылка.РабочееМесто = &РабочееМесто
	|	И НастройкиРМКЭквайринговыеТерминалы.ПодключаемоеОборудованиеККТ = &ПодключаемоеОборудованиеККТ
	|	И НастройкиРМКЭквайринговыеТерминалы.СверятьИтогиНаЭТПриЗакрытииКассовойСмены";     
	
	Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто); 
	Запрос.УстановитьПараметр("ПодключаемоеОборудованиеККТ", ПодключаемоеОборудованиеККТ);
	
	ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
	
	Если ВыборкаЗапроса.Следующий() Тогда
		ПодключаемоеОборудование = ВыборкаЗапроса.ПодключаемоеОборудование; 
	Иначе
		ПодключаемоеОборудование = Справочники.ПодключаемоеОборудование.ПустаяСсылка();   	
	КонецЕсли;
	
	Возврат ПодключаемоеОборудование;
	
КонецФункции

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЭтоГруппа ИЛИ
	|	ЗначениеРазрешено(Владелец.Организация)
	|	И( ЗначениеРазрешено(Ссылка)
	|	) ";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

#КонецЕсли

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

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Поля.Добавить("Наименование");
	Поля.Добавить("Код");
	Поля.Добавить("ЭтоГруппа");
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	Если Не Данные.ЭтоГруппа
		И ЗначениеЗаполнено(Данные.Код) И СокрЛП(Данные.Код) <> "0" Тогда
		СтандартнаяОбработка = Ложь;
		Представление = СокрЛП(Данные.Код) + ", " + СокрЛП(Данные.Наименование);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

#КонецЕсли

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