#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
РозничныеПродажи.ПодписатьГорячиеКлавишиНаКнопках(ЭтотОбъект);
Дисплеи.ЗагрузитьЗначения(МенеджерОборудованияВызовСервера.ОборудованиеПоПараметрам("ДисплейПокупателя"));
АвтоматическиСоздаватьПартнеров = Константы.АвтоматическиСоздаватьПартнеровПриОтправкеЭлектронногоЧекаПокупателю.Получить();
АвтоматическиОбновлятьКонтактыПартнеров = Константы.ОбновлятьКонтактнуюИнформациюПартнеровПриОтправкеЭлектронныхЧеков.Получить();
ОтправкаЭлектронныхЧековПослеПробитияЧека = Константы.ОтправкаЭлектронныхЧековПослеПробитияЧека.Получить();
КоличествоСимволовПослеЗапятой = 2;
РазделительЦелойИДробнойЧасти = Сред(Формат(1.1, "ЧЦ=2; ЧДЦ=1"),2,1);
ПолученоНаличнымиФорматПредставленияЦелыхЧисел = "ЧН=0; ЧГ=3,0";
ИнформацияОбОплате = Параметры.ИнформацияОбОплате;
Документ = ИнформацияОбОплате.Документ;
КОплате = ИнформацияОбОплате.СуммаКОплате;
ПолученоНаличными = Формат(ИнформацияОбОплате.Наличные, ПолученоНаличнымиФорматПредставленияЦелыхЧисел);
ОплаченоСертификатами = ИнформацияОбОплате.ПодарочныеСертификаты;
ОплаченоБонуснымиБаллами = ИнформацияОбОплате.БонусныеБаллы;
КлючСохраненияПоложенияОкна = "377c7c49-b1da-44f8-bcc6-8f35916a4354";
ЭтоПолнаяОплатаПлатежнойКартой = Ложь;
ЭтоПолнаяОплатаПодарочнымиСертификатами = Ложь;
ЭтоПолнаяОплатаЧерезСБП = Ложь;
ЭтоВозврат = Ложь;
ЭтоПолныйВозвратВСменуПродажи = Ложь;
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМВозврат")
ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.ВозвратПодарочныхСертификатов") Тогда
КлючСохраненияПоложенияОкна = "e5abb7c5-8718-44b7-9eaf-728457d19608";
ЭтоВозврат = Истина;
ОплаченоПлатежнымиКартами = ИнформацияОбОплате.ПлатежныеКартыОтменено;
Если Параметры.Свойство("ЭтоПолныйВозвратВСменуПродажи")
И Параметры.ЭтоПолныйВозвратВСменуПродажи = Истина Тогда
ЭтоПолныйВозвратВСменуПродажи = Истина;
КонецЕсли;
Если Параметры.Свойство("СтатусОплатыСБПЧекаПродажи") Тогда
СтатусОплатыСБПЧекаПродажи = Параметры.СтатусОплатыСБПЧекаПродажи;
КонецЕсли;
Иначе
ОплаченоПлатежнымиКартами = ИнформацияОбОплате.ПлатежныеКарты;
КонецЕсли;
Если КОплате = ОплаченоПлатежнымиКартами Тогда
КлючСохраненияПоложенияОкна = "06cf07e4-6da2-4e18-910e-e9eb70d61006";
ЭтоПолнаяОплатаПлатежнойКартой = Истина;
ИначеЕсли КОплате = ОплаченоСертификатами Тогда
КлючСохраненияПоложенияОкна = "2c9507fb-3fc6-4175-bbd9-1a05f3aded5c";
ЭтоПолнаяОплатаПодарочнымиСертификатами = Истина;
КонецЕсли;
ПриСозданииНаСервереЛокализация(ИнформацияОбОплате);
НастроитьВидимостьЭлементов(ИнформацияОбОплате);
Элементы.ГруппаОтправкаЭлектронногоЧека.Видимость = Истина;
ЦветФонаВыделенияПоля = ЦветаСтиля.ЦветФонаВыделения;
Партнер = Параметры.Партнер;
РозничныеПродажи.ЗаполнитьПараметрыОтправкиЭлектронногоЧекаПоПартнеру(ЭтотОбъект);
РозничныеПродажиКлиентСервер.УстановитьАктивныйЭлемент(ЭтотОбъект, Элементы.ПолеПолученоНаличными);
РозничныеПродажиКлиентСервер.УстановитьДоступностьКнопокКлавиатурыФормыСмешаннойОплаты(ЭтотОбъект);
Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Телефон10Знаков);
РассчитатьИтоги(ЭтотОбъект, ИнформацияОбОплате);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
ТекущееОповещение = ОписаниеОповещенияОЗакрытии;
Если ЗавершениеРаботы
И ТипЗнч(ТекущееОповещение) = Тип("ОписаниеОповещения")
И ТипЗнч(ТекущееОповещение.ДополнительныеПараметры) = Тип("Структура")Тогда
ТекущееОповещение.ДополнительныеПараметры.Вставить("ЗавершениеРаботы", ЗавершениеРаботы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.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, Истина);
Иначе
Телефон10Знаков = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомандаСтереть(Команда)
Если АктивноеПоле = Элементы.ПолеПолученоНаличными.Имя Тогда
ПолученоНаличными = "0";
ПолученоНаличнымиЭтоДробноеЧисло = Ложь;
РассчитатьИтоги(ЭтотОбъект);
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ИначеЕсли АктивноеПоле = Элементы.Телефон.Имя Тогда
Телефон10Знаков = "";
Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Телефон10Знаков);
ИначеЕсли АктивноеПоле = Элементы.Email.Имя Тогда
Email = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомандаПробитьЧек(Команда)
СуммаОплатыЧисло = РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными);
ДанныеЭлектронногоЧека = РозничныеПродажиКлиентСервер.ДанныеЭлектронногоЧека(ЭтотОбъект);
НеобходимостьОбработкиДанных = РозничныеПродажиКлиентСервер.ПроверитьНеобходимостьОбработкиДанныхЭлектронногоЧека(ЭтотОбъект);
Если НеобходимостьОбработкиДанных.ТребуетсяОбновитьКонтактнуюИнформацию
Или НеобходимостьОбработкиДанных.ТребуетсяСоздатьПартнера
Или НеобходимостьОбработкиДанных.ТребуетсяОбновитьВариантОтправкиЭлектронногоЧекаПартнера Тогда
ДанныеЭлектронногоЧека = ОбработатьДанныеЭлектронногоЧека();
КонецЕсли;
Если ДанныеЭлектронногоЧека = Неопределено Тогда
Возврат;
КонецЕсли;
РозничныеПродажиКлиент.ЗаблокироватьФорму(ЭтотОбъект);
РезультатОплаты = РозничныеПродажиКлиентСервер.СтруктураРезультатаОплаты();
РезультатОплаты.ПолученоНаличными = СуммаОплатыЧисло;
РезультатОплаты.ДанныеЭлектронногоЧека = ДанныеЭлектронногоЧека;
ПринудительноЗакрытьФорму = Истина;
Закрыть(РезультатОплаты);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФорму(Команда)
ПередЗакрытиемНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОплатаПлатежнаяКарта(Команда)
ОчиститьСообщения();
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ДополнительныеПараметры.Вставить("Форма", ЭтотОбъект);
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМ")
ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
Если СуммаДоплаты <= 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Чек оплачен'"));
Возврат;
КонецЕсли;
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ДобавитьОплатуКартой", ВладелецФормы, ДополнительныеПараметры),
Истина);
Иначе
Если СуммаДоплаты <= 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Чек оплачен'"));
Возврат;
КонецЕсли;
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ОтменитьОплату", ВладелецФормы, ДополнительныеПараметры),
Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьСБП(Команда)
ОплатитьСБПЛокализация();
КонецПроцедуры
&НаКлиенте
Процедура ОплатаПодарочныйСертификат(Команда)
ОчиститьСообщения();
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМ")
ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
Если СуммаДоплаты <= 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Чек оплачен'"));
Возврат;
КонецЕсли;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ДобавитьОплатуПодарочнымСертификатом", ВладелецФормы, ДополнительныеПараметры),
Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОплатаБонусныеБаллы(Команда)
ОчиститьСообщения();
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМ")
ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
Если СуммаДоплаты <= 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Чек оплачен'"));
Возврат;
КонецЕсли;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ДобавитьОплатуБонуснымиБаллами", ВладелецФормы, ДополнительныеПараметры),
Истина);
КонецПроцедуры
&НаКлиенте
Процедура КомандаСторно(Команда)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ОтменитьОплатыПлатежнымиКартами", ВладелецФормы, ДополнительныеПараметры),
Истина);
КонецПроцедуры
&НаКлиенте
Процедура КомандаОтправитьSMS(Команда)
РозничныеПродажиКлиентСервер.УстановитьАктивныйЭлемент(ЭтотОбъект, Элементы.Телефон);
РозничныеПродажиКлиентСервер.УстановитьДоступностьКнопокКлавиатурыФормыСмешаннойОплаты(ЭтотОбъект);
РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(
ЭтотОбъект,
ПредопределенноеЗначение("Перечисление.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьSMS"));
КонецПроцедуры
&НаКлиенте
Процедура КомандаОтправитьEmail(Команда)
РозничныеПродажиКлиентСервер.УстановитьАктивныйЭлемент(ЭтотОбъект, Элементы.Email);
РозничныеПродажиКлиентСервер.УстановитьДоступностьКнопокКлавиатурыФормыСмешаннойОплаты(ЭтотОбъект);
РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(
ЭтотОбъект,
ПредопределенноеЗначение("Перечисление.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьEmail"));
КонецПроцедуры
&НаКлиенте
Процедура КомандаОтправкаНеТребуется(Команда)
РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(
ЭтотОбъект,
ПредопределенноеЗначение("Перечисление.ВариантыОтправкиЭлектронногоЧекаПокупателю.НеОтправлять"));
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ДобавитьЦифру(ВведеннаяЦифраСтрокой)
Если АктивноеПоле = Элементы.ПолеПолученоНаличными.Имя Тогда
Запятая = Сред(ПолученоНаличными, СтрДлина(ПолученоНаличными) - КоличествоСимволовПослеЗапятой, 1);
ЗапятаяВКонцеСтроки = Прав(ПолученоНаличными,1) = РазделительЦелойИДробнойЧасти;
ПолученоНаличнымиЦелаяЧастьЧислом = Цел(РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ПолученоНаличнымиЦелаяЧасть = Формат(ПолученоНаличнымиЦелаяЧастьЧислом, "ЧН=0; ЧГ=0");
ПолученоНаличнымиДробнаяЧасть = Прав(ПолученоНаличными, СтрДлина(ПолученоНаличными) - СтрДлина(Формат(ПолученоНаличнымиЦелаяЧастьЧислом, ПолученоНаличнымиФорматПредставленияЦелыхЧисел)));
Если ПолученоНаличнымиЭтоДробноеЧисло Тогда
Если Не Запятая = РазделительЦелойИДробнойЧасти Тогда
ПолученоНаличнымиДробнаяЧасть = ПолученоНаличнымиДробнаяЧасть + ВведеннаяЦифраСтрокой;
Иначе
Возврат;
КонецЕсли;
Иначе
ПолученоНаличнымиЦелаяЧасть = ПолученоНаличнымиЦелаяЧасть + ВведеннаяЦифраСтрокой;
КонецЕсли;
ПолученоНаличными = Формат(Число(ПолученоНаличнымиЦелаяЧасть), ПолученоНаличнымиФорматПредставленияЦелыхЧисел) + ПолученоНаличнымиДробнаяЧасть;
РассчитатьИтоги(ЭтотОбъект);
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ИначеЕсли АктивноеПоле = Элементы.Телефон.Имя Тогда
Телефон10Знаков = Телефон10Знаков + ВведеннаяЦифраСтрокой;
Телефон = РозничныеПродажиКлиентСервер.ОтформатироватьНомерТелефона(Телефон10Знаков);
Если СтрДлина(Телефон10Знаков) = 10 Тогда
ТекущийЭлемент = Элементы.КомандаПробитьЧек;
КонецЕсли;
РозничныеПродажиКлиентСервер.УстановитьВариантОтправкиЭлектронногоЧека(
ЭтотОбъект,
ПредопределенноеЗначение("Перечисление.ВариантыОтправкиЭлектронногоЧекаПокупателю.ОтправитьSMS"));
ИначеЕсли АктивноеПоле = Элементы.Email.Имя Тогда
Email = СокрЛП(Email) + ВведеннаяЦифраСтрокой;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоги(Форма, ИнформацияОбОплате = Неопределено)
ПолученоНаличнымиЧислом = РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(Форма.ПолученоНаличными);
Форма.СуммаОплаты = ПолученоНаличнымиЧислом
+ Форма.ОплаченоБонуснымиБаллами
+ Форма.ОплаченоПлатежнымиКартами
+ Форма.ОплаченоСертификатами
+ Форма.ОплаченоСБП;
Если Форма.СуммаОплаты >= Форма.КОплате Тогда
Форма.СуммаДоплаты = 0;
Форма.СуммаСдачи = Форма.СуммаОплаты - Форма.КОплате;
Если Форма.ЭтоВозврат И Форма.СуммаСдачи > 0 И Форма.СуммаСдачи <= ПолученоНаличнымиЧислом Тогда
ПолученоНаличнымиЧислом = ПолученоНаличнымиЧислом - Форма.СуммаСдачи;
Форма.СуммаОплаты = Форма.СуммаОплаты - Форма.СуммаСдачи;
Форма.СуммаСдачи = 0;
Форма.ПолученоНаличными = Формат(ПолученоНаличнымиЧислом, Форма.ПолученоНаличнымиФорматПредставленияЦелыхЧисел);
КонецЕсли;
Форма.Элементы.ГруппаИтого.ТекущаяСтраница = Форма.Элементы.ГруппаСдача;
Форма.Элементы.КомандаПробитьЧек.Доступность = Истина;
Форма.ТекущийЭлемент = Форма.Элементы.КомандаПробитьЧек;
Иначе
Форма.СуммаСдачи = 0;
Форма.СуммаДоплаты = Форма.КОплате - Форма.СуммаОплаты;
Форма.Элементы.ГруппаИтого.ТекущаяСтраница = Форма.Элементы.ГруппаДоплата;
Форма.Элементы.КомандаПробитьЧек.Доступность = Ложь;
КонецЕсли;
Если Форма.ЭтоВозврат И ТипЗнч(ИнформацияОбОплате) = Тип("Структура") Тогда
Форма.Элементы.ОплатаПлатежнаяКарта.Доступность = (Форма.СуммаОплаты < ИнформацияОбОплате.СуммаКОплате);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОплатаЗавершение(ИнформацияОбОплате, ДополнительныеПараметры) Экспорт
КОплате = ИнформацияОбОплате.СуммаКОплате;
ОплаченоСертификатами = ИнформацияОбОплате.ПодарочныеСертификаты;
ОплаченоБонуснымиБаллами = ИнформацияОбОплате.БонусныеБаллы;
Если ЭтоВозврат Тогда
ОплаченоПлатежнымиКартами = ИнформацияОбОплате.ПлатежныеКартыОтменено;
Иначе
ОплаченоПлатежнымиКартами = ИнформацияОбОплате.ПлатежныеКарты;
КонецЕсли;
ОплатаЗавершениеЛокализация(ИнформацияОбОплате);
РассчитатьИтоги(ЭтотОбъект, ИнформацияОбОплате);
НастроитьВидимостьЭлементов(ИнформацияОбОплате);
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
Если ПринудительноЗакрытьФормуПриУспешнойОтменеОплаты Тогда
Если ИнформацияОбОплате.ИтогоОплачено = 0
ИЛИ ОтложитьЧекЛокализация(ИнформацияОбОплате) Тогда
ПринудительноЗакрытьФорму = Истина;
Закрыть(ПараметрыЗакрытияФормы().Отмена);
Иначе
ПринудительноЗакрытьФормуПриУспешнойОтменеОплаты = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемВопросЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
Если ОтветНаВопрос = "ОтменитьОплату" Тогда
ПринудительноЗакрытьФормуПриУспешнойОтменеОплаты = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ОтменитьОплату", ВладелецФормы, ДополнительныеПараметры),
Истина);
ИначеЕсли ОтветНаВопрос = "ЗакрытьФорму" Тогда
ПринудительноЗакрытьФормуПриУспешнойОтменеОплаты = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ОтменитьОплатуСторно", ВладелецФормы, ДополнительныеПараметры),
Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьВидимостьЭлементов(ИнформацияОбОплате)
ДоступныеВидыОплаты = ИнформацияОбОплате.ДоступныеВидыОплаты;
Элементы.ПолеОплаченоПлатежнымиКартами.Видимость = ДоступныеВидыОплаты.ПлатежныеКарты;
Элементы.ОплатаПлатежнаяКарта.Видимость = ДоступныеВидыОплаты.ПлатежныеКарты;
Элементы.КомандаСторно.Видимость = ДоступныеВидыОплаты.ПлатежныеКарты;
Элементы.ПолеОплаченоСертификатами.Видимость = ДоступныеВидыОплаты.ПодарочныеСертификаты;
Элементы.ОплатаПодарочныйСертификат.Видимость = ДоступныеВидыОплаты.ПодарочныеСертификаты;
Элементы.ПолеОплаченоБонуснымиБаллами.Видимость = ДоступныеВидыОплаты.БонусныеБаллы;
Элементы.ОплатаБонусныеБаллы.Видимость = ДоступныеВидыОплаты.БонусныеБаллы;
Если ЭтоВозврат Тогда
Заголовок = НСтр("ru = 'Возврат смешанной оплаты'");
Элементы.КОплате.Заголовок = НСтр("ru = 'К возврату'");
Элементы.СуммаСдачи.Заголовок = НСтр("ru = 'Получить сдачу'");
Элементы.СуммаДоплаты.Заголовок = НСтр("ru = 'Осталось вернуть'");
ОплатитьПлатежнойКартойЗаголовок = НСтр("ru = 'Вернуть оплату на платежную карту'");
ОплатитьПлатежнойКартойПодсказка = НСтр("ru = 'Вернуть оплату на платежную карту'");
Если ЭтоПолныйВозвратВСменуПродажи И ИнформацияОбОплате.ПлатежныеКарты > 0 Тогда
ОплатитьПлатежнойКартойЗаголовок = НСтр("ru = 'Отменить оплату платежными картами'");
ОплатитьПлатежнойКартойПодсказка = НСтр("ru = 'Отменить оплату платежными картами'");
КонецЕсли;
Команды.ОплатитьПлатежнойКартой.Заголовок = ОплатитьПлатежнойКартойЗаголовок;
Команды.ОплатитьПлатежнойКартой.Подсказка = ОплатитьПлатежнойКартойПодсказка;
Команды.ОплатитьПодарочнымСертификатом.Заголовок = НСтр("ru = 'Вернуть оплату подарочным сертификатом'");
Команды.ОплатитьПодарочнымСертификатом.Подсказка = НСтр("ru = 'Вернуть оплату подарочным сертификатом'");
Команды.ОплатитьБонуснымиБаллами.Заголовок = НСтр("ru = 'Отменить оплату бонусными баллами'");
Команды.ОплатитьБонуснымиБаллами.Подсказка = НСтр("ru = 'Отменить оплату бонусными баллами'");
Элементы.КомандаСторно.Видимость = Ложь;
КонецЕсли;
Если ЭтоПолнаяОплатаПлатежнойКартой Тогда
Если ЭтоВозврат Тогда
Заголовок = НСтр("ru = 'Возврат оплаты платежной картой'");
Если ЭтоПолныйВозвратВСменуПродажи Тогда
Заголовок = НСтр("ru = 'Отмена оплаты платежной картой'");
КонецЕсли;
Иначе
Заголовок = НСтр("ru = 'Оплата платежной картой'");
КонецЕсли;
Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Отменить оплату'");
Элементы.ПолеПолученоНаличными.Видимость = Ложь;
Элементы.ПолеОплаченоСертификатами.Видимость = Ложь;
Элементы.ПолеОплаченоБонуснымиБаллами.Видимость = Ложь;
Элементы.ПолеОплаченоСБП.Видимость = Ложь;
Элементы.ГруппаВидыОплаты.Видимость = Ложь;
ИначеЕсли ЭтоПолнаяОплатаПодарочнымиСертификатами Тогда
Заголовок = НСтр("ru = 'Оплата подарочными сертификатами'");
Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Отменить оплату'");
Элементы.ПолеПолученоНаличными.Видимость = Ложь;
Элементы.ПолеОплаченоПлатежнымиКартами.Видимость = Ложь;
Элементы.ПолеОплаченоБонуснымиБаллами.Видимость = Ложь;
Элементы.ПолеОплаченоСБП.Видимость = Ложь;
Элементы.ГруппаВидыОплаты.Видимость = Ложь;
КонецЕсли;
НастроитьВидимостьЭлементовЛокализация(ИнформацияОбОплате);
КонецПроцедуры
&НаКлиенте
Процедура ВывестиИнформациюНаДисплейПокупателя()
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
ФорматнаяСтрока = "ЧДЦ=2; ЧРГ=' '; ЧН=0.00; ЧГ=0";
ДлинаТекста = 20;
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМ")
ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
ТекстКОплате = НСтр("ru = 'К оплате'") + ":";
ТекстСдача = НСтр("ru = 'Сдача'") + ":";
ТекстДоплата = НСтр("ru = 'Доплатить'") + ":";
Иначе
ТекстКОплате = НСтр("ru = 'К возврату'") + ":";
ТекстСдача = НСтр("ru = 'Сдача'") + ":";
ТекстДоплата = НСтр("ru = 'Вернуть'") + ":";
КонецЕсли;
ДПТекст1 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(ТекстКОплате, КОплате);
Если СуммаДоплаты > 0 Тогда
ДПТекст2 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(ТекстДоплата, СуммаДоплаты);
ИначеЕсли СуммаСдачи > 0 Тогда
ДПТекст2 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(ТекстСдача, СуммаСдачи);
Иначе
ДПТекст2 = "";
КонецЕсли;
РозничныеПродажиКлиент.ВывестиТекстНаДисплеиПокупателя(
ВладелецФормы,
Дисплеи,
ДПТекст1 + Символы.ПС + ДПТекст2);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьАктивностьЭлементов()
РозничныеПродажиКлиентСервер.УстановитьАктивностьЭлементов(ЭтотОбъект);
РозничныеПродажиКлиентСервер.УстановитьДоступностьКнопокКлавиатурыФормыСмешаннойОплаты(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция ОбработатьДанныеЭлектронногоЧека()
Возврат РозничныеПродажи.ОбработатьДанныеЭлектронногоЧека(ЭтотОбъект);
КонецФункции
&НаКлиенте
Функция ПараметрыЗакрытияФормы()
ПараметрыЗакрытия = Новый Структура;
ПараметрыЗакрытия.Вставить("Отмена", "Отмена");
Возврат ПараметрыЗакрытия;
КонецФункции
&НаКлиенте
Процедура ПередЗакрытиемНаКлиенте(Отказ)
Если РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными) <> 0
ИЛИ ОплаченоПлатежнымиКартами <> 0
ИЛИ ОплаченоСертификатами <> 0
ИЛИ ОплаченоБонуснымиБаллами
ИЛИ ОплаченоСБП <> 0 Тогда
Отказ = Истина;
Если ЭтоВозврат Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("ЗакрытьФорму", НСтр("ru = 'Закрыть окно'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
МассивТекстВопроса = Новый Массив();
Если ОплаченоПлатежнымиКартами <> 0 Тогда
ТекстВопроса = НСтр("ru = 'Данные об отмене возврата на платежную карту отправлены в банк.'");
МассивТекстВопроса.Добавить(ТекстВопроса);
КонецЕсли;
Если ОплаченоСБП <> 0 Тогда
ТекстВопроса = НСтр("ru = 'Данные о возврате оплаты СБП отправлены в банк и банком подтверждена операция.'");
МассивТекстВопроса.Добавить(ТекстВопроса);
КонецЕсли;
ТекстВопроса = НСтр("ru = 'Хотите закрыть окно с потерей введенных данных?'");
МассивТекстВопроса.Добавить(ТекстВопроса);
ПолныйТекстВопроса = "";
Для Каждого ТекстВопроса Из МассивТекстВопроса Цикл
Если ПолныйТекстВопроса <> "" Тогда
ПолныйТекстВопроса = ПолныйТекстВопроса + Символы.ПС;
КонецЕсли;
ПолныйТекстВопроса = ПолныйТекстВопроса + ТекстВопроса;
КонецЦикла;
ПоказатьВопрос(
Новый ОписаниеОповещения("ПередЗакрытиемВопросЗавершение", ЭтотОбъект),
ПолныйТекстВопроса, Кнопки);
Иначе
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("ОтменитьОплату", НСтр("ru = 'Отменить оплату'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Перед закрытием формы оплаты требуется отменить произведенную оплату.'");
Если ОплаченоСБП <> 0 Тогда
ТекстВопроса = НСтр("ru = 'По чеку проведена оплата СБП. Оплату СБП отменить нельзя, требуется пробить чек.
|Отложить чек только в случае отказа оборудования до восстановления работы.
|Откладывая чек другие произведенные формы оплаты потребуется отменить.'");
Кнопки[0].Представление = НСтр("ru = 'Отложить чек'");
КонецЕсли;
ПоказатьВопрос(
Новый ОписаниеОповещения("ПередЗакрытиемВопросЗавершение", ЭтотОбъект),
ТекстВопроса, Кнопки);
КонецЕсли;
Иначе
Закрыть(ПараметрыЗакрытияФормы().Отмена);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Локализация
&НаСервере
Процедура НастроитьВидимостьЭлементовЛокализация(ИнформацияОбОплате)
ДоступныеВидыОплаты = ИнформацияОбОплате.ДоступныеВидыОплаты;
РежимПолнойОплаты = ЭтоПолнаяОплатаПлатежнойКартой ИЛИ ЭтоПолнаяОплатаПодарочнымиСертификатами;
Если ЭтоВозврат Тогда
ВозвратНаОснованииПродажи = Истина;
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМВозврат") Тогда
ДокументОснование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ, "ЧекККМ");
ВозвратНаОснованииПродажи = ЗначениеЗаполнено(ДокументОснование);
КонецЕсли;
Элементы.ОплатаСБП.Заголовок = НСтр("ru = 'Возврат оплаты СБП'");
Элементы.ПолеОплаченоСБП.Видимость = ВозвратНаОснованииПродажи И ИнформацияОбОплате.СБП > 0
ИЛИ ДоступныеВидыОплаты.СБП И НЕ ВозвратНаОснованииПродажи;
Элементы.ОплатаСБП.Видимость = ВозвратНаОснованииПродажи И ИнформацияОбОплате.СБП > 0
ИЛИ ДоступныеВидыОплаты.СБП И НЕ ВозвратНаОснованииПродажи;
Если СтатусОплатыСБПЧекаПродажи = Перечисления.ТипыСтатусовОплатыСБП.ОжидаетПодтверждение Тогда
Элементы.ОплатаСБП.Доступность = Ложь;
Иначе
Элементы.ОплатаСБП.Доступность = НЕ ИнформацияОбОплате.СБПОтменено > 0;
КонецЕсли;
Иначе
Элементы.ПолеОплаченоСБП.Видимость = НЕ РежимПолнойОплаты И ДоступныеВидыОплаты.СБП;
Элементы.ОплатаСБП.Видимость = НЕ РежимПолнойОплаты И ДоступныеВидыОплаты.СБП;
Элементы.ОплатаСБП.Доступность = НЕ ИнформацияОбОплате.СБП > 0;
КонецЕсли;
Если ЭтоПолнаяОплатаЧерезСБП Тогда
Если ЭтоВозврат Тогда
Заголовок = НСтр("ru = 'Возврат оплаты через СБП'");
Иначе
Заголовок = НСтр("ru = 'Оплата через СБП'");
КонецЕсли;
Если ОплаченоСБП = КОплате Тогда
Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'");
Иначе
Элементы.КнопкаЗакрыть.Заголовок = НСтр("ru = 'Отменить оплату'");
КонецЕсли;
Элементы.ПолеПолученоНаличными.Видимость = Ложь;
Элементы.ПолеОплаченоПлатежнымиКартами.Видимость = Ложь;
Элементы.ПолеОплаченоСертификатами.Видимость = Ложь;
Элементы.ПолеОплаченоБонуснымиБаллами.Видимость = Ложь;
Элементы.ГруппаВидыОплаты.Видимость = Ложь;
КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ОплатаЗавершениеЛокализация(ИнформацияОбОплате)
Если ЭтоВозврат Тогда
ОплаченоСБП = ИнформацияОбОплате.СБПОтменено;
Иначе
ОплаченоСБП = ИнформацияОбОплате.СБП;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьСБПЛокализация()
ОчиститьСообщения();
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЧекККМ")
ИЛИ ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
Если СуммаДоплаты <= 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Чек оплачен'"));
Возврат;
КонецЕсли;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеВФормуОплаты", Новый ОписаниеОповещения("ОплатаЗавершение", ЭтотОбъект));
ДополнительныеПараметры.Вставить("ПолученоНаличными", РозничныеПродажиКлиентСервер.ПривестиСтрокуКЧислу(ПолученоНаличными));
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ОткрытьФормуОплатыСБП", ВладелецФормы, ДополнительныеПараметры),
Истина);
КонецПроцедуры
&НаКлиенте
Функция ОтложитьЧекЛокализация(ИнформацияОбОплате)
ОтложитьЧек = Ложь;
Если ИнформацияОбОплате.ИтогоОплачено = ИнформацияОбОплате.СБП Тогда
ОтложитьЧек = Истина;
КонецЕсли;
Возврат ОтложитьЧек;
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервереЛокализация(ИнформацияОбОплате)
Если ЭтоВозврат Тогда
ОплаченоСБП = ИнформацияОбОплате.СБПОтменено;
Иначе
ОплаченоСБП = ИнформацияОбОплате.СБП;
КонецЕсли;
Если КОплате = ОплаченоСБП Тогда
КлючСохраненияПоложенияОкна = "07fb2c95-fc36-4517-d9bb-aded5c1a05f3";
ЭтоПолнаяОплатаЧерезСБП = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти