Чек ККМ / Форма оплаты ЭС (ФЗ-491) / Модуль формы

файл

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
	
	ПодключитьОбработчикОжидания("УстановитьАктивностьЭлементов", 1, Ложь);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ТелефонПриИзменении(Элемент)
	
	Телефон10Знаков = РозничныеПродажиКлиентСервер.НомерТелефонаВФормате10Знаков(Телефон);
	
КонецПроцедуры

&НаКлиенте
Процедура EmailПриИзменении(Элемент)
	
	РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(
		ЭтотОбъект,
		ПредопределенноеЗначение("Перечисление.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьEmail"));
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Команда0(Команда)
	
	ДобавитьЦифру("0")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	
	ДобавитьЦифру("1")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда2(Команда)
	
	ДобавитьЦифру("2")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда3(Команда)
	
	ДобавитьЦифру("3")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда4(Команда)
	
	ДобавитьЦифру("4")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда5(Команда)
	
	ДобавитьЦифру("5")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда6(Команда)
	
	ДобавитьЦифру("6")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда7(Команда)
	
	ДобавитьЦифру("7")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда8(Команда)
	
	ДобавитьЦифру("8")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда9(Команда)
	
	ДобавитьЦифру("9")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда0ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("0")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда1ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("1")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда2ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("2")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда3ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("3")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда4ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("4")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда5ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("5")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда6ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("6")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда7ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("7")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда8ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("8")
	
КонецПроцедуры

&НаКлиенте
Процедура Команда9ПраваяКлавиатура(Команда)
	
	ДобавитьЦифру("9")
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
	Закрыть(ПараметрыЗакрытияФормы().Отмена);
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПолучитьСписокЭлектронныхСертификатовФСС(Команда)
	
	ПолучитьСписокЭлектронныхСертификатовФССКлиент();
	
КонецПроцедуры

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

#Область ОплатаЭСФСС

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

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

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

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

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

&НаСервере
Функция ПараметрыОперацииНСПКПоКассеККМ(КассаККМ, ИдентификаторКорзины = "", ИдентификаторЗапроса = "0")
	
	Возврат ЭлектронныеСертификатыНСПКУТ.ПараметрыОперацииНСПКПоКассеККМ(КассаККМ, ИдентификаторКорзины, ИдентификаторЗапроса);
	
КонецФункции

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПроверитьВозможностьОплатыЭСФССНаСервере(Организация, КассаККМ, Знач ПодключенныеЭквайринговыеТерминалы)
	
	ЧастиФорматированнойСтроки = Новый Массив;
	
	КассаККМСклад = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КассаККМ, "Склад");
	АдресМагазина = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
		КассаККМСклад, Перечисления.ТипыКонтактнойИнформации.Адрес, ТекущаяДатаСеанса(), Ложь);
	Если Не ЗначениеЗаполнено(АдресМагазина) Тогда
			ЧастиФорматированнойСтроки.Добавить(
				СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Необходимо указать адрес <a href=""%1"">склада</a>.'"),
				ПолучитьНавигационнуюСсылку(КассаККМСклад)));
			ЧастиФорматированнойСтроки.Добавить(Символы.ПС);
	КонецЕсли;
	
	ЕстьНастроенныйТерминал = Ложь;
	Если НЕ ПодключенныеЭквайринговыеТерминалы.Количество() = 0 Тогда
		ЕстьНастроенныйТерминал = Истина;
	КонецЕсли;
	
	Если Не ЕстьНастроенныйТерминал Тогда
		ЧастиФорматированнойСтроки.Добавить(
			СтроковыеФункции.ФорматированнаяСтрока(
				НСтр("ru = 'В доступные виды оплаты эквайрингового терминала необходимо добавить вид оплаты Оплата ЭС (ФЗ-491)'")));
			ЧастиФорматированнойСтроки.Добавить(Символы.ПС);
	КонецЕсли;
	
	Возврат Новый ФорматированнаяСтрока(ЧастиФорматированнойСтроки);
	
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Функция КолонкиТоварыФСС()
	Результат = Новый Структура;
	
	Результат.Вставить("Номенклатура");
	Результат.Вставить("Артикул");
	Результат.Вставить("Сумма");
	
	Возврат Результат;
	
КонецФункции

&НаКлиенте
Процедура ПолучитьСписокЭлектронныхСертификатовФССКлиент()
	
	Если ПредварительноеОдобрениеПолучено = Ложь Тогда
		ИдентификаторУстройства = Неопределено;
		Если ПодключенныеЭквайринговыеТерминалы.Количество() = 1 Тогда
			ИдентификаторУстройства = ПодключенныеЭквайринговыеТерминалы[0].ПодключаемоеОборудование;
		КонецЕсли;

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

&НаКлиенте
Процедура ПолучитьСписокЭлектронныхСертификатовФССКлиентПродолжение(РезультатВыполнения, ДополнительныеПараметры) Экспорт

	Если Не (ТипЗнч(РезультатВыполнения) = Тип("Структура") И РезультатВыполнения.Свойство("Результат")) Тогда
		Возврат;
	КонецЕсли;
	
	Если РезультатВыполнения.Результат Тогда

		ПараметрыОперации = ПараметрыОперацииНСПКПоКассеККМ(КассаККМ);
		ПараметрыОперации.ХешНомерКарты = РезультатВыполнения.ХешНомерКарты;
		ПараметрыОперации.СсылкаНаПлатежныйСчет = РезультатВыполнения.СсылкаНаПлатежныйСчет;

		ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОперациюЭТЗавершение", ЭтотОбъект, ДополнительныеПараметры);

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

&НаКлиенте
Процедура ОбработатьПолучениеСпискаЭлектронныхСертификатовФСС(ДоступныеСертификаты)
	
	НомерЭлектронногоСертификатаФСС = "";
	ЭлементЭлектронногоСертификатаФСС = Элементы.НомерЭлектронногоСертификатаФСС;
	ЭлементЭлектронногоСертификатаФСС.СписокВыбора.Очистить();
	ЭлементЭлектронногоСертификатаФСС.РежимВыбораИзСписка = Ложь;
	
	Если ДоступныеСертификаты.Количество() Тогда
		
		Для Каждого СертификатНСПК Из ДоступныеСертификаты Цикл //Структура
			ИдентификаторСертификатаНСПК = СертификатНСПК.Идентификатор;
			ПредставлениеНомера = НСтр("ru='*'") + Прав(ИдентификаторСертификатаНСПК, 6);
			ЭлементЭлектронногоСертификатаФСС.СписокВыбора.Вставить(0, ПредставлениеНомера, ПредставлениеНомера);
		КонецЦикла;
		
		Если ДоступныеСертификаты.Количество() = 1 Тогда
			НомерЭлектронногоСертификатаФСС = ЭлементЭлектронногоСертификатаФСС.СписокВыбора[0].Значение;
		КонецЕсли;
		
		ЭлементЭлектронногоСертификатаФСС.РежимВыбораИзСписка = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьИзмененияОплатыНаличными(Форма)
	ПолеПолученоНаличнымиДоступно = Форма.ПредварительноеОдобрениеПолучено И Форма.КОплате > Форма.ОплаченоЭСФСС И Не Форма.ОплатаЭСФССПрошлаЧекНеПробит;
	Форма.Элементы.ПолеПолученоНаличными.Доступность = ПолеПолученоНаличнымиДоступно;
	Форма.Элементы.ГруппаОтправкаЭлектронногоЧека.Доступность = Форма.ПредварительноеОдобрениеПолучено;
	Форма.Элементы.ГруппаСтраницаПраваяКлавиатура.Доступность = ПолеПолученоНаличнымиДоступно ИЛИ Форма.АктивноеПоле = Форма.Элементы.Телефон.Имя ИЛИ Форма.АктивноеПоле = Форма.Элементы.НомерЭлектронногоСертификатаФСС.Имя;
	Форма.Элементы.ГруппаСтраницаПрочее.Доступность = ПолеПолученоНаличнымиДоступно ИЛИ Форма.АктивноеПоле = Форма.Элементы.Телефон.Имя ИЛИ Форма.АктивноеПоле = Форма.Элементы.НомерЭлектронногоСертификатаФСС.Имя;
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьЦифру(ВведеннаяЦифраСтрокой)
	
	Если АктивноеПоле = Элементы.ПолеПолученоНаличными.Имя Тогда
		Если ЭтоВозврат Тогда
			Возврат;
		КонецЕсли;
		
		Если ПервыйВвод Тогда
			Если ВведеннаяЦифраСтрокой = "0" Тогда
				Возврат;
			КонецЕсли;
			ПолученоНаличными = "";
			ПервыйВвод = Ложь;
		КонецЕсли;
		
		Запятая = Сред(ПолученоНаличными, СтрДлина(ПолученоНаличными) - КоличествоСимволовПослеЗапятой, 1);
		
		Если НЕ Запятая = "," Тогда
			ПолученоНаличными = ПолученоНаличными + ВведеннаяЦифраСтрокой;
		КонецЕсли;
		
		РассчитатьИтоги(ЭтотОбъект);
		ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
		
	ИначеЕсли АктивноеПоле = Элементы.Телефон.Имя Тогда
		
		Если ПервыйВвод Тогда
			Телефон10Знаков = "";
			ПервыйВвод = Ложь;
		КонецЕсли;
		
		Телефон10Знаков = Телефон10Знаков + ВведеннаяЦифраСтрокой;
		Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Телефон10Знаков);
		
		Если СтрДлина(Телефон10Знаков) = 10 Тогда
			ТекущийЭлемент = Элементы.КомандаПробитьЧек;
		КонецЕсли;
		
		РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(
			ЭтотОбъект,
			ПредопределенноеЗначение("Перечисление.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьSMS"));
		
	ИначеЕсли АктивноеПоле = Элементы.НомерЭлектронногоСертификатаФСС.Имя Тогда
		
		Если ПервыйВвод Тогда
			НомерЭлектронногоСертификатаФСС = "";
			ПервыйВвод = Ложь;
		КонецЕсли;
		
		НомерЭлектронногоСертификатаФСС = НомерЭлектронногоСертификатаФСС + ВведеннаяЦифраСтрокой;
		
		Если СтрДлина(НомерЭлектронногоСертификатаФСС) > 6 Тогда
			ТекущийЭлемент = Элементы.КомандаПробитьЧек;
		КонецЕсли;
		
	ИначеЕсли АктивноеПоле = Элементы.Email.Имя Тогда
		
		Если ПервыйВвод Тогда
			Email = "";
			ПервыйВвод = Ложь;
		КонецЕсли;
		
		Email = СокрЛП(Email) + ВведеннаяЦифраСтрокой;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура СуммаОплаты(Форма)
	
	Форма.СуммаОплаты = РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(Форма.ПолученоНаличными)
	                  + Форма.ОплаченоБонуснымиБаллами
	                  + Форма.ОплаченоПлатежнымиКартами
	                  + Форма.ОплаченоЭСФСС
	                  + Форма.ОплаченоСертификатами;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПолучитьОбновленныеДанныеПоТоварарамФСС()
	
	ПолучитьОбновленныеДанныеПоТоварарамФССНаСервере(ВладелецФормы.Объект);
	
КонецПроцедуры

&НаСервере
Процедура ПолучитьОбновленныеДанныеПоТоварарамФССНаСервере(ЗНАЧ ДанныеОбъекта)
	
	ТоварныеПозиции = ЧекККМЛокализация.ТоварыФССВДокументеКОплате(
		ДанныеОбъекта.Товары.Выгрузить(),
		ДанныеОбъекта.ЦенаВключаетНДС);
	
	ЗаполнитьТоварыФСС(ТоварныеПозиции);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТоварыФСС(ТоварныеПозиции)
	
	ТоварыФСС.Очистить();
	
	Для Каждого СтрокаТовара Из ТоварныеПозиции Цикл
		ТоварныеСтроки = ТоварыФСС.НайтиСтроки(Новый Структура("Номенклатура", СтрокаТовара.Номенклатура));
		Если ТоварныеСтроки.Количество() = 0 Тогда
			НоваяСтрока = ТоварыФСС.Добавить();
			НоваяСтрока.НомерПозиции = НоваяСтрока.ПолучитьИдентификатор();
			НоваяСтрока.НомерПозицииВозврата = 999;
			НоваяСтрока.Артикул = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТовара.Номенклатура, "Код");
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовара);
		Иначе
			НоваяСтрока = ТоварныеСтроки[0];
			НоваяСтрока.Количество = НоваяСтрока.Количество + СтрокаТовара.Количество;
			НоваяСтрока.Сумма = НоваяСтрока.Сумма + СтрокаТовара.Сумма;
			НоваяСтрока.Цена =
				?(НоваяСтрока.Количество = 0, НоваяСтрока.Сумма, Окр(НоваяСтрока.Сумма/НоваяСтрока.Количество, 2));
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПередЗакрытиемВопросЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
	
	Если ОтветНаВопрос = "ОтменитьОплату" Тогда
		
		ПринудительноЗакрытьФормуПриУспешнойОтменеОплаты = Истина;
		
		ПредварительноеОдобрениеПолучено = Ложь;
		ПолученоНаличными = Формат(0, "ЧДЦ=2; ЧГ=3,0");
		ОплаченоЭСФСС = 0;
		ОплаченоПлатежнымиКартами = 0;
		СуммаОплаты = 0;
		ОплаченоБонуснымиБаллами = 0;

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

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

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

&НаКлиенте
Процедура ВывестиИнформациюНаДисплейПокупателя()
	
	Если Не ВводДоступен() Тогда
		Возврат;
	КонецЕсли;
	
	Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМ")
		ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
		ТекстКОплате = НСтр("ru = 'К оплате'")  + ":";
		ТекстСдача   = НСтр("ru = 'Сдача'")     + ":";
		ТекстДоплата = НСтр("ru = 'Доплатить'") + ":";
	Иначе
		ТекстКОплате = НСтр("ru = 'К возврату'") + ":";
		ТекстСдача   = НСтр("ru = 'Сдача'")      + ":";
		ТекстДоплата = НСтр("ru = 'Вернуть'")    + ":";
	КонецЕсли;
	
	ДПТекст1 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(ТекстКОплате, КОплате);
	
	Если СуммаДоплаты > 0 Тогда
		ДПТекст2 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(ТекстДоплата, СуммаДоплаты);
	ИначеЕсли СуммаСдачи > 0 Тогда
		ДПТекст2 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(ТекстСдача, СуммаСдачи);
	Иначе
		ДПТекст2 = "";
	КонецЕсли;
	
	РозничныеПродажиКлиент.ВывестиТекстНаДисплеиПокупателя(
		ВладелецФормы,
		Дисплеи,
		ДПТекст1 + Символы.ПС + ДПТекст2);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьАктивностьЭлементов()
	АктивноеПолеДоИзменения = АктивноеПоле;
	РозничныеПродажиКлиентСервер.УстановитьАктивностьЭлементов(ЭтотОбъект);
	Если АктивноеПолеДоИзменения <> АктивноеПоле Тогда
		УстановитьДоступностьИзмененияОплатыНаличными(ЭтотОбъект);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ОбработатьДанныеЭлектронногоЧека()
	
	Возврат РозничныеПродажи.ОбработатьДанныеЭлектронногоЧека(ЭтотОбъект);
	
КонецФункции

&НаКлиенте
Функция ПараметрыЗакрытияФормы()
	
	ПараметрыЗакрытия = Новый Структура;
	ПараметрыЗакрытия.Вставить("Отмена", "Отмена");
	
	Возврат ПараметрыЗакрытия;
	
КонецФункции

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

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