Списание остатков со складов по приоритету: чем выше остаток, тем выше приоритет

1. elena_re 06.02.24 13:05 Сейчас в теме
Всем добрый день!) По задаче требуется реализовать списание товара со складов с учетом приоритета: чем больше на складе остатков товара, тем выше его приоритет. При этом в шапке документа есть реквизит "Склад", на котором, если пользователь его заполнил, запрос должен в первую очередь искать остатки, а потом на остальных. Запрос уже создан, но требуется только исправить или доработать условие для списания в правильном порядке.
Условие
ВЫБОР
				КОГДА ТоварыНаСкладахОстатки.Склад = &Склад
					ТОГДА -1
				ИНАЧЕ 1
			КОНЕЦ КАК ПриоритетСкладаПоОстаткам
пока оставила с "иначе 1", но все равно списание происходит не так, как нужно.

Что-то вообще не пойму, как можно было бы списывать остатки путем нахождения количества(( Помогите плиз.. :(

Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
		|	СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
		|	РасходнаяНакладная.Контрагент КАК Контрагент
		|ПОМЕСТИТЬ ВТ_ТоварыРасход
		|ИЗ
		|	Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
		|		ПО РасходнаяНакладнаяСписокНоменклатуры.Ссылка = РасходнаяНакладная.Ссылка
		|ГДЕ
		|	РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
		|
		|СГРУППИРОВАТЬ ПО
		|	РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
		|	РасходнаяНакладная.Контрагент
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Номенклатура
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ_ТоварыРасход.Номенклатура КАК Номенклатура,
		|	ВТ_ТоварыРасход.Количество КАК Количество,
		|	ТоварыНаСкладахОстатки.Склад КАК Склад,
		|	ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
		|	ВЫБОР
		|		КОГДА ТоварыНаСкладахОстатки.Склад = &Склад
		|			ТОГДА -1
		|		ИНАЧЕ 1
		|	КОНЕЦ КАК ПриоритетСкладаПоОстаткам
		|ИЗ
		|	ВТ_ТоварыРасход КАК ВТ_ТоварыРасход
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
		|				&МоментВремени,
		|				Номенклатура В
		|					(ВЫБРАТЬ
		|						ВТ_ТоварыРасход.Номенклатура КАК Номенклатура
		|					ИЗ
		|						ВТ_ТоварыРасход КАК ВТ_ТоварыРасход)) КАК ТоварыНаСкладахОстатки
		|		ПО ВТ_ТоварыРасход.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
		|
		|УПОРЯДОЧИТЬ ПО
		|	ПриоритетСкладаПоОстаткам
		|ИТОГИ
		|	МАКСИМУМ(Количество),
		|	СУММА(КоличествоОстаток)
		|ПО
		|	Номенклатура";
	
	Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	Запрос.УстановитьПараметр("Склад", Склад);
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 06.02.24 13:43 Сейчас в теме
(1)
|ПО
| Номенклатура, Склад
3. Kvark5d 06.02.24 13:46 Сейчас в теме
|    ВЫБОР
|        КОГДА ТоварыНаСкладахОстатки.Склад = &Склад
|            ТОГДА 999999999999
|        ИНАЧЕ ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
|    КОНЕЦ КАК ПриоритетСкладаПоОстаткам
...
|УПОРЯДОЧИТЬ ПО
|    ПриоритетСкладаПоОстаткам УБЫВ
Показать
elena_re; +1 Ответить
Оставьте свое сообщение

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