Контроль остатков через модуль регистра накопления.

1. Xlophik 03.11.20 09:29 Сейчас в теме
Доброго всем дня.
Столкнулся сегодня с такой задачей:
Нужно контролировать остатки в модуле набора записей РегистраНакопления(ТоварыНаСкладах.) И еще есть реквизиты у справочников Номенклатуры и Склада (Контролировать остаток или нет (тип булево)). Вот и вроде все написал....И запрос сделал...Но что то не идет....процедура приЗаписи.
Вот запрос:
Запрос = Новый запрос(
	"ВЫБРАТЬ
	|	Т.Номенклатура КАК Номенклатура,
	|	Т.Склад КАК Склад,
	|	Т.КоличествоОстаток КАК КоличествоОстаток,
	|	Т.Номенклатура.КонтролироватьОстаток КАК НоменклатураКонтролироватьОстаток,
	|	Т.Склад.КонтролироватьОстаток КАК СкладКонтролироватьОстаток
	|ИЗ
	|	РегистрНакопления.ТоварыНаСкладе.Остатки(
	|			,
	|			(Номенклатура, Склад) В
	|				(ВЫБРАТЬ
	|					ТТ.Номенклатура,
	|					ТТ.Склад
	|				ИЗ
	|					РегистрНакопления.ТоварыНаСкладе КАК ТТ
	|				ГДЕ
	|					ТТ.Регистратор = &Регистратор
	|					И (ТТ.ВидДвижения = &Расход
	|							И ТТ.Количество > 0
	|						ИЛИ ТТ.ВидДвижения = &Приход
	|							И ТТ.Количество < 0))) КАК Т
	|ГДЕ
	|	Т.КоличествоОстаток < 0
	|	И Т.Номенклатура.КонтролироватьОстаток = ИСТИНА
	|	И Т.Склад.КонтролироватьОстаток = ИСТИНА");
Показать


Есть у кого какие мысли.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. user633533_encantado 11 03.11.20 09:59 Сейчас в теме
(1) Нужно взять остатки по регистру, вычесть из них количество из документа и прибавить движения регистратора (документ может перепроводиться и нужно учесть, что он уже уменьшил остатки на момент контроля).

После этого отобрать записи меньше 0.
user1464234; +1 Ответить
8. Xlophik 03.11.20 10:08 Сейчас в теме
(7)

До сих пор не до понимание....Я же уже взял остатки из регистра...
9. user1464234 03.11.20 10:16 Сейчас в теме
(8) то есть ваш запрос это самый последний пункт процесса?
10. Xlophik 03.11.20 10:17 Сейчас в теме
(9)

Нет конечно дальше

 Запрос.УстановитьПараметр("Регистратор", ЭтотОбъект.Отбор.Регистратор.Значение);
	Запрос.УстановитьПараметр("Расход", ВидДвиженияНакопления.Расход);  
	Запрос.УстановитьПараметр("Приход", ВидДвиженияНакопления.Приход);
	
	РезультатЗапроса = Запрос.Выполнить();
	Если Не РезультатЗапроса.Пустой() Тогда 
		Отказ=Истина;
		Сообщить("Товар не учитывается на складе!");
	КонецЕсли;
Показать
user1464234; +1 Ответить
11. DJDUH 17 03.11.20 18:04 Сейчас в теме
(1) может нужно делать "передЗаписью" Объект <> Текобъект
2. user1464234 03.11.20 09:41 Сейчас в теме
Теоретически можно и так. На стажерской лекции говорили о том, что в ерп, в отличие от упп реализован другой механизм контроля остатков. В новом варианте сначала записываются движения как есть, затем выполняется запрос к остаткам с условием <0. Если запрос не пустой, транзакция отменяется и это в целом быстрее, чем как обычно.
Меня немного удивило насколько критично количество запросов в модуле объекта...
В вашем примере условие на количество используется до проведения и соответственно не работает.
3. alex-l19041 8 03.11.20 09:45 Сейчас в теме
(2)
критично количество запросов в модуле объекта
- можно подробнее ?
5. Xlophik 03.11.20 09:50 Сейчас в теме
(2)
В вашем примере условие на количество используется до проведения и соответственно не работает.


Хм...не понял????
6. user633533_encantado 11 03.11.20 09:54 Сейчас в теме
(2) Да это давно уже так, да и на экзамене на спеца нужно такой метод контроля применять.

Позволяет контролировать остатки задним числом, не даст распровести оприходование, если на текущий момент остаток уйдет в минус.
user1464234; +1 Ответить
4. user1464234 03.11.20 09:49 Сейчас в теме
Замеры производительности делала на своих примерах с небольшими запросами в цикле. Или с двумя запросами -один в шапке, например как в расходной накладной по взаиморасчеты, другой на товары.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот