Отключить контроль 24 часа в типовых конфигурациях

Контроль 24 часа при закрытии смены

Работая с типовой конфигурацией Розница 2, часто слышал жалобы работников на предупреждение о контроле 24 часа при пробитии чеков и закрытии смены. Данное предупреждение разумеется не является ошибкой, а скорее требование закона, какого именно я вас не скажу, так как не знаю. Однако требование было высказано, а соответственно исполнять его надо.

Решение как и всегда когда дело имеем с типовыми конфигурациями оказалось достаточно простое. После недолгой отладки выяснилось, что проверка на на время закрытия выполняется в общем модуле РозничныеПродажиСервер в процедуре СменаОткрыта . 

Соответственно переносим данный модуль в Расширение конфигурации и переопределяем нашу требуемую функцию. Код следующий

<code>&amp;Вместо("СменаОткрыта")
Функция Расш1_СменаОткрыта(КассоваяСмена, Дата, ОписаниеОшибки = "") Экспорт
	
	СменаОткрыта = Ложь;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	КассоваяСмена.Статус    КАК СтатусКассовойСмены,
	|	КассоваяСмена.НачалоКассовойСмены    КАК НачалоКассовойСмены,
	|	КассоваяСмена.ОкончаниеКассовойСмены КАК ОкончаниеКассовойСмены
	|ИЗ
	|	Документ.КассоваяСмена КАК КассоваяСмена
	|ГДЕ
	|	КассоваяСмена.Проведен
	|	И КассоваяСмена.Ссылка = &amp;КассоваяСмена";
	
	Запрос.УстановитьПараметр("КассоваяСмена", КассоваяСмена);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Если Выборка.Следующий() Тогда
		
		Если Выборка.СтатусКассовойСмены = Перечисления.СтатусыКассовойСмены.Открыта Тогда
			
			// Если смена открыта, то с момента открытия должно пройти не больше чем 24 часа.
			//Если Дата - Выборка.НачалоКассовойСмены &lt; 86400 Тогда
				
				СменаОткрыта = Истина;
				
			//Иначе
			//	
			//	ОписаниеОшибки = НСтр("ru = 'С момента открытия кассовой смены истекло более 24 часов.'");
			//	СменаОткрыта = Ложь;
			//	
			//КонецЕсли;
			
		ИначеЕсли ЗначениеЗаполнено(Выборка.СтатусКассовойСмены) Тогда
			
			Если Выборка.ОкончаниеКассовойСмены >= Дата И Выборка.НачалоКассовойСмены &lt;= Дата Тогда
				
				СменаОткрыта = Истина;
				
			Иначе
				
				ОписаниеОшибки = НСтр("ru = 'Кассовая смена закрыта.'");
				СменаОткрыта = Ложь;
				
			КонецЕсли;
			
		КонецЕсли;
		
	Иначе
		
		ОписаниеОшибки = НСтр("ru = 'Кассовая смена не открыта.'");
		СменаОткрыта = Ложь;
		
	КонецЕсли;
	
	Возврат СменаОткрыта;
	
КонецФункции
</code>

upd от 14.08.2019.

Для полноценной работы нужно еще переопределить процедуру СтатусПоследнейСмены в Общем модуле КассовыеСменыВызовСервера. Переопределяем конечно через расширение.

<code>&amp;Вместо("СтатусПоследнейСмены")
Функция Расш1_СтатусПоследнейСмены(ФискальноеУстройство) Экспорт
	
	РезультатОперации = Новый Структура();
	РезультатОперации.Вставить("Активна", Ложь);
	РезультатОперации.Вставить("Открыта", Ложь);
	РезультатОперации.Вставить("ТекущийНомерЧека");
	РезультатОперации.Вставить("НомерСмены");
	РезультатОперации.Вставить("КассоваяСмена");
	
	ОписаниеПоследнейСмены = ОписаниеПоследнейКассовойСмены(ФискальноеУстройство);
	
	Если Не (ОписаниеПоследнейСмены = Неопределено) Тогда
		РезультатОперации.Открыта = ОписаниеПоследнейСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта; 
		РезультатОперации.Активна = РезультатОперации.Открыта;
		РезультатОперации.ТекущийНомерЧека = ПолучитьТекущийНомерЧекаККТ(ФискальноеУстройство, ОписаниеПоследнейСмены.КассоваяСмена);
		РезультатОперации.КассоваяСмена    = ОписаниеПоследнейСмены.КассоваяСмена;
		РезультатОперации.НомерСмены       = ОписаниеПоследнейСмены.КассоваяСмена.Номер;
	КонецЕсли;
	
	Возврат РезультатОперации;
	
КонецФункции
</code>

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика