|
Как запросом из регистра выбрать последние 100 кг прихода | ☑ | ||
---|---|---|---|---|
0
max1c2011
29.04.19
✎
10:33
|
Что то туплю.
Как в ERP 2.4, да в принципе, не только в ней, выбрать ЗАПРОСОМ из некого регистра, скажем "Закупки" последний приход в количестве N-кг. Скажем, как выбрать последний приход 100 кг картошки. Ведь она может закупаться в разные месяцы и разными патриями. Вроде вопрос простой, но туплю. |
|||
1
Ёпрст
29.04.19
✎
10:34
|
Если было куплено 103 кг, попадает в ваше условие, или нужно строгое равенство ?
|
|||
2
Ёпрст
29.04.19
✎
10:35
|
ну а так подзапрос на поиск максимальной даты и его в условие на документ. усё
|
|||
3
Жан Пердежон
29.04.19
✎
10:36
|
накопленную сумму считай сначала
|
|||
4
Вафель
29.04.19
✎
10:37
|
(1) как я понял нужно по партиям собрать 100кг
|
|||
5
Garykom
гуру
29.04.19
✎
10:39
|
Данная задача в общем виде без запросов в цикле не решается на sql
|
|||
6
Simod
29.04.19
✎
10:41
|
Речь вроде о приходе, а не о приходах на сумму.
|
|||
7
catena
29.04.19
✎
10:41
|
Найти именно приход с указанным количеством или с накоплением по фифо до нужного количества?
|
|||
8
Жан Пердежон
29.04.19
✎
10:41
|
(5) это ваши ограниченные знания sql заставляют так думать?
(6) это всё один большой приход! |
|||
9
Simod
29.04.19
✎
10:43
|
Если один приход, то:
выбрать первые 1 партия из Регистр где Количество = 100 упорядочить по Дата убыв |
|||
10
СвинТуз
29.04.19
✎
10:48
|
(0)
Можно. Через левое соединение, например. Но это не уровень школы. (5) "Поставьте на меня небольшую ставочку" (С) |
|||
11
Garykom
гуру
29.04.19
✎
10:52
|
Задача которая решается циклом аля "набор корзины по порядку пока не хватит".
На языке запросов тоже будет с циклами. Да современные диалекты sql позволяют кодить и условия и циклы и почти что угодно, не обязательно снаружи цикл делать. |
|||
12
Garykom
гуру
29.04.19
✎
10:55
|
Если ограничить по кол-ву максимально приходов (от 1 до N) то можно запросом, но там пипец будет.
В общем виде для любого даже неразумного N скажем в миллионы приходов которыми будут набираться 100 кг как? |
|||
13
max1c2011
29.04.19
✎
11:04
|
С циклами то я все понял...
Приход может быть в любое время на любое количество, с разрывами. Варианты: - куплена в августе 2018 партия 1000 кг - куплены партиями разными. но 4 месяца не покупали - покупаем по 1 кг каждый день |
|||
14
Garykom
гуру
29.04.19
✎
11:09
|
SELECT t.*,
@sum := @sum + effect FROM ( SELECT * FROM `table` ORDER BY effect DESC ) AS t JOIN (SELECT @sum := 0) var WHERE @sum < 100; https://toster.ru/q/96563 Как это на языке 1С я хз |
|||
15
max1c2011
29.04.19
✎
11:11
|
говорят в SQL есть функция OVER
|
|||
16
Eiffil123
29.04.19
✎
11:13
|
сложно, но можно.
но проще кодом в цикле, очень похоже на задачу классического списания по партиям по ФИФО. |
|||
17
Eiffil123
29.04.19
✎
11:15
|
можно даже использовать объектную модель доступа к базе данных (читать записи из регистра пока не наберем нужное количество), возможно даже быстрее будет.
|
|||
18
Генератор
29.04.19
✎
11:16
|
запрос без даты начала, производительность будет ухудшаться с объемом данных
|
|||
19
max1c2011
29.04.19
✎
11:17
|
Просто стала задача - быстро запросом получить стоимость последнего прихода N-кг товара.
|
|||
20
max1c2011
29.04.19
✎
11:17
|
да, данных много - в ERP это все...
|
|||
21
catena
29.04.19
✎
11:21
|
(19)А если в данной задаче быстро - это не запросом?
|
|||
22
catena
29.04.19
✎
11:22
|
Вообще фифо запросом гуглится, по-моему этим все балуются в начале карьеры. Соединение регистра самого с собой по периоду с группировкой суммы по ресурсу.
|
|||
23
Simod
29.04.19
✎
11:23
|
||||
24
GANR
29.04.19
✎
11:24
|
(0) Одним только запросом будет стремно. Надо сформировать выборку остатков по партиям, отсортированную по убыванию даты приходного документа (LIFO). Затем перебрать выборку в цикле, в переменной подсчитывая сколько кило осталось до 100.
|
|||
25
lodger
29.04.19
✎
11:25
|
(0) готовь 3 запроса...
1) приходы по номенклатуре за последние N-дней, 2) приходы по номенклатуре за M-месяцев, 3) все приходы по номенклатуре. все с сортировкой "с конца". числа N и M должны быть подобраны так, чтобы закрывать ~60% и ~30% от всех случаев. после каждого запроса из 1 и 2 делать обход выборки пока не наберется, либо делать обход 3 пока не наберется или "как есть". естественно речь идет только о средствах 1ц. это наиболее простой и нативный способ, имхо. |
|||
26
max1c2011
29.04.19
✎
11:26
|
(25)ну до этого я сам уже дошел.
Вот думал может как то одним и быстро можно. |
|||
27
Garykom
гуру
29.04.19
✎
11:30
|
(23) Это конечно решение.
Но по сути вместо одного цикла, давайте сделаем несколько десятков, сотен и более циклов уже внутри sql сервера. |
|||
28
Garykom
гуру
29.04.19
✎
11:31
|
(27)+ Хороший антипример как делать через ЖПО, но зато запросами.
|
|||
29
ptiz
29.04.19
✎
11:31
|
(19) Интересует один товар или по списку?
|
|||
30
max1c2011
29.04.19
✎
11:32
|
(23)спасибо
|
|||
31
max1c2011
29.04.19
✎
11:32
|
(29)да без разницы.
Конечно по списку - кому только картошка интересна |
|||
32
Garykom
гуру
29.04.19
✎
11:33
|
(30) Рано благодаришь там FIFO а тебе надо LIFO
|
|||
33
ptiz
29.04.19
✎
11:35
|
(31) Такой запрос по одному товару у меня быстро отработал.
Но "по списку" - торможу, не вижу хорошего решения. ВЫБРАТЬ ПЕРВЫЕ 1 ОстаткиТоваров.Период КАК Период, ОстаткиТоваров.Номенклатура, СУММА(ОстаткиТоваров2.Количество) КАК Количество ИЗ РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров2 ПО ОстаткиТоваров.Период <= ОстаткиТоваров2.Период И ОстаткиТоваров2.Активность И ОстаткиТоваров2.Количество > 0 И (ОстаткиТоваров2.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)) И ОстаткиТоваров2.Номенклатура = &Номенклатура ГДЕ ОстаткиТоваров.Активность И ОстаткиТоваров.Количество > 0 И ОстаткиТоваров.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И ОстаткиТоваров.Номенклатура = &Номенклатура СГРУППИРОВАТЬ ПО ОстаткиТоваров.Период, ОстаткиТоваров.Номенклатура ИМЕЮЩИЕ СУММА(ОстаткиТоваров2.Количество) >= 100000 УПОРЯДОЧИТЬ ПО Период УБЫВ |
|||
34
max1c2011
29.04.19
✎
11:41
|
(33)спасибо! это что то
|
|||
35
Simod
29.04.19
✎
11:44
|
(30) Пример из (23) представляет чисто академический интерес. На реальных базах, такой запрос может повесить сервер. Это вариация на тему "Нарастающие итоги". Посмотри:
http://catalog.mista.ru/public/201526/ http://catalog.mista.ru/public/262300/ |
|||
36
max1c2011
29.04.19
✎
11:53
|
(35)хм..да. понятно
|
|||
37
Жан Пердежон
29.04.19
✎
19:17
|
(32) внезапно стало можно, и накопленный итог уже норм считается?)
(33) номенклатуру везде в связи добавить более общая задача (для языка запросов, тоже решаемая): когда есть список документов расхода/прихода, запросом получить какие расходники какие поступления спишут по lifo (fifo) |
|||
38
Garykom
гуру
29.04.19
✎
21:16
|
(37) >внезапно стало можно
Реально применимо на реальных данных? Нельзя. |
|||
39
runoff_runoff
29.04.19
✎
21:28
|
запрос в СКД и ВычислитьВыражение()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |