Плохой контроль остатков серий в УНФ 3.0
Столкнулся с тем, что несмотря на включенный контроль остатков и контроль остатков по сериями, при продаже чеков ККМ допускается продажа в минус.
Серии у клиента используются для подарочных сертификатов, отсутствие контроля привело к тому, что один сертификат продавался по нескольку раз.
База у клиента клиент-серверная и находится на SCLOUD, где отладка на сервере не доступна. Там могут переместить базу на другой сервер с отладкой, а потом обратно, если требуется отладка. Но это приводит к изменению путей доступа к базе у пользователей.
Можно было бы поработать с файловой копией, но все это вопрос времени.
Поэтому было решено написать небольшое расширение, контролирующее наличие остатков только по сериям.
Вот его код в модуле проведения чека:
&После("ОбработкаПроведения") Процедура копсд_ОбработкаПроведения(Отказ, РежимПроведения) Если Отказ Тогда Возврат; КонецЕсли; З = Новый Запрос(); З.Текст = "ВЫБРАТЬ | ТН.Серия.Владелец КАК Номенклатура, | ТН.Серия КАК Серия, | ТН.Количество КАК Количество, | ЕСТЬNULL(Т.КоличествоОстаток, 0) КАК Остаток |ИЗ | Документ.ЧекККМ.СерииНоменклатуры КАК ТН | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СерииНоменклатуры.Остатки(&Дата, ) КАК Т | ПО ТН.Серия.Владелец = Т.Номенклатура | И ТН.Серия = Т.Серия | И (&ОрганизацияДляПроведения = Т.Организация) | И ТН.Ссылка.СтруктурнаяЕдиница = Т.СтруктурнаяЕдиница |ГДЕ | ТН.Ссылка = &Ссылка"; Граница = Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая); ОрганизацияДляПроведения = Константы.УчетПоКомпании.Компания(ЭтотОбъект.Ссылка.Организация); З.УстановитьПараметр("Дата", Граница); З.УстановитьПараметр("ОрганизацияДляПроведения", ОрганизацияДляПроведения); З.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка); Выборка = З.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Остаток < Выборка.Количество Тогда Сообщить("По серии " + Выборка.Серия + " номенклатуры: " + Выборка.Номенклатура + " остаток: " + Выборка.Остаток + " меньше, чем требуется списать: " + Выборка.Количество + " по организации: " +ОрганизацияДляПроведения , СтатусСообщения.Важное); Отказ = истина; КонецЕсли; КонецЦикла; КонецПроцедуры
Обратите внимание, как определяется организация — у клиента включен режим общей организации для компании, поэтому просто брать организацию из шапки чека нельзя.
Среда: УНФ 3.0.6.200 Объем: 1 час

А в таблицу остатков выгребать все данные, на это надо обратить внимание?
мелочи жизни. Пусть работает оптимизатор запросов.
Скажи мне пожалуйста, как устроен вызов виртуальной таблицы остатки в 1с с точки зрения SQL? Это к тому, а сможет ли оптимизатор?
И это но только лишь избыточные данные, это ещё и никому не нужные блокировки.
В целом же это не мелочи, а культура разработки.
оптимизатор видит соединения, значит может оптимизировать таблицы, да. Просто 1С возложила на программистов ненужный труд по оптимизации запросов, по клиент-серверному разделению для управляемых форм. Из-за того, что слаба в архитектуре и методологии. Не может красиво и быстро. Увы.
А потом назвала эти вериги «культурой разработки».
А некоторые 1сники после этого испытывают к 1С «стокгольмский синдром» и думают, что так и должно быть.
Если бы оптимизация тут имела бы какой-то эффект, я бы оптимизировал. Но на спичках не экономлю.