#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ИспользоватьОплатуПлатежнымиКартами = ПолучитьФункциональнуюОпцию("ИспользоватьОплатуПлатежнымиКартами");
ДанныеФискальнойОперации = РозничныеПродажи.СтруктураДанныеФискальнойОперации();
ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода,
|ДисплейПокупателя,
|ФискальныйРегистратор,
|ККТ,
|ПринтерЧеков,
|ЭквайринговыйТерминал,
|СчитывательМагнитныхКарт";
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтотОбъект, "");
РозничныеПродажи.ЗаполнитьТаблицуОборудование(ЭтотОбъект, ПоддерживаемыеТипыПодключаемогоОборудования);
Если НЕ Справочники.КассыККМ.НастроенаКассаККМДляРМК() Тогда
Элементы.ГруппаНижняяКоманднаяПанельОплата.Доступность = Ложь;
КонецЕсли;
Если ИспользоватьПодключаемоеОборудование Тогда
ОборудованиеПодключено = МенеджерОборудованияВызовСервера.ОборудованиеПоПараметрам(
Неопределено,
Неопределено,
МенеджерОборудованияВызовСервера.РабочееМестоКлиента()).Количество() > 0;
ЗначениеОткрыватьФормуСПодключеннымОборудованием = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"ЧекККМ", "ОткрыватьФормуСПодключеннымОборудованием");
Если ЗначениеОткрыватьФормуСПодключеннымОборудованием = Неопределено Тогда
ОткрыватьФормуСПодключеннымОборудованием = ОборудованиеПодключено;
Иначе
ОткрыватьФормуСПодключеннымОборудованием = ЗначениеОткрыватьФормуСПодключеннымОборудованием И ОборудованиеПодключено;
КонецЕсли;
КонецЕсли;
ПараметрыОбработкиПодарочныхСертификатов = ПодарочныеСертификатыВызовСервера.ПараметрыОбработкиПолученногоКода();
ПараметрыОбработкиПодарочныхСертификатов.РегистрироватьНовые = Истина;
МассивСтатусов = Новый Массив;
МассивСтатусов.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыПодарочныхСертификатов.НеАктивирован"));
ПараметрыОбработкиПодарочныхСертификатов.Отборы.Вставить("Статус", МассивСтатусов);
ПараметрыОбработкиПодарочныхСертификатов.Отборы.Вставить("Организация", Объект.Организация);
ПараметрыОбработкиПодарочныхСертификатов.Отборы.Вставить("ТипОперации", ПодарочныеСертификатыКлиентСервер.ТипОперацииПоПодарочнымСертификатам(Объект));
УстановитьПараметрыВыбораДляПодарочногоСертификата(ЭтотОбъект);
ПриЧтенииСозданииНаСервере();
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ПриСозданииЧека();
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ПриЧтенииСозданииНаСервере();
МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ИспользоватьПодключаемоеОборудование Тогда
Если ОткрыватьФормуСПодключеннымОборудованием И ВладелецФормы = Неопределено Тогда
ПодключитьОбработчикОжидания("ОткрытьФормуПодключенноеОборудованиеОбработчикОжидания", 0.5, Истина);
Иначе
ПодключитьОбработчикОжидания("НачатьПодключениеОборудованияОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецЕсли;
ПересчитатьДокументНаКлиенте();
Если ПринудительнаяАвторизация И ВладелецФормы = Неопределено Тогда
ПодключитьОбработчикОжидания("ОткрытьОкноАвторизации", 0.5, Истина);
КонецЕсли;
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит") Тогда
Возврат;
КонецЕсли;
Если ПринудительноеЗавершениеРаботы Или ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
ПередЗакрытиемЧека(Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Документ.РеализацияПодарочныхСертификатов.Форма.ВыборОтложенногоЧека"
И Объект.Ссылка <> ВыбранноеЗначение Тогда
ЗагрузитьНовыйЧек(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен()
И Не ТолькоПросмотр Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
ИначеЕсли ИмяСобытия ="TracksData" Тогда
ОбработатьДанныеСчитывателяМагнитныхКарт(Параметр);
КонецЕсли;
КонецЕсли;
Если ИмяСобытия = "АвторизованПользователь" Тогда
Если Параметр.Режим = "СменитьПрава" Тогда
НастроитьПраваДляПользователя(Параметр.Пользователь);
ПересчитатьДокументНаКлиенте();
ИначеЕсли Параметр.Режим = "ЗакрытьЧекККМ" Тогда
ПринудительноеЗавершениеРаботы = Истина;
Если Открыта() Тогда
Закрыть();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ИмяСобытия = "ЧтениеКомандФормы"
И Параметр.Форма = УникальныйИдентификатор Тогда
Оповестить("ЧтениеКомандФормы", Новый Структура("Форма, ФормаВладелец, АдресВоВременномХранилище", Параметр.ФормаВладелец, УникальныйИдентификатор, ПолучитьКомандыФормы(Параметр.ФормаВладелец)));
КонецЕсли;
Если ИмяСобытия = "СчитанПодарочныйСертификат"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ОбработатьПодарочныйСертификат(Параметр.ПодарочныйСертификат);
ПересчитатьДокументНаКлиенте();
КонецЕсли;
Если ИмяСобытия = "ОборудованиеПодключено" Тогда
РозничныеПродажиКлиент.ОбработатьСобытиеОборудованиеПодключено(ЭтотОбъект, Параметр, Источник);
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 1, Истина);
КонецЕсли;
Если ИмяСобытия = "ИзменениеКассовойСмены" Тогда
СтруктураСостояниеКассовойСмены = РозничныеПродажиВызовСервера.СостояниеКассовойСмены(Объект.КассаККМ);
ЗаполнитьЗначенияСвойств(Объект, СтруктураСостояниеКассовойСмены,, "Кассир");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_РеализацияПодарочныхСертификатов", ПараметрыЗаписи, Объект.Ссылка);
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ИнформационнаяПанельПрочиеПараметрыЗначениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ИнформационнаяПанельОшибкаПриПечатиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "ПоказатьПолностьюОшибкуПриПечатиЧека" Тогда
ПоказатьЗначение(Неопределено, ИнформационнаяПанельОшибкаПриПечатиЧекаТекст);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПодарочныеСертификаты
&НаКлиенте
Процедура ПодарочныеСертификатыПриАктивизацииСтроки(Элемент)
ОбновитьДанныеИнформационнойПанели(Истина = ТолькоПросмотр);
КонецПроцедуры
&НаКлиенте
Процедура ПодарочныеСертификатыПриИзменении(Элемент)
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ПодарочныеСертификатыПодарочныйСертификатПриИзменении(Элемент)
ПодарочныйСертификат = Элементы.ПодарочныеСертификаты.ТекущиеДанные.ПодарочныйСертификат;
ОбработатьПодарочныйСертификат(ПодарочныйСертификат, Элементы.ПодарочныеСертификаты.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПодарочныеСертификатыПодарочныйСертификатНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтруктураПараметров = Новый Структура("Отбор", ПараметрыОбработкиПодарочныхСертификатов.Отборы);
ОткрытьФорму("Справочник.ПодарочныеСертификаты.ФормаВыбора", СтруктураПараметров, ЭтотОбъект,,,,
Новый ОписаниеОповещения("ПодарочныеСертификатыПодарочныйСертификатНачалоВыбораЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПодарочныеСертификатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле = Элементы.ПодарочныеСертификатыПодарочныйСертификат Тогда
ПоказатьЗначение(Неопределено, Элементы.ПодарочныеСертификаты.ТекущиеДанные.ПодарочныйСертификат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодарочныеСертификатыПодарочныйСертификатНачалоВыбораЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыбранныйСертификат = Результат;
Если ВыбранныйСертификат = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ПодарочныеСертификаты.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ТекущиеДанные.ПодарочныйСертификат = ВыбранныйСертификат;
ОбработатьПодарочныйСертификат(ВыбранныйСертификат, Элементы.ПодарочныеСертификаты.ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура СчитатьПодарочныйСертификат(Команда)
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("НеИспользоватьРучнойВвод", Ложь);
ДополнительныеПараметры.Вставить("Отбор", ПараметрыОбработкиПодарочныхСертификатов.Отборы);
ДополнительныеПараметры.Вставить("РегистрироватьНовые", ПараметрыОбработкиПодарочныхСертификатов.РегистрироватьНовые);
ОткрытьФорму(
"Справочник.ПодарочныеСертификаты.Форма.СчитываниеПодарочногоСертификата",
ДополнительныеПараметры,
ЭтотОбъект,
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьМенюОперацииСККМ(Команда)
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("КассаККМ", Объект.КассаККМ);
ПараметрыОткрытияФормы.Вставить("Кассир", Объект.Кассир);
ПараметрыОткрытияФормы.Вставить("ИзменитьКассуККМ", Истина);
ОткрытьФорму("Документ.ЧекККМ.Форма.МенюОперацииСККМ", ПараметрыОткрытияФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьМенюПрочихОпераций(Команда)
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("КассаККМ", Объект.КассаККМ);
ПараметрыОткрытияФормы.Вставить("Кассир", Объект.Кассир);
ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ПараметрыОткрытияФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыОткрытияФормы.Вставить("НеВыводитьЗагрузкуИзТСД", Истина);
ПараметрыОткрытияФормы.Вставить("Организация", Объект.Организация);
ПараметрыОткрытияФормы.Вставить("ПроверитьКоличествоВДокументе", Ложь);
ПараметрыОткрытияФормы.Вставить("ПродажаПодарочногоСертификата", Ложь);
ПараметрыОткрытияФормы.Вставить("ВозвратПодарочногоСертификата", Ложь);
ПараметрыОткрытияФормы.Вставить("Заблокировать", ПринудительнаяАвторизация);
ПараметрыОткрытияФормы.Вставить("АдресКомандПечатиВоВременномХранилище", АдресКомандПечатиВоВременномХранилище);
ОткрытьФорму("Документ.ЧекККМ.Форма.МенюПрочиеОперации", ПараметрыОткрытияФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПодключенноеОборудование(Команда)
РозничныеПродажиКлиент.ОткрытьФормуПодключенноеОборудование(ЭтотОбъект, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьНаличными(Команда)
РозничныеПродажиКлиент.ЗаблокироватьФорму(ЭтотОбъект);
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
ЭтотОбъект,
Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьПлатежнойКартой(Команда)
РозничныеПродажиКлиент.ЗаблокироватьФорму(ЭтотОбъект);
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
ЭтотОбъект,
Новый ОписаниеОповещения("ОплатитьПлатежнойКартойОбработкаОповещения", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура СмешаннаяОплата(Команда)
РозничныеПродажиКлиент.ЗаблокироватьФорму(ЭтотОбъект);
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
ЭтотОбъект,
Новый ОписаниеОповещения("СмешаннаяОплатаОбработкаОповещения", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьСБП(Команда)
ОплатитьСБПЛокализация();
КонецПроцедуры
&НаКлиенте
Процедура НовыйЧек(Команда)
ЗагрузитьНовыйЧек();
КонецПроцедуры
&НаКлиенте
Процедура ВозвратТовара(Команда)
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ОбработкаОповещения = Новый ОписаниеОповещения("ВозвратТовараОбработкаОповещения", ЭтотОбъект);
РозничныеПродажиКлиент.ОбработатьСостояниеСмены(ЭтотОбъект, ОбработкаОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОплатыПлатежнымиКартами(Команда)
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ВыполнитьОбработкуОповещения(
Новый ОписаниеОповещения("ОтменитьОплатыПлатежнымиКартами", ЭтотОбъект, ДополнительныеПараметры));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьИнформационнуюПанельОшибкиПриПечатиЧека(Команда)
Элементы.ИнформационнаяПанельОшибкаПриПечатиЧека.Заголовок = "";
ИнформационнаяПанельОшибкаПриПечатиЧекаТекст = "";
Элементы.ГруппаИнформационнаяПанельОшибкаПриПечатиЧека.Видимость = Ложь;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ДанныеШтрихкодов) = Тип("Массив") Тогда
МассивШтрихкодов = ДанныеШтрихкодов;
Иначе
МассивШтрихкодов = Новый Массив;
МассивШтрихкодов.Добавить(ДанныеШтрихкодов);
КонецЕсли;
ПодарочныеСертификатыКлиент.ОбработатьПолученныйКодНаКлиенте(
ЭтотОбъект,
МассивШтрихкодов[0].Штрихкод,
ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.Штрихкод"),
ПараметрыОбработкиПодарочныхСертификатов);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьДанныеСчитывателяМагнитныхКарт(Данные)
ПодарочныеСертификатыКлиент.ОбработатьПолученныйКодНаКлиенте(
ЭтотОбъект,
Данные,
ПредопределенноеЗначение("Перечисление.ТипыКодовКарт.МагнитныйКод"),
ПараметрыОбработкиПодарочныхСертификатов);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуПодключенноеОборудованиеОбработчикОжидания()
РозничныеПродажиКлиент.ОткрытьФормуПодключенноеОборудование(ЭтотОбъект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачатьПодключениеОборудованияОбработчикОжидания()
ОписаниеЗавершения = Новый ОписаниеОповещения("НачатьПодключениеОборудованиеПриОткрытииФормыЗавершение", РозничныеПродажиКлиент, Новый Структура("Форма", ЭтотОбъект));
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(ОписаниеЗавершения, ЭтотОбъект, ПоддерживаемыеТипыПодключаемогоОборудования);
КонецПроцедуры
&НаКлиенте
Процедура ВывестиИнформациюНаДисплейПокупателя()
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
Если ВывестиКОплатеНаДисплейПокупателя Тогда
ИнформацияОбОплате = ИнформацияОбОплате(ЭтотОбъект);
ДПТекст1 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(
НСтр("ru='К оплате:'"), ИнформацияОбОплате.СуммаКОплате);
ДПТекст2 = "";
Иначе
КоличествоСтрокВТЧ = Объект.ПодарочныеСертификаты.Количество();
ТекущаяСтрока = Элементы.ПодарочныеСертификаты.ТекущаяСтрока;
Если ТекущаяСтрока = Неопределено И КоличествоСтрокВТЧ > 0 Тогда
ТекущиеДанные = Объект.ПодарочныеСертификаты[КоличествоСтрокВТЧ - 1];
Элементы.ПодарочныеСертификаты.ТекущаяСтрока = ТекущиеДанные.ПолучитьИдентификатор();
ИначеЕсли ТекущаяСтрока = Неопределено И КоличествоСтрокВТЧ = 0 Тогда
ТекущиеДанные = Неопределено;
Иначе
ТекущиеДанные = Объект.ПодарочныеСертификаты.НайтиПоИдентификатору(ТекущаяСтрока);
КонецЕсли;
ДПТекст1 = НСтр("ru = 'Здравствуйте!'");
Если ТекущиеДанные <> Неопределено Тогда
Если ЗначениеЗаполнено(ТекущиеДанные.ПодарочныйСертификат) Тогда
ДПТекст1 = Формат(ТекущиеДанные.Номинал, "ЧДЦ=2") + " " + Строка(ТекущиеДанные.ВалютаНоминала);
Иначе
ДПТекст1 = "";
КонецЕсли;
КонецЕсли;
ДПТекст2 = РозничныеПродажиКлиент.ПодготовитьСтрокуКВыводуНаДисплейПокупателя(
НСтр("ru='Итог:'"), СуммаДокумента);
КонецЕсли;
РозничныеПродажиКлиент.ВывестиТекстНаДисплеиПокупателя(
ЭтотОбъект,
Дисплеи,
ДПТекст1 + Символы.ПС + ДПТекст2);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиенте
Процедура ОткрытьОкноАвторизации()
ОткрытьФорму("Документ.ЧекККМ.Форма.Авторизация", Новый Структура("Режим", "СменитьПрава"), ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
ПараметрыКассыККМ = Новый ФиксированнаяСтруктура(Справочники.КассыККМ.ПараметрыКассыККМ(Объект.КассаККМ));
ВерсияФФД = МенеджерОборудованияВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД(ПараметрыКассыККМ.ИдентификаторУстройства);
ОбновитьОрганизацияПлательщикНДС();
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ВЫРАЗИТЬ(Т.ПодарочныйСертификат КАК Справочник.ПодарочныеСертификаты) КАК ПодарочныйСертификат
|ПОМЕСТИТЬ ВременнаяТаблица
|ИЗ
| &ПодарочныеСертификаты КАК Т
|
|ИНДЕКСИРОВАТЬ ПО
| ПодарочныйСертификат
|;
|
|
|ВЫБРАТЬ
| ВременнаяТаблица.ПодарочныйСертификат КАК ПодарочныйСертификат,
| ПодарочныеСертификаты.Владелец.Номинал КАК Номинал,
| ПодарочныеСертификаты.Владелец.Валюта КАК ВалютаНоминала
|ИЗ
| ВременнаяТаблица КАК ВременнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодарочныеСертификаты КАК ПодарочныеСертификаты
| ПО ВременнаяТаблица.ПодарочныйСертификат = ПодарочныеСертификаты.Ссылка");
Запрос.УстановитьПараметр("ПодарочныеСертификаты", Объект.ПодарочныеСертификаты.Выгрузить());
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
НайденныеСтроки = Объект.ПодарочныеСертификаты.НайтиСтроки(Новый Структура("ПодарочныйСертификат", Выборка.ПодарочныйСертификат));
Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл
СтрокаТЧ.Номинал = Выборка.Номинал;
СтрокаТЧ.ВалютаНоминала = Выборка.ВалютаНоминала;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаПриПроведенииЧекаВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> КодВозвратаДиалога.Отмена Тогда
ТребуетсяПовторнаяПопыткаЗаписи = Ложь;
Если ДополнительныеПараметры.ИмяПроцедуры = "ЗаписатьНаСервере" Тогда
РезультатОперации = ЗаписатьНаСервере(ТребуетсяПовторнаяПопыткаЗаписи);
ИначеЕсли ДополнительныеПараметры.ИмяПроцедуры = "ЗаписатьФискальнуюОперациюНаСервере" Тогда
РезультатОперации = ЗаписатьФискальнуюОперациюНаСервере(ТребуетсяПовторнаяПопыткаЗаписи, ДополнительныеПараметры.РеквизитыФискальнойОперацииКассовогоУзла);
КонецЕсли;
Если РезультатОперации Тогда
ВыполнитьОбработкуОповещения(
ДополнительныеПараметры.ОписаниеОповещения,
?(ДополнительныеПараметры.ВозвращатьРезультатФункции, РезультатОперации, ДополнительныеПараметры.РезультатПриУспешномПроведении));
Иначе
ПоказатьВопрос(
Новый ОписаниеОповещения("ОшибкаПриПроведенииЧекаВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ДополнительныеПараметры.ТекстСообщения,
РежимДиалогаВопрос.ПовторитьОтмена, 10, КодВозвратаДиалога.Повторить,,КодВозвратаДиалога.Повторить);
КонецЕсли;
Иначе
ВыполнитьОбработкуОповещения(
ДополнительныеПараметры.ОписаниеОповещения,
?(ДополнительныеПараметры.ВозвращатьРезультатФункции, ДополнительныеПараметры.РезультатОперации, ДополнительныеПараметры.РезультатПриОтмене));
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаписатьНаСервере(ТребуетсяПовторнаяПопыткаЗаписи = Неопределено)
Объект.Дата = ТекущаяДатаСеанса();
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Значение = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.РеализацияПодарочныхСертификатов"));
Значение.УстановитьСсылкуНового(Документы.РеализацияПодарочныхСертификатов.ПолучитьСсылку());
ЗначениеВДанныеФормы(Значение, Объект);
КонецЕсли;
Результат = Ложь;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить();
ЭлементБлокировки.Область = "Документ.РеализацияПодарочныхСертификатов";
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировки.УстановитьЗначение("Ссылка", Объект.Ссылка);
Блокировка.Заблокировать();
Результат = Записать(Новый Структура("РежимЗаписи, РежимПроведения", РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный));
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТребуетсяПовторнаяПопыткаЗаписи = Истина;
КонецПопытки;
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ЗаписатьНаКлиенте(ТребуетсяПовторнаяПопыткаЗаписи = Неопределено)
Если Модифицированность Тогда
Результат = ЗаписатьНаСервере(ТребуетсяПовторнаяПопыткаЗаписи);
Если Результат Тогда
Оповестить("Запись_РеализацияПодарочныхСертификатов", Новый Структура, Неопределено);
КонецЕсли;
ОбработатьПодарочныеСертификатыНаСервере();
Возврат Результат;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПересчитатьДокументНаКлиенте()
Элементы.ВозвратТовара.Доступность = ПраваДоступа.ВозвратТовара;
Элементы.ПодарочныеСертификаты.ИзменятьСоставСтрок = ПраваДоступа.КорректировкаСтрок;
Элементы.ПодарочныеСертификатыКонтекстноеМенюУдалить.Доступность = ПраваДоступа.КорректировкаСтрок;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ОбновитьДанныеИнформационнойПанели(Истина = ТолькоПросмотр);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСсылкиНаОборудование()
РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента();
ЭквайринговыеТерминалы.Очистить();
ЭквайринговыеТерминалы = Справочники.ЭквайринговыеТерминалы.ПараметрыЭквайринговыхТерминаловПоОрганизации(Объект.Организация, РабочееМесто, ИспользоватьПодключаемоеОборудование);
Если ИспользоватьПодключаемоеОборудование Тогда
Дисплеи.ЗагрузитьЗначения(МенеджерОборудованияВызовСервера.ОборудованиеПоПараметрам("ДисплейПокупателя"));
КонецЕсли;
ПараметрыКассыККМ = Новый ФиксированнаяСтруктура(Справочники.КассыККМ.ПараметрыКассыККМ(Объект.КассаККМ));
ВерсияФФД = МенеджерОборудованияВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД(ПараметрыКассыККМ.ИдентификаторУстройства);
ОбновитьОрганизацияПлательщикНДС();
КонецПроцедуры
&НаСервере
Процедура ОбработатьПодарочныеСертификатыНаСервере()
ОтборПоПодарочномуСертификату = Объект.ПодарочныеСертификаты.Выгрузить(,"ПодарочныйСертификат").ВыгрузитьКолонку("ПодарочныйСертификат");
Выборка = Справочники.ПодарочныеСертификаты.ВыборкаДанныхПоПодарочнымСертификатамДляОбработки(ОтборПоПодарочномуСертификату, Объект);
Для Каждого стрСертификат Из Объект.ПодарочныеСертификаты Цикл
Выборка.Сбросить();
Если Выборка.НайтиСледующий(СтрСертификат.ПодарочныйСертификат, "ПодарочныйСертификат") Тогда
стрСертификат.Сумма = Выборка.Сумма;
стрСертификат.Номинал = Выборка.Номинал;
стрСертификат.ВалютаНоминала = Выборка.ВалютаНоминала;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработатьПодарочныйСертификат(ПодарочныйСертификат, СтрокаТЧ = Неопределено)
Выборка = Справочники.ПодарочныеСертификаты.ВыборкаДанныхПоПодарочнымСертификатамДляОбработки(ПодарочныйСертификат, Объект);
Если Выборка.Следующий() Тогда
Если СтрокаТЧ = Неопределено Тогда
НайденныеСтроки = Объект.ПодарочныеСертификаты.НайтиСтроки(Новый Структура("ПодарочныйСертификат", ПодарочныйСертификат));
Если НайденныеСтроки.Количество() = 0 Тогда
НайденнаяСтрока = Объект.ПодарочныеСертификаты.Добавить();
Иначе
НайденнаяСтрока = НайденныеСтроки[0];
КонецЕсли;
Иначе
НайденнаяСтрока = Объект.ПодарочныеСертификаты.НайтиПоИдентификатору(СтрокаТЧ);
КонецЕсли;
НайденнаяСтрока.ПодарочныйСертификат = ПодарочныйСертификат;
НайденнаяСтрока.Сумма = Выборка.Сумма;
НайденнаяСтрока.Номинал = Выборка.Номинал;
НайденнаяСтрока.ВалютаНоминала = Выборка.ВалютаНоминала;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПоместитьТабличнуюЧастьОплатыПлатежнымиКартамиВХранилище()
Возврат ПоместитьВоВременноеХранилище(Объект.ОплатаПлатежнымиКартами.Выгрузить(), УникальныйИдентификатор);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПараметрыВыбораДляПодарочногоСертификата(Форма)
ПараметрыВыбораПодарочногоСертификата = Новый Массив;
СтруктураОтбора = Форма.ПараметрыОбработкиПодарочныхСертификатов.Отборы;
Если СтруктураОтбора.Свойство("Статус") Тогда
ПараметрыВыбораПодарочногоСертификата.Добавить(Новый ПараметрВыбора("Статус", СтруктураОтбора.Статус));
КонецЕсли;
Форма.Элементы.ПодарочныеСертификатыПодарочныйСертификат.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораПодарочногоСертификата);
КонецПроцедуры
#Область ПечатьЧека
&НаСервере
Функция ПараметрыОперацииФискализацииЧекаНаСервере(ИнформацияОбОплате)
Возврат ПараметрыОперацииФискализацииЧекаНаСервереЛокализация(ИнформацияОбОплате);
КонецФункции
&НаКлиенте
Функция ПараметрыОперацииФискализацииЧека()
Возврат ПараметрыОперацииФискализацииЧекаНаСервере(ИнформацияОбОплате(ЭтотОбъект));
КонецФункции
&НаКлиенте
Процедура ПробитьЧек()
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ЕстьОшибки = Ложь;
Если Объект.ПометкаУдаления Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Документ помечен на удаление'"), Объект.Ссылка,,,ЕстьОшибки);
КонецЕсли;
Модифицированность = Истина;
Если ЕстьОшибки Или Не ПроверитьЗаполнение() Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ПараметрыОперацииФискализацииЧека = ПараметрыОперацииФискализацииЧека();
ПечатьЧекаПослеЗаписиИзмененийЛокализация(ПараметрыОперацииФискализацииЧека);
КонецПроцедуры
#Область ФискальнаяОперация
&НаСервере
Функция ЗаписатьФискальнуюОперациюНаСервере(ТребуетсяПовторнаяПопыткаЗаписи, РеквизитыФискальнойОперацииКассовогоУзла)
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ПараметрыЗаписи.Вставить("РежимПроведения", РежимПроведенияДокумента.Оперативный);
Результат = РозничныеПродажи.ЗаписатьФискальнуюОперациюНаСервере(ЭтотОбъект, РеквизитыФискальнойОперацииКассовогоУзла, ПараметрыЗаписи);
Если Не Результат Тогда
ТребуетсяПовторнаяПопыткаЗаписи = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
&НаСервере
Процедура ОбновитьСостояниеКассовойСмены()
Если ЗначениеЗаполнено(Объект.КассаККМ)
И Объект.Статус <> Перечисления.СтатусыЧековККМ.Пробит Тогда
СтруктураСостояниеКассовойСмены = РозничныеПродажи.ПолучитьСостояниеКассовойСмены(Объект.КассаККМ);
Если Объект.КассоваяСмена <> СтруктураСостояниеКассовойСмены.КассоваяСмена Тогда
ЗаполнитьЗначенияСвойств(Объект, СтруктураСостояниеКассовойСмены,,"Кассир");
КонецЕсли;
ТекущийПользователь = Пользователи.ТекущийПользователь();
Если Объект.Кассир <> ТекущийПользователь Тогда
Объект.Кассир = ТекущийПользователь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ИзменитьКассуККМЗавершение(КассаККМ, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(КассаККМ) Тогда
Возврат;
КонецЕсли;
ИзменитьКассуККМ(КассаККМ);
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаСервере
Процедура ИзменитьКассуККМ(КассаККМ)
Объект.КассаККМ = КассаККМ;
ПараметрыКассыККМ = Новый ФиксированнаяСтруктура(Справочники.КассыККМ.ПараметрыКассыККМ(Объект.КассаККМ));
ВерсияФФД = МенеджерОборудованияВызовСервера.ФискальноеУстройствоПоддерживаетВерсиюФФД(ПараметрыКассыККМ.ИдентификаторУстройства);
Если ЗначениеЗаполнено(ПараметрыКассыККМ.Организация) И
ПараметрыКассыККМ.Организация <> Объект.Организация Тогда
НовыйЧекНаСервере();
ПараметрыОбработкиПодарочныхСертификатов.Отборы.Вставить("Организация", Объект.Организация);
ОбновитьОрганизацияПлательщикНДС();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьОрганизацияПлательщикНДС()
РеализацияПодарочныхСертификатовЛокализация.ОбновитьОрганизацияПлательщикНДС(ПараметрыКассыККМ.Организация, ОрганизацияПлательщикНДС);
КонецПроцедуры
&НаСервере
Процедура НастроитьРМК()
УстановитьПривилегированныйРежим(Истина);
ПолучитьСсылкиНаОборудование();
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
Элементы.СуммаБезСкидки.Ширина = 22;
Элементы.СуммаКОплате.Ширина = 22;
КонецЕсли;
ТекстЗаголовока = Элементы.ПодарочныеСертификатыСумма.Заголовок;
ТекстВалюты = "(" + Объект.Валюта + ")";
Если СтрНайти(ТекстЗаголовока, ТекстВалюты) > 0 Тогда
ТекстЗаголовока = СокрЛП(Лев(ТекстЗаголовока, СтрНайти(ТекстЗаголовока, ТекстВалюты) - 1));
КонецЕсли;
Элементы.ПодарочныеСертификатыСумма.Заголовок = ТекстЗаголовока + " " + ТекстВалюты;
РозничныеПродажи.ПодписатьГорячиеКлавишиНаКнопках(ЭтотОбъект);
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЕСТЬNULL(НастройкиРМК.ГорячиеКлавиши, Неопределено) КАК ГорячиеКлавиши,
| ЕСТЬNULL(НастройкиРМК.ГорячиеКлавиши.КомандыФормы, Неопределено) КАК КомандыФормы,
| НастройкиРМК.ИспользоватьАвторизацию КАК ИспользоватьАвторизацию
|ИЗ
| Справочник.НастройкиРМК КАК НастройкиРМК
|ГДЕ
| НастройкиРМК.РабочееМесто = &РабочееМесто
| И НастройкиРМК.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ Т.Ссылка ИЗ Справочник.НастройкиРМК.КассыККМ КАК Т ГДЕ Т.КассаККМ = &КассаККМ)
|");
Запрос.УстановитьПараметр("РабочееМесто", МенеджерОборудованияВызовСервера.РабочееМестоКлиента());
Запрос.УстановитьПараметр("КассаККМ", Объект.КассаККМ);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ГорячиеКлавиши = Выборка.ГорячиеКлавиши;
ПринудительнаяАвторизация = Выборка.ИспользоватьАвторизацию;
Если ЗначениеЗаполнено(ГорячиеКлавиши) Тогда
РозничныеПродажи.НастроитьБыстрыеТоварыИГорячиеКлавиши(ЭтотОбъект, Выборка);
КонецЕсли;
Иначе
ГорячиеКлавиши = Неопределено;
ПринудительнаяАвторизация = Ложь;
КонецЕсли;
НастроитьПраваДляПользователя(Объект.Кассир);
ДоступныеВидыОплаты = РозничныеПродажиКлиентСервер.ДоступныеВидыОплаты(ЭтотОбъект);
Элементы.ОплатитьНаличными.Видимость = ДоступныеВидыОплаты.Наличные;
Элементы.ОплатитьКартой.Видимость = ДоступныеВидыОплаты.ПлатежныеКарты;
Элементы.СмешаннаяОплата.Видимость = ДоступныеВидыОплаты.ПлатежныеКарты;
Элементы.ОплатитьНаличными.Доступность = Истина;
Элементы.ОплатитьКартой.Доступность = Истина;
Элементы.СмешаннаяОплата.Доступность = Истина;
ЭлементыНаПерегруппировку = Новый Массив;
ЭлементыНаПерегруппировку.Добавить(Элементы.ОплатитьНаличными);
ЭлементыНаПерегруппировку.Добавить(Элементы.ОплатитьКартой);
ЭлементыНаПерегруппировку.Добавить(Элементы.СмешаннаяОплата);
НастроитьРМКЛокализация(ДоступныеВидыОплаты, ЭлементыНаПерегруппировку);
РозничныеПродажи.ПерегруппироватьКнопкиФормы(ЭтотОбъект, ЭлементыНаПерегруппировку);
РозничныеПродажи.НастроитьКомандыПечати(ЭтотОбъект, Элементы.ПеремещаемыеКнопки);
КонецПроцедуры
&НаСервере
Процедура НастроитьПраваДляПользователя(Пользователь)
ПраваДоступа = НастройкиПродажДляПользователейСервер.ПраваДоступаРМК(Пользователь);
Объект.Кассир = Пользователь;
РеквизитыКассира = РозничныеПродажи.РеквизитыКассира(Пользователь, Объект.Организация);
ОбновитьЗаголовокФормы();
КонецПроцедуры
&НаСервере
Процедура ОбновитьЗаголовокФормы()
Заголовок = НСтр("ru = 'Продажа (Кассир: %Кассир%)'");
Заголовок = СтрЗаменить(Заголовок, "%Кассир%", Объект.Кассир);
КонецПроцедуры
&НаСервере
Функция ПолучитьКомандыФормы(УникальныйИдентификатор)
КомандыФормы = Новый Массив;
Для Каждого КомандаФормы Из Команды Цикл
Если НЕ КомандаФормы.СочетаниеКлавиш.Клавиша = Клавиша.Нет Тогда
КомандыФормы.Добавить(Новый Структура("ИмяКоманды, Заголовок, СочетаниеКлавиш", КомандаФормы.Имя, КомандаФормы.Заголовок, КомандаФормы.СочетаниеКлавиш));
КонецЕсли;
КонецЦикла;
Возврат ПоместитьВоВременноеХранилище(КомандыФормы, УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ОбновитьДанныеИнформационнойПанели(ОтобразитьСдачу = Ложь)
ИнформацияОбОплате = ИнформацияОбОплате(ЭтотОбъект);
ИнформационнаяПанельСуммаКОплате = ИнформацияОбОплате.СуммаКОплате;
ИнформационнаяПанельСуммаБезСкидки = ИнформацияОбОплате.СуммаДокумента;
КоличествоСтрокВТЧ = Объект.ПодарочныеСертификаты.Количество();
ТекущаяСтрока = Элементы.ПодарочныеСертификаты.ТекущаяСтрока;
Если ТекущаяСтрока = Неопределено И КоличествоСтрокВТЧ > 0 Тогда
ТекущиеДанные = Объект.ПодарочныеСертификаты[КоличествоСтрокВТЧ - 1];
Элементы.ПодарочныеСертификаты.ТекущаяСтрока = ТекущиеДанные.ПолучитьИдентификатор();
ИначеЕсли ТекущаяСтрока = Неопределено И КоличествоСтрокВТЧ = 0 Тогда
ТекущиеДанные = Неопределено;
Иначе
ТекущиеДанные = Объект.ПодарочныеСертификаты.НайтиПоИдентификатору(ТекущаяСтрока);
КонецЕсли;
НаименованиеТовара = "";
Если ТекущиеДанные <> Неопределено Тогда
НаименованиеТовара = Строка(ТекущиеДанные.ПодарочныйСертификат);
КонецЕсли;
ОбязательныеРеквизиты = Новый Массив;
ДанныеСтроки = Новый Структура;
Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.ПодарочныйСертификат) Тогда
ДанныеСтроки.Вставить("Номинал", Формат(ТекущиеДанные.Номинал, "ЧДЦ=2") + " " + Строка(ТекущиеДанные.ВалютаНоминала));
КонецЕсли;
СуммовыеПараметры = Новый Структура;
СуммовыеПараметры.Вставить("Количество", 0);
СуммовыеПараметры.Вставить("Цена", 0);
СуммовыеПараметры.Вставить("СуммаРучнойСкидки", 0);
СуммовыеПараметры.Вставить("СуммаАвтоматическойСкидки", 0);
СуммовыеПараметры.Вставить("Сумма", 0);
Если ТекущиеДанные <> Неопределено Тогда
СуммовыеПараметры.Количество = 1;
СуммовыеПараметры.Цена = ТекущиеДанные.Сумма;
ЗаполнитьЗначенияСвойств(СуммовыеПараметры, ТекущиеДанные);
КонецЕсли;
Данные = Новый Структура;
Данные.Вставить("НаименованиеТовара", НаименованиеТовара);
Данные.Вставить("ДанныеСтроки", ДанныеСтроки);
Данные.Вставить("СуммовыеПараметры", СуммовыеПараметры);
Данные.Вставить("ОбязательныеРеквизиты", ОбязательныеРеквизиты);
Если ОтобразитьСдачу Тогда
ТекстСдача = Новый ФорматированнаяСтрока(
СтрШаблон(НСтр("ru = 'Сдача: %1'"),
Формат(ИнформацияОбОплате.ИтогоОплачено - ИнформацияОбОплате.СуммаКОплате, "ЧДЦ=2; ЧН=0.00")));
Данные.Вставить("ОтобразитьСдачу", Истина);
Данные.Вставить("ТекстСдача", ТекстСдача);
Иначе
Данные.Вставить("ОтобразитьСдачу", Ложь);
КонецЕсли;
РозничныеПродажиКлиентСервер.ОбновитьДанныеИнформационнойПанели(ЭтотОбъект, Данные);
КонецПроцедуры
&НаКлиенте
Функция ИнформацияОбОплате(Форма)
СуммаДокумента = Объект.ПодарочныеСертификаты.Итог("Сумма");
ИнформацияОбОплате = Новый Структура;
ИнформацияОбОплате.Вставить("Документ", Объект.Ссылка);
ИнформацияОбОплате.Вставить("Наличные", Объект.ПолученоНаличными);
ИнформацияОбОплате.Вставить("ПлатежныеКарты", РозничныеПродажиКлиентСервер.СуммаОплатыПлатежнымиКартами(Форма.Объект.ОплатаПлатежнымиКартами));
ИнформацияОбОплате.Вставить("ПодарочныеСертификаты", 0);
ИнформацияОбОплате.Вставить("БонусныеБаллы", 0);
ИнформацияОбОплате.Вставить("СуммаДокумента", СуммаДокумента);
ИнформацияОбОплате.Вставить("СуммаКОплате", СуммаДокумента);
ИнформацияОбОплате.Вставить("СуммаСкидки", 0);
ИнформацияОбОплате.Вставить("ИтогоОплачено", ИнформацияОбОплате.Наличные + ИнформацияОбОплате.ПлатежныеКарты);
ИнформацияОбОплате.Вставить("ДоступныеВидыОплаты", РозничныеПродажиКлиентСервер.ДоступныеВидыОплаты(ЭтотОбъект));
ИнформацияОбОплатеЛокализация(Форма, ИнформацияОбОплате);
Возврат ИнформацияОбОплате;
КонецФункции
&НаКлиенте
Процедура ВыполнитьДействиеПослеЗаписи(ОповещениеПриЗавершении, ТекстСообщения)
ТребуетсяПовторнаяПопыткаЗаписи = Ложь;
ИзмененныеДанныеЗаписаны = ЗаписатьНаКлиенте(ТребуетсяПовторнаяПопыткаЗаписи);
Если Не ИзмененныеДанныеЗаписаны Тогда
ДополнительныеПараметры = РозничныеПродажиКлиентСервер.СтруктураПовтораЗаписи();
ДополнительныеПараметры.ОписаниеОповещения = ОповещениеПриЗавершении;
ДополнительныеПараметры.ТекстСообщения = ТекстСообщения;
ДополнительныеПараметры.ВозвращатьРезультатФункции = Истина;
ДополнительныеПараметры.ИмяПроцедуры = "ЗаписатьНаСервере";
ДополнительныеПараметры.РезультатОперации = ИзмененныеДанныеЗаписаны;
Если Не ТребуетсяПовторнаяПопыткаЗаписи Тогда
ОшибкаПриПроведенииЧекаВопросЗавершение(КодВозвратаДиалога.Отмена, ДополнительныеПараметры);
Возврат;
КонецЕсли;
ПоказатьВопрос(
Новый ОписаниеОповещения("ОшибкаПриПроведенииЧекаВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ДополнительныеПараметры.ТекстСообщения,
РежимДиалогаВопрос.ПовторитьОтмена, 10, КодВозвратаДиалога.Повторить,,КодВозвратаДиалога.Повторить);
Возврат;
Иначе
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьНаличнымиОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ОбновитьСостояниеКассовойСмены();
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ОткрытьФормуОплатыНаличными", ЭтотОбъект),
НСтр("ru = 'Перед открытием формы оплаты не удалось записать документ.'"));
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуОплатыНаличными(ИзмененныеДанныеЗаписаны, ДополнительныеПараметры) Экспорт
Если Не ИзмененныеДанныеЗаписаны Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ВывестиКОплатеНаДисплейПокупателя = Истина;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ИнформацияОбОплате", ИнформацияОбОплате(ЭтотОбъект));
ПараметрыОткрытияФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыОткрытияФормы.Вставить("ДоступнаПередачаДанных", ПараметрыКассыККМ.ДоступнаПередачаДанных);
ОткрытьФорму(
"Документ.ЧекККМ.Форма.ФормаОплатыНаличными",
ПараметрыОткрытияФормы,
ЭтотОбъект,,,,
Новый ОписаниеОповещения("ЗавершениеОплаты", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьПлатежнойКартойОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ОбновитьСостояниеКассовойСмены();
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ДобавитьОплатуКартой", ЭтотОбъект),
НСтр("ru = 'Перед открытием формы оплаты не удалось записать документ.'"));
КонецПроцедуры
&НаКлиенте
Процедура СмешаннаяОплатаОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ОбновитьСостояниеКассовойСмены();
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ОткрытьФормуСмешаннойОплаты", ЭтотОбъект),
НСтр("ru = 'Перед открытием формы оплаты не удалось записать документ.'"));
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуСмешаннойОплаты(ИзмененныеДанныеЗаписаны, ДополнительныеПараметры) Экспорт
Если Не ИзмененныеДанныеЗаписаны Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ВывестиКОплатеНаДисплейПокупателя = Истина;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ИнформацияОбОплате", ИнформацияОбОплате(ЭтотОбъект));
ПараметрыОткрытияФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыОткрытияФормы.Вставить("ДоступнаПередачаДанных", ПараметрыКассыККМ.ДоступнаПередачаДанных);
ОткрытьФорму(
"Документ.ЧекККМ.Форма.ФормаСмешаннойОплаты",
ПараметрыОткрытияФормы,
ЭтотОбъект,,,,
Новый ОписаниеОповещения("ЗавершениеОплаты", ЭтотОбъект));
КонецПроцедуры
#Область ОплатаПлатежнымиКартами
&НаКлиенте
Процедура ДобавитьОплатуКартой(ИзмененныеДанныеЗаписаны, ПараметрыЗавершения) Экспорт
Если Не ИзмененныеДанныеЗаписаны Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
Если ПараметрыЗавершения <> Неопределено Тогда
Объект.ПолученоНаличными = ПараметрыЗавершения.ПолученоНаличными;
КонецЕсли;
ВывестиКОплатеНаДисплейПокупателя = Истина;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ИнформацияОбОплате = ИнформацияОбОплате(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеОЗавершении", Новый ОписаниеОповещения("ДобавитьОплатуКартойЗавершение", ЭтотОбъект, ПараметрыЗавершения));
ДополнительныеПараметры.Вставить("Форма", ЭтотОбъект);
ДополнительныеПараметры.Вставить("ЭквайринговыеТерминалы", ЭквайринговыеТерминалы);
ДополнительныеПараметры.Вставить("ПараметрыКассыККМ", ПараметрыКассыККМ);
ДополнительныеПараметры.Вставить("ФормаАвторизации_Сумма", ИнформацияОбОплате.СуммаКОплате - ИнформацияОбОплате.ИтогоОплачено);
ДополнительныеПараметры.Вставить("ФормаАвторизации_ПределСуммы", ИнформацияОбОплате.СуммаКОплате - ИнформацияОбОплате.ИтогоОплачено + ИнформацияОбОплате.Наличные);
ДополнительныеПараметры.Вставить("Валюта", Объект.Валюта);
ДополнительныеПараметры.Вставить("СтруктураЭквайринговыйТерминал");
ДополнительныеПараметры.Вставить("ИдентификаторУстройстваЭТ");
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ДобавитьОплатуКартой", РозничныеПродажиКлиент, ДополнительныеПараметры),
НСтр("ru = 'Перед оплатой платежной картой не удалось записать документ.'"));
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуКартойЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(Результат) Тогда
ОбработатьДобавлениеОплаты(ДополнительныеПараметры);
Возврат;
КонецЕсли;
СтрокаОплатыКартой = Объект.ОплатаПлатежнымиКартами.Добавить();
СтрокаОплатыКартой.ВидОплаты = ПредопределенноеЗначение("Перечисление.ТипыПлатежнойСистемыККТ.ПлатежнаяКарта");
СтрокаОплатыКартой.ЭквайринговыйТерминал = Результат.ЭквайринговыйТерминал;
СтрокаОплатыКартой.НомерПлатежнойКарты = Результат.НомерКарты;
СтрокаОплатыКартой.Сумма = Результат.СуммаОперации;
СтрокаОплатыКартой.СсылочныйНомер = Результат.СсылочныйНомер;
СтрокаОплатыКартой.НомерЧекаЭТ = Результат.НомерЧека;
СтрокаОплатыКартой.КодАвторизации = Результат.КодАвторизации;
ДанныеДляЖурналаРегистрации = Новый Структура;
ДанныеДляЖурналаРегистрации.Вставить("СуммаОперации", Результат.СуммаОперации);
ДанныеДляЖурналаРегистрации.Вставить("СсылочныйНомер", Результат.СсылочныйНомер);
ДанныеДляЖурналаРегистрации.Вставить("НомерКарты", Результат.НомерКарты);
ДанныеДляЖурналаРегистрации.Вставить("НомерЧекаЭТ", Результат.НомерЧека);
ДанныеДляЖурналаРегистрации.Вставить("КодАвторизации", Результат.КодАвторизации);
Модифицированность = Истина;
ПересчитатьДокументНаКлиенте();
ТребуетсяПовторнаяПопыткаЗаписи = Ложь;
ИзмененныеДанныеЗаписаны = ЗаписатьНаКлиенте(ТребуетсяПовторнаяПопыткаЗаписи);
Если Не ИзмененныеДанныеЗаписаны Тогда
ДополнительныеПараметрыЗавершение = РозничныеПродажиКлиентСервер.СтруктураПовтораЗаписи();
ДополнительныеПараметрыЗавершение.ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьОплатуКартойЗаписьЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ДополнительныеПараметрыЗавершение.ТекстСообщения = НСтр("ru = 'После проведения оплаты платежной картой не удалось сохранить документ.'");
ДополнительныеПараметрыЗавершение.ВозвращатьРезультатФункции = Ложь;
ДополнительныеПараметрыЗавершение.РезультатПриУспешномПроведении = Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны", Истина, Истина);
ДополнительныеПараметрыЗавершение.РезультатПриОтмене = Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны", Истина, Ложь);
ДополнительныеПараметрыЗавершение.ИмяПроцедуры = "ЗаписатьНаСервере";
ДополнительныеПараметрыЗавершение.РезультатОперации = ИзмененныеДанныеЗаписаны;
Если Не ТребуетсяПовторнаяПопыткаЗаписи Тогда
ОшибкаПриПроведенииЧекаВопросЗавершение(КодВозвратаДиалога.Отмена, ДополнительныеПараметрыЗавершение);
Возврат;
КонецЕсли;
ПоказатьВопрос(
Новый ОписаниеОповещения("ОшибкаПриПроведенииЧекаВопросЗавершение", ЭтотОбъект, ДополнительныеПараметрыЗавершение),
ДополнительныеПараметрыЗавершение.ТекстСообщения,
РежимДиалогаВопрос.ПовторитьОтмена, 10, КодВозвратаДиалога.Повторить,,КодВозвратаДиалога.Повторить);
Возврат;
Иначе
ОбработатьДобавлениеОплаты(ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуКартойЗаписьЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОбработатьДобавлениеОплаты(ДополнительныеПараметры);
Если Результат.ВыполненаОперацияНаУстройстве И Не Результат.ИзмененныеДанныеЗаписаны Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Данные", Объект.Ссылка);
ПараметрыФормы.Вставить("ДанныеДляЖурналаРегистрации", ДанныеДляЖурналаРегистрации);
ПараметрыФормы.Вставить("ТекстСообщения",
НСтр("ru = 'ВНИМАНИЕ! Произошла исключительная ситуация:
|Оплата произведена, но не зафиксирована в системе.'"));
ОткрытьФорму("Документ.ЧекККМ.Форма.ОшибкаЗаписи", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОтменаОплатыПлатежнымиКартами
&НаКлиенте
Процедура ОтменитьОплатыПлатежнымиКартами(Результат, ДополнительныеПараметры) Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("АдресВХранилище", ПоместитьТабличнуюЧастьОплатыПлатежнымиКартамиВХранилище());
РезультатВыбора = Неопределено;
Если ДополнительныеПараметры.Свойство("ПолученоНаличными") Тогда
Объект.ПолученоНаличными = ДополнительныеПараметры.ПолученоНаличными;
КонецЕсли;
ДополнительныеПараметры.Вставить("ПоказатьКнопкуОтменитьОплатыПоследовательно", Ложь);
ДополнительныеПараметры.Вставить("ПоказыватьТолькоОплатыПлатежнымиКартами", Истина);
ДополнительныеПараметры.Вставить("СуммаДокумента", СуммаДокумента);
ДополнительныеПараметры.Вставить("Форма", ЭтотОбъект);
ДополнительныеПараметры.Вставить("Валюта", Объект.Валюта);
ДополнительныеПараметры.Вставить("ПараметрыКассыККМ", ПараметрыКассыККМ);
ДополнительныеПараметры.Вставить("ТипТранзакции", "AuthorizeVoid");
ОткрытьФорму(
"Документ.ЧекККМ.Форма.ТабличнаяЧастьОплатаПлатежнымиКартами",
ПараметрыФормы,,,,,
Новый ОписаниеОповещения("ОтменитьОплатыПлатежнымиКартамиВыборСтрокиОплатыЗавершение", РозничныеПродажиКлиент, ДополнительныеПараметры),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатыПлатежнымиКартамиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат.ВыполненаОперацияНаУстройстве И Не Результат.ИзмененныеДанныеЗаписаны Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Данные", ДополнительныеПараметры.Форма.Объект.Ссылка);
ПараметрыФормы.Вставить("ДанныеДляЖурналаРегистрации", ДополнительныеПараметры.Форма.ДанныеДляЖурналаРегистрации);
ПараметрыФормы.Вставить("ТекстСообщения",
НСтр("ru = 'ВНИМАНИЕ! Произошла исключительная ситуация:
|Отмена оплаты не зафиксирована в системе.'"));
ОткрытьФорму("Документ.ЧекККМ.Форма.ОшибкаЗаписи", ПараметрыФормы, ДополнительныеПараметры.Форма);
КонецЕсли;
Если ДополнительныеПараметры.Свойство("ОповещениеВФормуОплаты") Тогда
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеВФормуОплаты, ИнформацияОбОплате(ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатуПлатежнойКартой(Результат, ДополнительныеПараметры) Экспорт
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ОтменитьОплатуКартой", РозничныеПродажиКлиент, ДополнительныеПараметры),
НСтр("ru = 'Перед открытием формы оплаты не удалось записать документ.'"));
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатуПлатежнымиКартами(ОповещениеОЗавершении)
СтрокиОплатыПлатежнымиКартами = Новый Массив;
Для каждого СтрокаОплаты Из Объект.ОплатаПлатежнымиКартами Цикл
СтрокиОплатыПлатежнымиКартами.Добавить(СтрокаОплаты);
КонецЦикла;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОповещениеПриЗавершении", ОповещениеОЗавершении);
ДополнительныеПараметры.Вставить("СтрокиОплатыПлатежнымиКартами", СтрокиОплатыПлатежнымиКартами);
ДополнительныеПараметры.Вставить("Форма", ЭтотОбъект);
ДополнительныеПараметры.Вставить("Валюта", Объект.Валюта);
ДополнительныеПараметры.Вставить("ПараметрыКассыККМ", ПараметрыКассыККМ);
ДополнительныеПараметры.Вставить("ТипТранзакции", "AuthorizeVoid");
РозничныеПродажиКлиент.ОтменитьОплатуПлатежнымиКартамиПоследовательно(
Неопределено,
ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатуПлатежнойКартойЗавершение(Результат, ДополнительныеПараметры) Экспорт
ДанныеДляЖурналаРегистрации = Новый Структура;
ДанныеДляЖурналаРегистрации.Вставить("СуммаОперации", ДополнительныеПараметры.СуммаОперации);
ДанныеДляЖурналаРегистрации.Вставить("СсылочныйНомер", ДополнительныеПараметры.СсылочныйНомер);
ДанныеДляЖурналаРегистрации.Вставить("НомерЧекаЭТ", ДополнительныеПараметры.НомерЧека);
Объект.ОплатаПлатежнымиКартами.Удалить(Объект.ОплатаПлатежнымиКартами.Индекс(ДополнительныеПараметры.СтрокаОплаты));
Модифицированность = Истина;
ПересчитатьДокументНаКлиенте();
ТребуетсяПовторнаяПопыткаЗаписи = Ложь;
ИзмененныеДанныеЗаписаны = ЗаписатьНаКлиенте(ТребуетсяПовторнаяПопыткаЗаписи);
Если Не ИзмененныеДанныеЗаписаны Тогда
ДополнительныеПараметрыПовторЗаписи = РозничныеПродажиКлиентСервер.СтруктураПовтораЗаписи();
ДополнительныеПараметрыПовторЗаписи.ОписаниеОповещения = ДополнительныеПараметры.ОповещениеПриЗавершении;
ДополнительныеПараметрыПовторЗаписи.ТекстСообщения = НСтр("ru = 'После выполнения операции отмены оплаты не удалось записать документ.'");
ДополнительныеПараметрыПовторЗаписи.ВозвращатьРезультатФункции = Ложь;
ДополнительныеПараметрыПовторЗаписи.РезультатПриУспешномПроведении = Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны", Истина, Истина);
ДополнительныеПараметрыПовторЗаписи.РезультатПриОтмене = Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны", Истина, Ложь);
ДополнительныеПараметрыПовторЗаписи.ИмяПроцедуры = "ЗаписатьНаСервере";
ДополнительныеПараметрыПовторЗаписи.РезультатОперации = ИзмененныеДанныеЗаписаны;
Если Не ТребуетсяПовторнаяПопыткаЗаписи Тогда
ОшибкаПриПроведенииЧекаВопросЗавершение(КодВозвратаДиалога.Отмена, ДополнительныеПараметрыПовторЗаписи);
Возврат;
КонецЕсли;
ПоказатьВопрос(
Новый ОписаниеОповещения("ОшибкаПриПроведенииЧекаВопросЗавершение", ЭтотОбъект, ДополнительныеПараметрыПовторЗаписи),
ДополнительныеПараметрыПовторЗаписи.ТекстСообщения,
РежимДиалогаВопрос.ПовторитьОтмена, 10, КодВозвратаДиалога.Повторить,,КодВозвратаДиалога.Повторить);
Возврат;
Иначе
ВыполнитьОбработкуОповещения(
ДополнительныеПараметры.ОповещениеПриЗавершении,
Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны",
Истина, Истина));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплату(Результат, ДополнительныеПараметры) Экспорт
Объект.ПолученоНаличными = 0;
ОтменитьОплатуПлатежнымиКартами(
Новый ОписаниеОповещения("ОтменитьОплатуЗавершение", ЭтотОбъект, ДополнительныеПараметры));
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатуЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеВФормуОплаты, ИнформацияОбОплате(ЭтотОбъект));
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ЗавершениеОплаты(РезультатОплаты, ДополнительныеПараметры) Экспорт
Если ТипЗнч(РезультатОплаты) = Тип("Структура")
И РезультатОплаты.Свойство("ПолученоНаличными")
И РезультатОплаты.Свойство("ДанныеЭлектронногоЧека") Тогда
Объект.ПолученоНаличными = РезультатОплаты.ПолученоНаличными;
Объект.Партнер = РезультатОплаты.ДанныеЭлектронногоЧека.Партнер;
ДанныеФискальнойОперации.ВариантОтправкиЭлектронногоЧека = РезультатОплаты.ДанныеЭлектронногоЧека.ВариантОтправкиЭлектронногоЧека;
ДанныеФискальнойОперации.КонтактныеДанныеЭлектронногоЧека = РезультатОплаты.ДанныеЭлектронногоЧека.КонтактныеДанныеЭлектронногоЧека;
ИначеЕсли РезультатОплаты = "Отмена" Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
ИначеЕсли ТипЗнч(ДополнительныеПараметры) = Тип("Структура")
И ДополнительныеПараметры.Свойство("ЗавершениеРаботы")
И ДополнительныеПараметры.ЗавершениеРаботы = Истина Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Возврат;
КонецЕсли;
ОбработатьДобавлениеОплаты(ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьДобавлениеОплаты(ДополнительныеПараметры)
ВывестиКОплатеНаДисплейПокупателя = Ложь;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ИнформацияОбОплате = ИнформацияОбОплате(ЭтотОбъект);
Если ДополнительныеПараметры = Неопределено Тогда
Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит") Тогда
ВывестиКОплатеНаДисплейПокупателя = Истина;
ОбновитьДанныеИнформационнойПанели(Истина);
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
Иначе
Если ИнформацияОбОплате.ИтогоОплачено >= ИнформацияОбОплате.СуммаКОплате
И ЗначениеЗаполнено(ДанныеФискальнойОперации.ВариантОтправкиЭлектронногоЧека) Тогда
ВывестиКОплатеНаДисплейПокупателя = Истина;
ОбновитьДанныеИнформационнойПанели(Истина);
ПробитьЧек();
ИначеЕсли ИнформацияОбОплате.ИтогоОплачено > 0 Тогда
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ОткрытьФормуСмешаннойОплаты", ЭтотОбъект),
НСтр("ru = 'Перед открытием формы оплаты не удалось записать документ.'"));
ИначеЕсли ИнформацияОбОплате.СБПОжидание > 0 Тогда
ОтложитьНаКлиенте(Неопределено);
НастроитьРМК();
Иначе
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
КонецЕсли;
КонецЕсли;
Иначе
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеВФормуОплаты, ИнформацияОбОплате);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьНовыйЧек(Ссылка = Неопределено)
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
Если Объект.Статус <> ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит") Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Ссылка", Ссылка);
Отказ = Ложь;
ПередЗакрытиемЧека(
Отказ,
Новый ОписаниеОповещения("ЗагрузитьНовыйЧекЗавершение", ЭтотОбъект, ДополнительныеПараметры));
Если Отказ Тогда
Возврат;
КонецЕсли;
Иначе
НовыйЧекНаСервере();
ЗагрузитьНовыйЧекФрагмент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьНовыйЧекФрагмент()
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьНовыйЧекЗавершение(Результат, ДополнительныеПараметры) Экспорт
НовыйЧекНаСервере(ДополнительныеПараметры.Ссылка);
ЗагрузитьНовыйЧекФрагмент();
КонецПроцедуры
&НаСервере
Функция ОтложитьНаСервере(ТребуетсяПовторнаяПопыткаЗаписи)
ОтложитьВыполнено = Истина;
СтарыйСтатус = Объект.Статус;
Объект.Статус = Перечисления.СтатусыЧековККМ.ОтложенБезРезервирования;
Попытка
ОтложитьВыполнено = ЗаписатьНаСервере(ТребуетсяПовторнаяПопыткаЗаписи);
Если Не ОтложитьВыполнено Тогда
Объект.Статус = СтарыйСтатус;
КонецЕсли;
Исключение
Объект.Статус = СтарыйСтатус;
ОтложитьВыполнено = Ложь;
КонецПопытки;
Возврат ОтложитьВыполнено;
КонецФункции
&НаКлиенте
Процедура ОтложитьНаКлиенте(ОповещениеПриЗавершении)
Модифицированность = Истина;
ТребуетсяПовторнаяПопыткаЗаписи = Ложь;
Результат = ОтложитьНаСервере(ТребуетсяПовторнаяПопыткаЗаписи);
ОбработатьПодарочныеСертификатыНаСервере();
Если Не Результат Тогда
ДополнительныеПараметрыПопытка = РозничныеПродажиКлиентСервер.СтруктураПовтораЗаписи();
ДополнительныеПараметрыПопытка.ОписаниеОповещения = ОповещениеПриЗавершении;
ДополнительныеПараметрыПопытка.ТекстСообщения = НСтр("ru = 'Не удалось записать документ.'");
ДополнительныеПараметрыПопытка.ВозвращатьРезультатФункции = Истина;
ДополнительныеПараметрыПопытка.ИмяПроцедуры = "ОтложитьНаСервере";
ДополнительныеПараметрыПопытка.РезультатОперации = Результат;
Если Не ТребуетсяПовторнаяПопыткаЗаписи Тогда
ОшибкаПриПроведенииЧекаВопросЗавершение(КодВозвратаДиалога.Отмена, ДополнительныеПараметрыПопытка);
Возврат;
КонецЕсли;
ПоказатьВопрос(
Новый ОписаниеОповещения("ОшибкаПриПроведенииЧекаВопросЗавершение", ЭтотОбъект, ДополнительныеПараметрыПопытка),
ДополнительныеПараметрыПопытка.ТекстСообщения,
РежимДиалогаВопрос.ПовторитьОтмена, 10, КодВозвратаДиалога.Повторить,,КодВозвратаДиалога.Повторить);
Возврат;
Иначе
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемЧека(Отказ, ОписаниеОповещения = Неопределено)
Если СуммаСБПВыполнена > 0 ИЛИ СуммаСБПОжидание > 0 Тогда
Если ОписаниеОповещения <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Неопределено);
КонецЕсли;
Возврат;
КонецЕсли;
Кнопки = Новый СписокЗначений;
Если Не ТолькоПросмотр И (Модифицированность ИЛИ ЗначениеЗаполнено(Объект.Ссылка)) Тогда
Если ПраваДоступа.Отложить Тогда
Кнопки.Добавить(1, НСтр("ru = 'Отложить'"));
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Ссылка) И ПраваДоступа.КорректировкаСтрок Тогда
Кнопки.Добавить(4, НСтр("ru = 'Удалить чек'"));
Иначе
Если Модифицированность И ПраваДоступа.КорректировкаСтрок Тогда
Кнопки.Добавить(3, НСтр("ru = 'Закрыть без сохранения'"));
КонецЕсли;
Если Не Модифицированность И ПраваДоступа.КорректировкаСтрок Тогда
Кнопки.Добавить(3, НСтр("ru = 'Закрыть'"));
КонецЕсли;
КонецЕсли;
Кнопки.Добавить(99, НСтр("ru = 'Отмена'"));
КонецЕсли;
Если Кнопки.Количество() > 0 Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОписаниеОповещения", ОписаниеОповещения);
Отказ = Истина;
ПоказатьВопрос(
Новый ОписаниеОповещения("ВопросПередЗакрытиемЧекаЗавершение", ЭтотОбъект, ДополнительныеПараметры),
НСтр("ru = 'Выберите действие перед закрытием.'"),
Кнопки);
Иначе
Если ОписаниеОповещения <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Неопределено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросПередЗакрытиемОперацияЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповестить("Запись_РеализацияПодарочныхСертификатов", Новый Структура, Объект.Ссылка);
Если Результат Тогда
Если ДополнительныеПараметры.ОписаниеОповещения = Неопределено Тогда
ПринудительноеЗавершениеРаботы = Истина;
Закрыть(Неопределено);
Иначе
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Неопределено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросПередЗакрытиемЧекаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
Если РезультатВопроса = 1 Тогда
ОтложитьНаКлиенте(Новый ОписаниеОповещения("ВопросПередЗакрытиемОперацияЗавершение", ЭтотОбъект, ДополнительныеПараметры));
ИначеЕсли РезультатВопроса = 3 Тогда
Если ДополнительныеПараметры.ОписаниеОповещения = Неопределено Тогда
ПринудительноеЗавершениеРаботы = Истина;
Закрыть(Неопределено);
Иначе
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Неопределено);
КонецЕсли;
ИначеЕсли РезультатВопроса = 4 Тогда
УдалениеВыполнено = РозничныеПродажиВызовСервера.УдалитьДокументПриОтменеФискальнойОперации(Объект.Ссылка);
Если УдалениеВыполнено Тогда
Оповестить("Запись_РеализацияПодарочныхСертификатов", Новый Структура, Неопределено);
Если ДополнительныеПараметры.ОписаниеОповещения = Неопределено Тогда
ПринудительноеЗавершениеРаботы = Истина;
Закрыть(Неопределено);
Иначе
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Неопределено);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НовыйЧекНаСервере(Ссылка = Неопределено)
Если Ссылка = Неопределено Или Ссылка.Дата = Дата(1, 1, 1) Тогда
НовыйЧек = Документы.РеализацияПодарочныхСертификатов.СоздатьДокумент();
НовыйЧек.ОбработкаЗаполнения(Новый Структура("КассаККМ", Объект.КассаККМ), Истина);
НовыйЧек.Дата = НачалоДня(ТекущаяДатаСеанса());
Иначе
НовыйЧек = Ссылка.ПолучитьОбъект();
КонецЕсли;
НовыйЧек.Дата = ТекущаяДатаСеанса();
РазблокироватьДанныеФормыДляРедактирования();
ЗначениеВДанныеФормы(НовыйЧек, Объект);
ОбработатьПодарочныеСертификатыНаСервере();
ТолькоПросмотр = Ложь;
Модифицированность = Ложь;
ВывестиКОплатеНаДисплейПокупателя = Ложь;
ПриСозданииЧека();
КонецПроцедуры
&НаСервере
Процедура ПриСозданииЧека()
СтруктураСостояниеКассовойСмены = РозничныеПродажиВызовСервера.СостояниеКассовойСмены(Объект.КассаККМ);
ЗаполнитьЗначенияСвойств(Объект, СтруктураСостояниеКассовойСмены,, "Кассир");
РозничныеПродажи.ОчиститьДанныеФискальнойОперации(ДанныеФискальнойОперации);
НастроитьРМК();
ОбновитьЗаголовокФормы();
КонецПроцедуры
&НаКлиенте
Процедура ВозвратТовараОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("КассаККМ", Объект.КассаККМ);
ПараметрыОткрытияФормы.Вставить("Организация", Объект.Организация);
ОткрытьФорму("Документ.ЧекККМ.Форма.ОформлениеВозвратаПодарочныхСертификатов", ПараметрыОткрытияФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьКомандуПечати(ИмяКоманды, ДополнительныеПараметры) Экспорт
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команды[ИмяКоманды], Объект);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область Локализация
&НаКлиенте
Процедура ПечатьЧекаПослеЗаписиИзмененийЛокализация(ПараметрыОперацииФискализацииЧека)
ФорматноЛогическийКонтрольКлиентСервер.ПровестиФорматноЛогическийКонтроль(ПараметрыОперацииФискализацииЧека, ПараметрыКассыККМ.ИдентификаторУстройства);
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ПробитьЧекПослеПроведения", ЭтотОбъект, ПараметрыОперацииФискализацииЧека),
НСтр("ru = 'Перед выполнением операции пробития чека не удалось провести документ.'"));
Возврат;
УстановитьФискальныйСтатусПробит();
РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
КонецПроцедуры
&НаСервере
Функция ПараметрыОперацииФискализацииЧекаНаСервереЛокализация(ИнформацияОбОплате)
ПараметрыОперацииФискализацииЧека = Новый Структура;
ПараметрыОперацииФискализацииЧека = ФормированиеПараметровФискальногоЧекаСервер.ПараметрыОперацииФискализацииЧека(Объект.Ссылка, Объект.Организация, Объект.Кассир);
ПараметрыОперацииФискализацииЧека.Вставить("ВерсияФФД", ВерсияФФД);
ПараметрыОперацииФискализацииЧека.Вставить("ИдентификаторУстройства", ПараметрыКассыККМ.ИдентификаторУстройства);
ФормированиеПараметровФискальногоЧекаСервер.ПараметрыФискальногоЧекаЗаполнитьТипРасчета(
ПараметрыОперацииФискализацииЧека,
Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств);
ФормированиеПараметровФискальногоЧекаСервер.ПараметрыФискальногоЧекаЗаполнитьСерийныйНомерОборудования(
ПараметрыОперацииФискализацииЧека,
ПараметрыКассыККМ.СерийныйНомер);
ФормированиеПараметровФискальногоЧекаСервер.ОбновитьПараметрыФискальногоЧекаМестоРасчетов(
ПараметрыОперацииФискализацииЧека,
Объект.Организация,
СтруктураСостояниеКассовойСмены.КассаККМ,
ПараметрыКассыККМ.ИдентификаторУстройства);
ФормированиеПараметровФискальногоЧекаСервер.ОбновитьПараметрыФискальногоЧекаПозицийЧекаККМ(ПараметрыОперацииФискализацииЧека, Объект.Ссылка);
ФормированиеПараметровФискальногоЧекаСервер.ОбновитьПараметрыФискальногоЧекаТаблицаОплатЧекаККМ(
ПараметрыОперацииФискализацииЧека,
ИнформацияОбОплате);
ФормированиеПараметровФискальногоЧекаСервер.ОбновитьПараметрыФискальногоЧекаСБП(
ПараметрыОперацииФискализацииЧека,
РозничныеПродажиКлиентСерверЛокализация.СтрокиОплатыСБП(Объект.ОплатаПлатежнымиКартами));
ФормированиеПараметровФискальногоЧекаСервер.ПараметрыФискальногоЧекаЗаполнитьПараметрыОтправкиЭлектронногоЧека(
ПараметрыОперацииФискализацииЧека,
ДанныеФискальнойОперации.ВариантОтправкиЭлектронногоЧека,
ДанныеФискальнойОперации.КонтактныеДанныеЭлектронногоЧека);
Отказ = Ложь;
ПараметрыОперацииФискализацииЧека.Вставить("СпособФорматноЛогическогоКонтроля", Перечисления.СпособыФорматноЛогическогоКонтроля.РазделятьСтроки);
ОборудованиеЧекопечатающиеУстройстваВызовСервера.ПривестиДанныеКТребуемомуФормату(ПараметрыОперацииФискализацииЧека, Отказ, "", Ложь);
Возврат ПараметрыОперацииФискализацииЧека;
КонецФункции
&НаКлиенте
Процедура УстановитьФискальныйСтатусПробит()
Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит");
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ПараметрыЗаписи.Вставить("РежимПроведения", РежимПроведенияДокумента.Оперативный);
Записать(ПараметрыЗаписи);
ТолькоПросмотр = Истина;
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Функционал печати чека для документа не реализован. Обратитесь к разработчикам.'"));
КонецПроцедуры
&НаСервере
Процедура НастроитьРМКЛокализация(ДоступныеВидыОплаты, ЭлементыНаПерегруппировку)
Элементы.СмешаннаяОплата.Видимость = Элементы.СмешаннаяОплата.Видимость ИЛИ ДоступныеВидыОплаты.СБП;
Элементы.ОплатитьСБП.Видимость = ДоступныеВидыОплаты.СБП;
ЭлементыНаПерегруппировку.Добавить(Элементы.ОплатитьСБП);
СуммаСБПВыполнена = РозничныеПродажиКлиентСерверЛокализация.СуммаОплатыСБППоДокументу(Объект.ОплатаПлатежнымиКартами, Истина);
СуммаСБПОжидание = РозничныеПродажиКлиентСерверЛокализация.СуммаОплатыСБППоДокументу(Объект.ОплатаПлатежнымиКартами);
Элементы.ГруппаСуммаСБПОжидается.Видимость = СуммаСБПВыполнена > 0 ИЛИ СуммаСБПОжидание > 0;
Элементы.ГруппаИтогиДекорация.Видимость = НЕ Элементы.ГруппаСуммаСБПОжидается.Видимость;
Элементы.ОплатитьСБП.Доступность = Истина;
Элементы.СмешаннаяОплата.Доступность = Истина;
Если СуммаСБПВыполнена > 0 Тогда
Элементы.СуммаСБП.Заголовок = НСтр("ru = 'СБП оплачено'");
ИнформационнаяПанельСуммаСБП = СуммаСБПВыполнена;
ИначеЕсли СуммаСБПОжидание > 0 Тогда
Элементы.СуммаСБП.Заголовок = НСтр("ru = 'СБП ожидается'");
ИнформационнаяПанельСуммаСБП = СуммаСБПОжидание;
Элементы.ОплатитьСБП.Доступность = Ложь;
Элементы.СмешаннаяОплата.Доступность = Ложь;
КонецЕсли;
Если СуммаСБПВыполнена > 0 ИЛИ СуммаСБПОжидание > 0 Тогда
Элементы.ОплатитьНаличными.Доступность = Ложь;
Элементы.ОплатитьКартой.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИнформацияОбОплатеЛокализация(Форма, ИнформацияОбОплате)
СуммаОплатыСБППоДокументу = РозничныеПродажиКлиентСерверЛокализация.СуммаОплатыСБППоДокументу(Форма.Объект.ОплатаПлатежнымиКартами, Истина);
СуммаОжиданиеОплатыСБППоДокументу = РозничныеПродажиКлиентСерверЛокализация.СуммаОплатыСБППоДокументу(Форма.Объект.ОплатаПлатежнымиКартами);
Форма.ЕстьОплатаСБП = (СуммаОплатыСБППоДокументу > 0);
ИнформацияОбОплате.Вставить("СБП", СуммаОплатыСБППоДокументу);
ИнформацияОбОплате.Вставить("СБПОжидание", СуммаОжиданиеОплатыСБППоДокументу);
ИтогоОплачено = ИнформацияОбОплате.ИтогоОплачено
+ ИнформацияОбОплате.СБП;
ИнформацияОбОплате.Вставить("ИтогоОплачено", ИтогоОплачено);
КонецПроцедуры
&НаКлиенте
Процедура ОплатитьСБПЛокализация()
РозничныеПродажиКлиент.ЗаблокироватьФорму(ЭтотОбъект);
РозничныеПродажиКлиент.ОчиститьОкноСообщений(ЭтотОбъект);
ВыбраннаяФормаОплаты = РозничныеПродажиКлиентСервер.ДоступныеВидыОплаты(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);
РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
ЭтотОбъект,
Новый ОписаниеОповещения("ОплатаСБПОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));
КонецПроцедуры
&НаКлиенте
Процедура ПробитьЧекПослеПроведения(Проведен, ПараметрыОперацииФискализацииЧека) Экспорт
Если НЕ Проведен Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(ЭтотОбъект);
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ПробитьЧекЗавершение", ЭтотОбъект);
Результат = МенеджерОборудованияУТКлиент.ОборудованиеПодключено(ПараметрыКассыККМ.ИдентификаторУстройства);
Если Результат Или ПараметрыКассыККМ.ИспользоватьБезПодключенияОборудования Тогда
Если Не ПараметрыКассыККМ.ИспользоватьБезПодключенияОборудования Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОписаниеОповещения", ОписаниеОповещения);
ДополнительныеПараметры.Вставить("ПараметрыОперацииФискализацииЧека", ПараметрыОперацииФискализацииЧека);
ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПечатьЧека_Завершение", ЭтотОбъект, ДополнительныеПараметры);
ОповещениеПослеОткрытииЧека = Новый ОписаниеОповещения("ПечатьЧека_ПослеОткрытияЧека", ЭтотОбъект, ДополнительныеПараметры);
ДополнительныеПараметры = МенеджерОборудованияКлиентСервер.ДополнительныеПараметрыОперации();
ДополнительныеПараметры.ОповещениеПослеОткрытииЧека = ОповещениеПослеОткрытииЧека;
ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаНаФискальномУстройстве(
ОповещениеПриЗавершении,
УникальныйИдентификатор,
ПараметрыКассыККМ.ИдентификаторУстройства,
ПараметрыОперацииФискализацииЧека,
ДополнительныеПараметры);
Иначе
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОписаниеОповещения", ОписаниеОповещения);
РезультатВыполнения = Новый Структура;
РезультатВыполнения.Вставить("Результат", Истина);
ПечатьЧека_Завершение(
РезультатВыполнения,
ДополнительныеПараметры);
КонецЕсли;
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Фискальное устройство не подключено. Чек не напечатан.'"));
ВыполнитьОбработкуОповещения(
ОписаниеОповещения,
Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны",
Ложь, Ложь));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьЧека_ПослеОткрытияЧека(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ШапкаЧека = ПараметрыВыполнения.ВходныеПараметры;
Если ПараметрыВыполнения.НомерСмены <> 0 Тогда
ШапкаЧека.НомерСменыККТ = ПараметрыВыполнения.НомерСмены;
КонецЕсли;
Если ПараметрыВыполнения.НомерЧека <> 0 Тогда
ШапкаЧека.НомерЧекаККТ = ПараметрыВыполнения.НомерЧека;
КонецЕсли;
ВыполнитьОбработкуОповещения(ПараметрыВыполнения.ОповещениеПродолжения, ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьЧека_Завершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт
ИзмененныеДанныеЗаписаны = Ложь;
ВыполненаОперацияНаУстройстве = Ложь;
Если РезультатВыполнения.Результат Тогда
Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит");
Если РезультатВыполнения.Свойство("НомерЧекаККТ") Тогда
Объект.НомерЧекаККМ = Число(РезультатВыполнения.НомерЧекаККТ);
КонецЕсли;
ДанныеДляЖурналаРегистрации = Новый Структура;
ДанныеДляЖурналаРегистрации.Вставить("Дата", Объект.Дата);
ДанныеДляЖурналаРегистрации.Вставить("Статус", Объект.Статус);
ПараметрыФискализации = Неопределено;
Если РезультатВыполнения.Свойство("ВыходныеПараметры")
И РезультатВыполнения.ВыходныеПараметры.Количество() > 1 Тогда
ДанныеДляЖурналаРегистрации.Вставить("НомерЧекаККМ", РезультатВыполнения.ВыходныеПараметры[1]);
Объект.НомерЧекаККМ = Число(ДанныеДляЖурналаРегистрации.НомерЧекаККМ);
Если РезультатВыполнения.ВыходныеПараметры.Количество() > 8 Тогда
ПараметрыФискализации = РезультатВыполнения.ВыходныеПараметры[8];
КонецЕсли;
КонецЕсли;
ВыполненаОперацияНаУстройстве = Истина;
Модифицированность = Истина;
ТребуетсяПовторнаяПопыткаЗаписи = Ложь;
ИзмененныеДанныеЗаписаны = ЗаписатьФискальнуюОперациюНаКлиенте(ТребуетсяПовторнаяПопыткаЗаписи, ПараметрыФискализации);
Если Не ИзмененныеДанныеЗаписаны Тогда
ДополнительныеПараметрыПовторЗаписи = РозничныеПродажиКлиентСервер.СтруктураПовтораЗаписи();
ДополнительныеПараметрыПовторЗаписи.РеквизитыФискальнойОперацииКассовогоУзла = ПараметрыФискализации;
ДополнительныеПараметрыПовторЗаписи.ОписаниеОповещения = ДополнительныеПараметры.ОписаниеОповещения;
ДополнительныеПараметрыПовторЗаписи.ТекстСообщения = НСтр("ru = 'После пробития чека на ФР не удалось сохранить документ.'");
ДополнительныеПараметрыПовторЗаписи.ВозвращатьРезультатФункции = Ложь;
ДополнительныеПараметрыПовторЗаписи.РезультатПриУспешномПроведении = Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны", Истина, Истина);
ДополнительныеПараметрыПовторЗаписи.РезультатПриОтмене = Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны", Истина, Ложь);
ДополнительныеПараметрыПовторЗаписи.ИмяПроцедуры = "ЗаписатьНаСервере";
ДополнительныеПараметрыПовторЗаписи.РезультатОперации = ИзмененныеДанныеЗаписаны;
Если Не ТребуетсяПовторнаяПопыткаЗаписи Тогда
ОшибкаПриПроведенииЧекаВопросЗавершение(КодВозвратаДиалога.Отмена, ДополнительныеПараметрыПовторЗаписи);
Возврат;
КонецЕсли;
ПоказатьВопрос(
Новый ОписаниеОповещения("ОшибкаПриПроведенииЧекаВопросЗавершение", ЭтотОбъект, ДополнительныеПараметрыПовторЗаписи),
ДополнительныеПараметрыПовторЗаписи.ТекстСообщения,
РежимДиалогаВопрос.ПовторитьОтмена, 10, КодВозвратаДиалога.Повторить,,КодВозвратаДиалога.Повторить);
Возврат;
КонецЕсли;
Иначе
РозничныеПродажиКлиент.СообщитьОбОшибкеПриПечатиЧека(ЭтотОбъект, РезультатВыполнения, Истина);
КонецЕсли;
ВыполнитьОбработкуОповещения(
ДополнительныеПараметры.ОписаниеОповещения,
Новый Структура("ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны",
ВыполненаОперацияНаУстройстве, ИзмененныеДанныеЗаписаны));
КонецПроцедуры
&НаКлиенте
Процедура ПробитьЧекЗавершение(Результат, ДополнительныеПараметры) Экспорт
РозничныеПродажиКлиент.РазблокироватьФорму(ЭтотОбъект);
Если Результат.ВыполненаОперацияНаУстройстве
И Результат.ИзмененныеДанныеЗаписаны Тогда
ТолькоПросмотр = Истина;
Иначе
Если Результат.ВыполненаОперацияНаУстройстве И Не Результат.ИзмененныеДанныеЗаписаны Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Данные", Объект.Ссылка);
ПараметрыФормы.Вставить("ДанныеДляЖурналаРегистрации", ДанныеДляЖурналаРегистрации);
ПараметрыФормы.Вставить("ТекстСообщения",
НСтр("ru = 'ВНИМАНИЕ! Произошла исключительная ситуация:
|Чек ККМ пробит, но не зафиксирован в системе.'"));
ОткрытьФорму("Документ.ЧекККМ.Форма.ОшибкаЗаписи", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ЗаписатьФискальнуюОперациюНаКлиенте(ТребуетсяПовторнаяПопыткаЗаписи, РеквизитыФискальнойОперацииКассовогоУзла)
Результат = ЗаписатьФискальнуюОперациюНаСервере(ТребуетсяПовторнаяПопыткаЗаписи, РеквизитыФискальнойОперацииКассовогоУзла);
Если Результат Тогда
Оповестить("Запись_РеализацияПодарочныхСертификатов", Новый Структура, Неопределено);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОплатаСБПОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(ЭтотОбъект);
Возврат;
КонецЕсли;
ВывестиКОплатеНаДисплейПокупателя = Истина;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ОткрытьФормуОплатыСБП", ЭтотОбъект),
НСтр("ru = 'Перед открытием формы оплаты не удалось записать документ.'"));
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуОплатыСБП(ИзмененныеДанныеЗаписаны, ПараметрыЗавершения) Экспорт
Если Не ИзмененныеДанныеЗаписаны Тогда
РозничныеПродажиКлиент.РазблокироватьФорму(ЭтотОбъект);
Возврат;
КонецЕсли;
Если СуммаСБПВыполнена > 0 ИЛИ СуммаСБПОжидание > 0 Тогда
ОбработатьДобавлениеОплаты(Неопределено);
Возврат;
КонецЕсли;
Если ПараметрыЗавершения <> Неопределено Тогда
Объект.ПолученоНаличными = ПараметрыЗавершения.ПолученоНаличными;
КонецЕсли;
ВывестиКОплатеНаДисплейПокупателя = Истина;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
ИнформацияОбОплате = ИнформацияОбОплате(ЭтотОбъект);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ИнформацияОбОплате", ИнформацияОбОплате);
ПараметрыОткрытияФормы.Вставить("Организация", Объект.Организация);
ПараметрыОткрытияФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыОткрытияФормы.Вставить("КассаККМ", Объект.КассаККМ);
ПараметрыОткрытияФормы.Вставить("ДатаОплаты", Объект.Дата);
ПараметрыОткрытияФормы.Вставить("Валюта", Объект.Валюта);
ПараметрыОткрытияФормы.Вставить("ИдентификаторФискальногоУстройства", ПараметрыКассыККМ.ИдентификаторУстройства);
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатОплатыСБП", ЭтотОбъект, ПараметрыЗавершения);
ОткрытьФорму(
"Документ.ЧекККМ.Форма.ФормаОплатыСБП",
ПараметрыОткрытияФормы,
ЭтотОбъект,,,,
ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьРезультатОплатыСБП(РезультатВыполнения, ДополнительныеПараметры) Экспорт
Если РезультатВыполнения = Неопределено
ИЛИ РезультатВыполнения = КодВозвратаДиалога.Отмена
ИЛИ НЕ РезультатВыполнения.Результат Тогда
ВывестиКОплатеНаДисплейПокупателя = Ложь;
ПодключитьОбработчикОжидания("ВывестиИнформациюНаДисплейПокупателя", 0.1, Истина);
РозничныеПродажиКлиент.РазблокироватьФорму(ЭтотОбъект);
Возврат;
КонецЕсли;
ОплатыСБП = РозничныеПродажиКлиентСерверЛокализация.СтрокиОплатыСБП(Объект.ОплатаПлатежнымиКартами);
Для Каждого СтрокаОплатыСБП Из ОплатыСБП Цикл
Объект.ОплатаПлатежнымиКартами.Удалить(СтрокаОплатыСБП);
КонецЦикла;
СтрокаСБП = Объект.ОплатаПлатежнымиКартами.Добавить();
СтрокаСБП.ВидОплаты = ПредопределенноеЗначение("Перечисление.ТипыПлатежнойСистемыККТ.СистемаБыстрыхПлатежей");
СтрокаСБП.Сумма = РезультатВыполнения.СуммаОплаты;
СтрокаСБП.СсылочныйНомер = ИдентификаторыОперацииОплаты(РезультатВыполнения.НастройкаПодключения, Объект.Ссылка);
СтрокаСБП.ДоговорПодключения = РезультатВыполнения.ДоговорПодключения;
СтрокаСБП.СтатусОплатыСБП = ПредопределенноеЗначение("Перечисление.ТипыСтатусовОплатыСБП.Выполнена");
Если РезультатВыполнения.ЧекОтложен Тогда
СтрокаСБП.СтатусОплатыСБП = ПредопределенноеЗначение("Перечисление.ТипыСтатусовОплатыСБП.ОжидаетПодтверждение");
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Чек отложен. Необходимо дождаться получение статуса оплаты СБП.'"));
ИначеЕсли РезультатВыполнения.РучноеПодтверждениеОплаты Тогда
СтрокаСБП.СсылочныйНомер = "";
СтрокаСБП.СтатусОплатыСБП = ПредопределенноеЗначение("Перечисление.ТипыСтатусовОплатыСБП.ОжидаетПодтверждение");
КонецЕсли;
ПересчитатьДокументНаКлиенте();
ОбработатьДобавлениеОплаты(ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Функция ИдентификаторыОперацииОплаты(ТорговаяТочка, ДокументОплаты)
ИдентификаторОплаты = "";
Попытка
Если ЗначениеЗаполнено(ДокументОплаты) Тогда
ИдентификаторОплаты = ПереводыСБПc2b.ИдентификаторыОперацииОплаты(ДокументОплаты);
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации(
НСтр("ru = 'ИдентификаторыОперацииОплаты'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.РегистрыСведений.НастройкиИнтеграцииСПлатежнымиСистемамиУТ,
,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Возврат ИдентификаторОплаты;
КонецФункции
#КонецОбласти