Плохой контроль остатков серий в УНФ 3.0

Столкнулся с тем, что несмотря на включенный контроль остатков и контроль остатков по сериями, при продаже чеков ККМ допускается продажа в минус.

Серии у клиента используются для подарочных сертификатов, отсутствие контроля привело к тому, что один сертификат продавался по нескольку раз.

База у клиента клиент-серверная и находится на SCLOUD, где отладка на сервере не доступна. Там могут переместить базу на другой сервер с отладкой, а потом обратно, если требуется отладка. Но это приводит к изменению путей доступа к базе у пользователей.

Можно было бы поработать с файловой копией, но все это вопрос времени.

Поэтому было решено написать небольшое расширение, контролирующее наличие остатков только по сериям.

Вот его код в модуле проведения чека:


&После("ОбработкаПроведения")
Процедура копсд_ОбработкаПроведения(Отказ, РежимПроведения)   
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	З = Новый Запрос();
    З.Текст =
    "ВЫБРАТЬ
    |	ТН.Серия.Владелец КАК Номенклатура,
    |	ТН.Серия КАК Серия,
    |	ТН.Количество КАК Количество,
    |	ЕСТЬNULL(Т.КоличествоОстаток, 0) КАК Остаток
    |ИЗ
    |	Документ.ЧекККМ.СерииНоменклатуры КАК ТН
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СерииНоменклатуры.Остатки(&Дата, ) КАК Т
    |		ПО ТН.Серия.Владелец = Т.Номенклатура
    |			И ТН.Серия = Т.Серия
    |			И (&ОрганизацияДляПроведения = Т.Организация)
    |			И ТН.Ссылка.СтруктурнаяЕдиница = Т.СтруктурнаяЕдиница
    |ГДЕ
    |	ТН.Ссылка = &Ссылка";
	
	Граница = Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая);  

	ОрганизацияДляПроведения = Константы.УчетПоКомпании.Компания(ЭтотОбъект.Ссылка.Организация);
	
    З.УстановитьПараметр("Дата", Граница);                    
    З.УстановитьПараметр("ОрганизацияДляПроведения", ОрганизацияДляПроведения);   
	З.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);


    Выборка = З.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл       
		Если Выборка.Остаток < Выборка.Количество Тогда
			Сообщить("По серии " + Выборка.Серия + " номенклатуры: " + Выборка.Номенклатура + 
			" остаток: " + Выборка.Остаток + 
			" меньше, чем требуется списать: " + Выборка.Количество +
			" по организации: " +ОрганизацияДляПроведения
			, СтатусСообщения.Важное);
			Отказ = истина;
		КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Обратите внимание, как определяется организация — у клиента включен режим общей организации для компании, поэтому просто брать организацию из шапки чека нельзя.

Среда: УНФ 3.0.6.200 Объем: 1 час