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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

	Элементы.ЛокализацияГруппаПлатежныеСистемы.Видимость = Ложь;
//++ Локализация

	Элементы.ЛокализацияГруппаПлатежныеСистемы.Видимость = Истина;
	Если ПереводыСБПc2b.ПереводыСБПДоступны() Тогда
		ДействующиеДоговора = РегистрыСведений.НастройкиИнтеграцииСПлатежнымиСистемамиУТ.ДействующиеДоговораСНастройкамиИнтеграции();
		Для Каждого ДействующийДоговор Из ДействующиеДоговора Цикл
			Попытка
				ПараметрыНастройкиПодключения = СистемаБыстрыхПлатежей.НастройкиПодключения(ДействующийДоговор.Интеграция);
			Исключение
				// В данном случае нет необходимости информировать пользователя об ошибке.
				Продолжить;
			КонецПопытки;
			НоваяСтрокаНастроек = НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.Добавить();
			НоваяСтрокаНастроек.ДоговорПодключения = ДействующийДоговор.Договор;
			НоваяСтрокаНастроек.КассовыеСсылки = ПараметрыНастройкиПодключения.НастройкиСБПc2b.КассовыеСсылки; 
			НоваяСтрокаНастроек.ПодключениеКассовойСсылки = ПараметрыНастройкиПодключения.НастройкиСБПc2b.ПодключениеКассовойСсылки;
		КонецЦикла;
	КонецЕсли;
	
	ОпределитьДоступныеДоговорыПодключения();
	УстановитьРежимОтображенияСсылкиСБП();
	
//-- Локализация
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СобытияФормКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ОткрытьСписокИдентификационныеДанныеПользователей(Команда)
	
	ОткрытьФорму("РегистрСведений.ИдентификационныеДанныеПользователей.ФормаСписка");
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура КассирМожетБытьПродавцомПриИзменении(Элемент)
	
	Если Не Объект.МенеджерТорговогоЗалаМожетБытьПродавцом И Не Объект.КассирМожетБытьПродавцом Тогда
		Объект.МенеджерТорговогоЗалаМожетБытьПродавцом = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура МенеджерТорговогоЗалаМожетБытьПродавцомПриИзменении(Элемент)
	
	Если Не Объект.МенеджерТорговогоЗалаМожетБытьПродавцом И Не Объект.КассирМожетБытьПродавцом Тогда
		Объект.КассирМожетБытьПродавцом = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПодключаемоеОборудованиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ТипКассыККМ = ТипКассыККМ(КассаККМ);
	УстановитьОграничениеТипаВыбораЭлементаПоТипуКассыККМ(ТипКассыККМ, Элементы.ПодключаемоеОборудование);
	
	//++ Локализация
	ОпределитьДоступныеДоговорыПодключения();
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура ВидСсылкиСБППриИзменении(Элемент)

//++ Локализация
	
	ОчиститьСообщения();
	Если Объект.ВидСсылкиСБП = ПредопределенноеЗначение("Перечисление.ВидыСсылокСБП.КассоваяСсылкаСБП") Тогда
		
		ВсеДоговораПодключенияПоддерживаютОперациюПоКассовойСсылке = Истина;
		
		ОтборДляПоиска = Новый Структура("ДоговорПодключения,КассовыеСсылки", Неопределено, Истина);
		Для Каждого СтрокаПлатежныеСистемы Из Объект.ПлатежныеСистемы Цикл
			ОтборДляПоиска.ДоговорПодключения = СтрокаПлатежныеСистемы.ДоговорПодключенияКПлатежнойСистеме;
			Если НастройкиПодключенияКПлатежнымСистемамДействующихДоговоров.НайтиСтроки(ОтборДляПоиска).Количество() = 0 Тогда
				ВсеДоговораПодключенияПоддерживаютОперациюПоКассовойСсылке = Ложь;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если Не ВсеДоговораПодключенияПоддерживаютОперациюПоКассовойСсылке Тогда
			ШаблонСообщения = НСтр("ru = 'Договор подключения %1 не поддерживает операции по кассовой ссылке.
										|Для изменения вида ссылки СБП необходимо, чтобы все указанные договора подключения поддерживали операции с этим видом ссылки.'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						ШаблонСообщения,
						ОтборДляПоиска.ДоговорПодключения));
				
			Объект.ВидСсылкиСБП = ПредопределенноеЗначение("Перечисление.ВидыСсылокСБП.ПлатежнаяСсылкаСБП");
			Возврат;
		КонецЕсли;
		
		Если Объект.ПлатежныеСистемы.Количество() > 1 Тогда

			УдаляемыеСтрокиДоговоровСБП = УдаляемыеСтрокиДоговоровСБП(Объект.ВидСсылкиСБП, Объект.ПлатежныеСистемы); 
			Если УдаляемыеСтрокиДоговоровСБП.Количество() > 0 Тогда

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

				Возврат;
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;

	ВидСсылкиСБППослеИзменения();

//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура ПлатежныеСистемыКассоваяСсылкаОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
//++ Локализация
	
	ОткрытьФормуКассовойСсылкиСБП();

//-- Локализация
	
КонецПроцедуры

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

//-- Локализация
	
КонецПроцедуры

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

//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура ПлатежныеСистемыПриАктивизацииСтроки(Элемент)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура КассыККМКассаККМПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.КассыККМ.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	КассыККМКассаККМПриИзмененииНаСервере(ТекущиеДанные.ПолучитьИдентификатор());
	
КонецПроцедуры

&НаСервере
Процедура КассыККМКассаККМПриИзмененииНаСервере(ИдентификаторСтроки)
	
	СтрокаТабличнойЧасти = Объект.КассыККМ.НайтиПоИдентификатору(ИдентификаторСтроки);
	СтароеЗначениеОрганизации = СтрокаТабличнойЧасти.Организация;
	ЗаполнитьОрганизациюВСтрокахТаблицыФормы(Элементы.КассыККМ, ИдентификаторСтроки);
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить("ПодключаемоеОборудование");
	ПроверитьОчиститьСвязанныеПоОрганизацииРеквизитыВСтроке(СтрокаТабличнойЧасти, СтароеЗначениеОрганизации, МассивРеквизитов);
	
	ДополнительныеПараметры = Новый Структура("ИдентификаторСтроки", ИдентификаторСтроки);
	СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "КассаККМ", ДополнительныеПараметры);
	
	//++ Локализация
	ОпределитьДоступныеДоговорыПодключения();
	//-- Локализация
	
КонецПроцедуры

&НаКлиенте
Процедура КассыККМВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СобытияФормКлиент.ПриВыбореЭлемента(ЭтотОбъект, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КассыККМПодключаемоеОборудование.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.КассыККМ.ИспользоватьБезПодключенияОборудования");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Используется без подключения'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭквайринговыеТерминалыПодключаемоеОборудование.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Используется без подключения'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭквайринговыеТерминалыНеЗапрашиватьНомерКарты.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭквайринговыеТерминалыПодключаемоеОборудованиеККТ.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Истина);

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

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

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

// Возвращает типа Кассы ККМ
// 
// Параметры:
//  КассаККМ - СправочникСсылка.КассыККМ - Касса ККМ
// 
// Возвращаемое значение:
//  ПеречислениеСсылка.ТипыКассККМ
//
&НаСервере
Функция ТипКассыККМ(КассаККМ)
	
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КассаККМ, "ТипКассы");
	
КонецФункции

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

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

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

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

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

&НаСервереБезКонтекста
// Параметры:
//	КлючКоманды - Строка 	-
//	КассоваяСсылка - Строка - значение для отображения на QR-коде 	
//	ФорматПечати - Число	- номер формата шаблона печати 	
// Возвращаемое значение:
//	ТабличныйДокумент, Неопределено
Функция ПечатьКассовойСсылкиПоШаблонуНаСервере(НастройкаПечати)
	
	ПараметрыКоманды = Неопределено;
	Если НЕ Справочники.НастройкиРМК.ОписаниеКомандПечатиКассовойСсылки().Свойство(НастройкаПечати.КлючКоманды, ПараметрыКоманды) Тогда
	
		Возврат Неопределено;
	
	КонецЕсли;
	
	ДанныеКассы = Новый Структура("КассоваяСсылка", НастройкаПечати.КассоваяСсылка);
	ПараметрыПечати = Новый Структура("ТипПечати", ПараметрыКоманды.ФорматПечати); 
	
	Возврат ПереводыСБПc2b.КарточкаКассовойСсылки(ДанныеКассы, ПараметрыПечати);

КонецФункции

//-- Локализация

&НаКлиенте
// Параметры:
//	ПараметрыПечати - Структура:
//	 *Форма - ФормаКлиентскогоПриложения
// 
// Возвращаемое значение:
//	Неопределено -
Функция ПечатьКассовойСсылкиПоШаблону(ПараметрыПечати) Экспорт
	
//++ Локализация

	ИсходнаяФорма = ПараметрыПечати.Форма;	// ФормаКлиентскогоПриложения
	ТекДанные = ИсходнаяФорма.Элементы.ПлатежныеСистемы.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		
		Возврат Неопределено;
		
	КонецЕсли;

	ИдентификаторПечатнойФормы = ПараметрыПечати.Идентификатор;

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

	Возврат Неопределено;
	
КонецФункции

//++ Локализация

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

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

//-- Локализация

&НаСервере
Процедура ЗаполнитьСпискиВыбора()
	
//++ Локализация
	
	Элементы.ВидСсылкиСБП.СписокВыбора.Добавить(
		Перечисления.ВидыСсылокСБП.КассоваяСсылкаСБП,
		Перечисления.ВидыСсылокСБП.КассоваяСсылкаСБП);
	Элементы.ВидСсылкиСБП.СписокВыбора.Добавить(
		Перечисления.ВидыСсылокСБП.ПлатежнаяСсылкаСБП,
		Перечисления.ВидыСсылокСБП.ПлатежнаяСсылкаСБП);

//-- Локализация
	
КонецПроцедуры

//++ Локализация

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

&НаКлиенте
Процедура ВидСсылкиСБППослеИзменения()
	
	УстановитьРежимОтображенияСсылкиСБП();
	
КонецПроцедуры

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

//-- Локализация

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

//++ Локализация

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

//-- Локализация

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

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