Чек ККМ / Операции с ККМ / Модуль формы

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

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если СохранятьНастройкиПриЗакрытии И НЕ ЗавершениеРаботы Тогда
		СохранитьНастройки();
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗакрыватьФормуПослеЗавершенияОперацииПриИзменении(Элемент)
	СохранятьНастройкиПриЗакрытии = Истина;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗаголовкиФормы(Форма)
	
	Форма.СтруктураСостояниеКассовойСмены = РозничныеПродажиВызовСервера.СостояниеКассовойСмены(Форма.КассаККМ);
	
	Форма.Элементы.ОткрытьКассовуюСмену.Доступность = Форма.ПраваДоступа.ОткрытьСмену И Не Форма.СтруктураСостояниеКассовойСмены.СменаОткрыта;
	Форма.Элементы.ЗакрытьКассовуюСмену.Доступность = Форма.ПраваДоступа.ЗакрытьСмену И    Форма.СтруктураСостояниеКассовойСмены.СменаОткрыта;
	
	Форма.Элементы.ВнесениеДенежныхСредств.Доступность = Форма.ПраваДоступа.ВнесениеДенег;
	Форма.Элементы.ВыемкаДенежныхСредств.Доступность   = Форма.ПраваДоступа.ВыемкаДенег;
	
	Если ЗначениеЗаполнено(Форма.КассаККМ) Тогда
		Форма.Элементы.ГруппаОперацииСКассойККМ.Заголовок = Строка(Форма.КассаККМ);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Форма.СтруктураСостояниеКассовойСмены.СтатусКассовойСмены) Тогда
		
		ЗаголовокГруппыОперацииСКассовойСменой = НСтр("ru='Статус смены: %СтатусСмены% %ВремяИзменения%'");
		
		ЗаголовокГруппыОперацииСКассовойСменой = СтрЗаменить(ЗаголовокГруппыОперацииСКассовойСменой, "%СтатусСмены%", Форма.СтруктураСостояниеКассовойСмены.СтатусКассовойСмены);
		ЗаголовокГруппыОперацииСКассовойСменой = СтрЗаменить(ЗаголовокГруппыОперацииСКассовойСменой, "%ВремяИзменения%", Формат(Форма.СтруктураСостояниеКассовойСмены.ДатаИзмененияСтатуса, НСтр("ru='ДФ=''dd.MM.yy HH:mm'''")));
		
	Иначе
		
		ЗаголовокГруппыОперацииСКассовойСменой = НСтр("ru='Смена не открыта'");
		
	КонецЕсли;
	Форма.Элементы.ГруппаОперацииСКассовойСменой.Заголовок = ЗаголовокГруппыОперацииСКассовойСменой;
	
	ЗаголовокГруппыДенежныеОперации = НСтр("ru='В кассе %НаличностьВКассе% %Валюта%'");
	
	перНаличностьВКассе = Формат(Форма.СтруктураСостояниеКассовойСмены.НаличностьВКассе, "ЧДЦ=2; ЧН=0");
	ЗаголовокГруппыДенежныеОперации = СтрЗаменить(ЗаголовокГруппыДенежныеОперации, "%НаличностьВКассе%", перНаличностьВКассе);
	ЗаголовокГруппыДенежныеОперации = СтрЗаменить(ЗаголовокГруппыДенежныеОперации, "%Валюта%", Форма.СтруктураСостояниеКассовойСмены.ВалютаПредставление);
	Форма.Элементы.ГруппаДенежныеОперации.Заголовок = ЗаголовокГруппыДенежныеОперации;
	
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройки()
	
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Документы.ЧекККМ.Форма.МенюОперацийСККМ", "ЗакрыватьФормуПослеЗавершенияОперации", ЗакрыватьФормуПослеЗавершенияОперации);
	
КонецПроцедуры

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

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

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

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

		КонецЕсли;
		
		ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, КодВозвратаДиалога.Да);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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


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

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