Чек ККМ / Форма оплаты наличными / Модуль формы

файл

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТелефонПриИзменении(Элемент)
	
	Телефон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.1, Истина);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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