|
v8: Как узнать одним запросом хватит ли товара двум покупателям, а если не хватит то сколько и кому? | ☑ | ||
---|---|---|---|---|
0
zoro-z
21.11.12
✎
18:43
|
Задача:
Есть два покупателя на один и тот же товар, есть товар на складе. Как узнать одним запросом хватит ли товар двум покупателям, а если не хватит то сколько и кому. |
|||
1
shuhard
21.11.12
✎
18:46
|
(0) [и кому]
учетная система телепатически расставит приоритеты ? |
|||
2
zoro-z
21.11.12
✎
18:48
|
Приоритет по списку от А до Я.
|
|||
3
zoro-z
21.11.12
✎
18:49
|
Главное как в запросе учитывать динамический остаток.
|
|||
4
Fragster
гуру
21.11.12
✎
18:50
|
можно фифо в запросе, можно фифо постобработкой запроса с итогами за 1 проход результата.
|
|||
5
zulu_mix
21.11.12
✎
18:50
|
поглядеть как устроено резервирование?
|
|||
6
zoro-z
21.11.12
✎
18:51
|
(5) можно но долго.
Нужен какой нибуть маленький примерчик, куда хоть двигаться. |
|||
7
shuhard
21.11.12
✎
18:52
|
(3) ну тут два покупателя и достаточно двух временных таблиц
|
|||
8
Fragster
гуру
21.11.12
✎
18:53
|
а что иль кто есть "динамический остаток"?
|
|||
9
zoro-z
21.11.12
✎
18:53
|
(7) Покупателей может быть сколько угодно, это пример.
|
|||
10
zoro-z
21.11.12
✎
18:54
|
(8)
Ост = 10 П1 = 8 П2 = 5 Ост = 10 - 8 = 2 Ост = 2 - 5 = -3 Типа того. |
|||
11
shuhard
21.11.12
✎
18:55
|
(9) тогда в поиск
нарастающий итог запросом |
|||
12
Fragster
гуру
21.11.12
✎
19:04
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ""Склад"" КАК Склад, | 12 КАК Остаток |ПОМЕСТИТЬ Остатки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ""Склад"" КАК Склад, | ""К1"" КАК Контрагент, | 8 КАК Количество |ПОМЕСТИТЬ Заказы | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ""Склад"", | ""К2"", | 7 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Остатки.Склад КАК Склад, | Остатки.Остаток КАК Остаток, | Заказы.Контрагент, | Заказы.Количество КАК Количество |ИЗ | Остатки КАК Остатки | ЛЕВОЕ СОЕДИНЕНИЕ Заказы КАК Заказы | ПО Остатки.Склад = Заказы.Склад |ИТОГИ | СУММА(Количество) КАК Количество |ПО | Склад, | Остаток"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке И Выборка.Группировка() = "Остаток" Тогда Остаток = Выборка.Остаток; Если Остаток < Выборка.Количество Тогда Сообщить("Не хватает " + (Выборка.Количество-Остаток) + " шт"); КонецЕсли; КонецЕсли; Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ДетальнаяЗапись Тогда КоличествоЗаписи = Мин(Выборка.Количество, Остаток); Сообщить("Клиенту " + Выборка.Контрагент + "досталось" + КоличествоЗаписи); Остаток = Остаток - КоличествоЗаписи; КонецЕсли; КонецЦикла; |
|||
13
Fragster
гуру
21.11.12
✎
19:04
|
(11) медленно
|
|||
14
shuhard
21.11.12
✎
19:06
|
(13) угу
страшно медленно но ТС поставил себе задачу сделать это в запросе |
|||
15
Fragster
гуру
21.11.12
✎
19:06
|
(14) в итоге пришел к построению разных фифо по принципу (12), вполне шустро получается
|
|||
16
Fragster
гуру
21.11.12
✎
19:07
|
знай себе сортировку добавляй нужную
|
|||
17
zoro-z
21.11.12
✎
19:13
|
Запрос должен выдать сразу - П2 не хватило 3 штуки.
|
|||
18
Fragster
гуру
21.11.12
✎
19:15
|
(17) а (12) что, не выдал? ну тогда Мин(Выборка.Количество, Остаток); замени на Макс(0, Остаток) - Выборка.Количество,
|
|||
19
Fragster
гуру
21.11.12
✎
19:22
|
ну тормозной вариант типа такой
ВЫБРАТЬ "Склад" КАК Склад, 12 КАК Остаток ПОМЕСТИТЬ Остатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ "Склад" КАК Склад, "К1" КАК Контрагент, 8 КАК Количество ПОМЕСТИТЬ Заказы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Склад", "К2", 7 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Заказы.Склад, Заказы.Контрагент, СУММА(ЗаказыПред.Количество) КАК Количество ПОМЕСТИТЬ ЗаказыНарастающий ИЗ Заказы КАК Заказы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы КАК ЗаказыПред ПО Заказы.Склад = ЗаказыПред.Склад И Заказы.Контрагент >= ЗаказыПред.Контрагент СГРУППИРОВАТЬ ПО Заказы.Склад, Заказы.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Остатки.Склад КАК Склад, ЗаказыНарастающий.Контрагент, Остатки.Остаток - ЗаказыНарастающий.Количество КАК Досталось ИЗ Остатки КАК Остатки ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыНарастающий КАК ЗаказыНарастающий ПО Остатки.Склад = ЗаказыНарастающий.Склад |
|||
20
zoro-z
21.11.12
✎
19:42
|
Спасибо, попробую.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |