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

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;

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

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

		Элемент = УсловноеОформление.Элементы.Добавить();
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПриЗакрытии()
	
	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура КассаККМОтборПриИзменении(Элемент)
	
	КассаОтборПриИзмененииСервер();
	УстановитьДоступностьКомандСозданияДокументовНаВозврат();
	
КонецПроцедуры

&НаКлиенте
Процедура ТолькоТекущаяСменаОтборПриИзменении(Элемент)
	
	УстановитьОтборДинамическихСписковНаКлиенте();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЧекиККМПриАктивизацииСтроки(Элемент)
	
	УстановитьДоступностьКомандСозданияДокументовНаВозврат();
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	
КонецПроцедуры

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

		Отказ = Истина;
		ПараметрыОткрытия = Новый Структура("Ключ", ТекущиеДанные.Ссылка);
		ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыОткрытия);
	КонецЕсли;
	
КонецПроцедуры

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

		СтандартнаяОбработка = Ложь;
		ПараметрыОткрытия = Новый Структура("Ключ", ТекущиеДанные.Ссылка);
		ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыОткрытия);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЧекиККМПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	ТекущиеДанные = Элементы.ЧекиККМ.ТекущиеДанные;
	Отказ = Истина;

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

&НаСервере
Функция ЕстьПравоНаИзменениеДокумента(ДокументСсылка)
	
	Возврат ПравоДоступа("Изменение", ДокументСсылка.Метаданные());
	
КонецФункции

&НаСервереБезКонтекста
Процедура ЧекиККМПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)

	Ключи = Строки.ПолучитьКлючи();
	
	Запрос = Новый Запрос;
	Запрос.Текст = "
				   |ВЫБРАТЬ
				   |	ЧекККМВозврат.ЧекККМ КАК Ссылка,
				   |	ЧекККМВозврат.Ссылка КАК ОтложенныйЧекККМВозврат
				   |ИЗ
				   |	Документ.ЧекККМВозврат КАК ЧекККМВозврат
				   |ГДЕ
				   |	ЧекККМВозврат.ЧекККМ В (&Ссылка)
				   |	И ЧекККМВозврат.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Пробит)
				   |";
	
	Запрос.УстановитьПараметр("Ссылка", Ключи);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если Не РезультатЗапроса.Пустой() Тогда
		
		ВыборкаЧекККМВозврат = РезультатЗапроса.Выбрать();
		
		Для Каждого Строка Из Строки Цикл
			Строка = Строки[Строка.Ключ];
			
			ВыборкаЧекККМВозврат.Сбросить();
			Если ВыборкаЧекККМВозврат.НайтиСледующий(Строка.Данные["Ссылка"], "Ссылка") Тогда 
				Строка.Данные["ОтложенныйЧекККМВозврат"] = ВыборкаЧекККМВозврат.ОтложенныйЧекККМВозврат;
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ПолучитьСтатусыОперацийСБП(Команда)
	
	ПолучитьСтатусыОперацийСБПНаСервере();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура СоздатьЧекККМНаВозврат(Команда)

	ИмяОткрываемойФормы = ИмяОткрываемойФормы(ПредопределенноеЗначение("Документ.ЧекККМВозврат.ПустаяСсылка"),
											ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.ПустаяСсылка"));
	
	Основание = Новый Структура("КассаККМ", КассаККМ);
	ПараметрыОткрытияФормы = Новый Структура("Основание", Основание);
	ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыОткрытияФормы);
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьЧекККМ(Команда)

	ИмяОткрываемойФормы = ИмяОткрываемойФормы(ПредопределенноеЗначение("Документ.ЧекККМ.ПустаяСсылка"),
											ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.ПустаяСсылка"));
	
	Основание = Новый Структура("КассаККМ", КассаККМ);
	ПараметрыОткрытияФормы = Новый Структура("Основание", Основание);
	ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыОткрытияФормы);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОтправитьПодтверждениеНСПК(Команда)
	
	ОтправитьПодтверждениеНСПКЛокализация();
	
КонецПроцедуры

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

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.ЧекиККМ);
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.ЧекиККМ);
КонецПроцедуры

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

&НаКлиенте
Процедура ПослеФормированияОтчетаБезГашения(Результат, ДополнительныеПараметры) Экспорт
	
	ОбновитьСостояниеКассовойСменыИУстановитьОтборДинамическихСписковНаКлиенте(КассаККМ);    
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьОперацииПроверкиКМ(Команда)  
	
	ОткрытьОперацииПроверкиКМЛокализация();  
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

#Область ШтрихкодыИТорговоеОборудование

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

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

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

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

#Область Прочее

&НаСервереБезКонтекста
Функция СостояниеКассовойСменыНаСервереБезКонтекста(КассаККМ)
	
	Возврат РозничныеПродажи.ПолучитьСостояниеКассовойСмены(КассаККМ);
	
КонецФункции

&НаСервере
Процедура КассаОтборПриИзмененииСервер()
	
	ОбновитьСостояниеКассовойСменыНаСервере(КассаККМ);
	УстановитьОтборДинамическихСписковНаСервере();
	
КонецПроцедуры

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

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

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

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

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

				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ЧекиККМДокументЧекККМВозвратСоздатьНаОсновании",                   "Видимость", Ложь);	
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КонтекстноеМенюЧекиККМДокументЧекККМВозвратСоздатьНаОсновании",    "Видимость", Ложь);
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ЧекиККМДокументЧекККМВозвратОткрытьОтложенный",                    "Видимость", Истина);	
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КонтекстноеМенюЧекиККМДокументЧекККМВозвратОткрытьОтложенный",     "Видимость", Истина);
				
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ЧекиККМДокументЧекККМВозвратОткрытьОтложенный",                    "Доступность", ЧекПробит И ПоТекущейКассеСменаОткрыта);	
				ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КонтекстноеМенюЧекиККМДокументЧекККМВозвратОткрытьОтложенный",     "Доступность", ЧекПробит И ПоТекущейКассеСменаОткрыта);
							
			Иначе

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция СтатусДокумента(Ссылка)
	
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Статус");
	
КонецФункции

&НаКлиенте
Функция ИмяОткрываемойФормы(Ссылка, Статус)
	
	ИмяОткрываемойФормы = "";

	Если Статус <> Неопределено И Статус <> ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробит") Тогда
		Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЧекККМ") Тогда
			
			ИмяОткрываемойФормы = "Документ.ЧекККМ.Форма.ФормаДокументаРМК";
			
		ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЧекККМВозврат") Тогда
			
			ИмяОткрываемойФормы = "Документ.ЧекККМВозврат.Форма.ФормаДокументаРМК";
			
		ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЧекККМКоррекции") Тогда
			
			ИмяОткрываемойФормы = "Документ.ЧекККМКоррекции.Форма.ФормаДокумента";
			
		ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.РеализацияПодарочныхСертификатов") Тогда
			
			ИмяОткрываемойФормы = "Документ.РеализацияПодарочныхСертификатов.Форма.ФормаДокументаРМК";
			
		ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ВозвратПодарочныхСертификатов") Тогда
			
			ИмяОткрываемойФормы = "Документ.ВозвратПодарочныхСертификатов.Форма.ФормаДокументаРМК";
			
		КонецЕсли;
	КонецЕсли;
	
	Возврат ИмяОткрываемойФормы;
	
КонецФункции

&НаКлиенте
Процедура НачатьПодключениеОборудованиеПоИдентификаторуЗавершение(Данные, СтрокаТЧ) Экспорт

	Если НЕ Данные.Результат Тогда
		
		РозничныеПродажиКлиент.СообщитьОбОшибкеПриВыполненииОперацииНаУстройстве(СтрокаТЧ.Ссылка, "ПодключениеУстройства", Данные.ОписаниеОшибки);
		
		СтрокаТЧ.Подключено = 1;
		
	Иначе
		
		СтрокаТЧ.Подключено = 0;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

	//-- Локализация
	
КонецПроцедуры      
#КонецОбласти

#Область Локализация

&НаСервере
Процедура ПолучитьСтатусыОперацийСБПНаСервере()
	
	//++ Локализация
	ПереводыСБПc2b.СтатусыОпераций();
	//-- Локализация
	
КонецПроцедуры


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

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

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