Реализация подарочных сертификатов / Форма документа (мастер) / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
	
	ИспользоватьОплатуПлатежнымиКартами = ПолучитьФункциональнуюОпцию("ИспользоватьОплатуПлатежнымиКартами");
	
	ДанныеФискальнойОперации = РозничныеПродажи.СтруктураДанныеФискальнойОперации();
	
	ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода,
	                                              |ДисплейПокупателя,
	                                              |ФискальныйРегистратор,
	                                              |ККТ,
	                                              |ПринтерЧеков,
	                                              |ЭквайринговыйТерминал,
	                                              |СчитывательМагнитныхКарт";
	ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтотОбъект, "");
	РозничныеПродажи.ЗаполнитьТаблицуОборудование(ЭтотОбъект, ПоддерживаемыеТипыПодключаемогоОборудования);
	
	Если НЕ Справочники.КассыККМ.НастроенаКассаККМДляРМК() Тогда
		Элементы.ГруппаНижняяКоманднаяПанельОплата.Доступность = Ложь;
	КонецЕсли;
	
	Если ИспользоватьПодключаемоеОборудование Тогда
		ОборудованиеПодключено = МенеджерОборудованияВызовСервера.ОборудованиеПоПараметрам(
			Неопределено,
			Неопределено,
			МенеджерОборудованияВызовСервера.РабочееМестоКлиента()).Количество() > 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 = 'Перед выполнением операции пробития чека не удалось провести документ.'"));
	
	Возврат;
	//-- Локализация
	
	//@skip-warning
	УстановитьФискальныйСтатусПробит();
	
	РозничныеПродажиКлиент.РазблокироватьФорму(Этотобъект);
	
КонецПроцедуры

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

&НаКлиенте
Процедура УстановитьФискальныйСтатусПробит()
	
	Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит");
	
	ПараметрыЗаписи = Новый Структура;
	ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
	ПараметрыЗаписи.Вставить("РежимПроведения", РежимПроведенияДокумента.Оперативный);
	
	Записать(ПараметрыЗаписи);
	
	ТолькоПросмотр = Истина;
	
	ОбщегоНазначенияКлиент.СообщитьПользователю(
		НСтр("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 = 'ИдентификаторыОперацииОплаты'",
				ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка,
			Метаданные.РегистрыСведений.НастройкиИнтеграцииСПлатежнымиСистемамиУТ,
			,
			ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			
	КонецПопытки;
	
	Возврат ИдентификаторОплаты;
	
КонецФункции

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

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

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