|
Запрос: распределить количество по месяцам | ☑ | ||
---|---|---|---|---|
0
echo77
18.06.14
✎
19:59
|
В общем есть запрос, который возвращает выборку вида:
Месяц НадоОтгрузить Январь 2 Февраль 3 Март 5 и Количество = 3 Нужно распределить количество начиная с первого месяца таким образом, чтобы оно не превышало НадоОтгрузить в этом месяце, т.е. выборка должна получиться следующая Месяц НадоОтгрузить Отгружаем Январь 2 2 Февраль 3 1 Март 5 0 Как проще и понятнее сделать? Если что это будет в отчете на СКД |
|||
1
Fragster
гуру
18.06.14
✎
20:01
|
(0) зачем именно запросом?
|
|||
2
Fragster
гуру
18.06.14
✎
20:01
|
это же в один проход делается
|
|||
3
Wobland
18.06.14
✎
20:03
|
я бы делал циклом и не любил мозх. как-то принцип нарастающего итога здесь не применим
|
|||
4
echo77
18.06.14
✎
20:05
|
(1) Запросом, потому что отчет на СКД
|
|||
5
Wobland
18.06.14
✎
20:06
|
(4) если ты не в курсе, то СКД - это система компоновки _данных_
|
|||
6
echo77
18.06.14
✎
20:07
|
(5) в курсе
|
|||
7
Bober
18.06.14
✎
20:08
|
(4) а есть подать в скд тз?
|
|||
8
vicof
18.06.14
✎
20:09
|
Можешь в выражение ресурса свою формулу запихать, все посчитается
|
|||
9
echo77
18.06.14
✎
20:10
|
(7) можно, только какую?
Здесь я привел простой пример. На самом деле запрос строится объединением кучи запросов В отчете куча отборов |
|||
10
Wobland
18.06.14
✎
20:10
|
(8) а с этого места поподробнее, пожалуйста. у ТС есть упорядочивание
|
|||
11
vicof
18.06.14
✎
20:12
|
(10) ВычислитьВыражение(), и параметрами можно получать следующее или предыдущее значение группировки. Отнимать, ВЫБОР КОГДА для сравнения с 0, ну и все, наверное
|
|||
12
Wobland
18.06.14
✎
20:13
|
(11) пасиба, почитаю на досуге
|
|||
13
echo77
18.06.14
✎
20:17
|
(11) пойму перечитывать свои статьи по СКД...
|
|||
14
echo77
18.06.14
✎
20:17
|
(13) пойду
|
|||
15
echo77
18.06.14
✎
20:17
|
(13) *пойду
|
|||
16
echo77
18.06.14
✎
20:28
|
Что-то не получается через ВычислитьВыражение()
|
|||
17
vicof
18.06.14
✎
21:05
|
Это только под сильный алкоголь. У меня тоже не с первого раза получилось. Нужно просто внимательно справку к функции читать, там более-менее понятно для ванг написано.
|
|||
18
echo77
18.06.14
✎
21:07
|
Как пользоваться ВычислитьВыражение() я знаю.
Не понятно как учесть в вычислениях ранее распределенные суммы |
|||
19
vicof
18.06.14
✎
22:10
|
||||
20
Bober
18.06.14
✎
22:58
|
(18) пример:
ВЫБОР КОГДА ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") Есть null Тогда ВЫБОР КОГДА Количество > &КРаспределению Тогда &КРаспределению Иначе Количество Конец КОГДА ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") > &КРаспределению Тогда 0 Иначе ВЫБОР КОГДА &КРаспределению - ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") > Количество Тогда Количество иначе &КРаспределению - ВычислитьВыражение("Сумма(Количество)", , , "Первая","Предыдущая") КОнец Конец |
|||
21
Kalambur
18.06.14
✎
23:22
|
ВычислитьВыражениеСГруппировкойМассив()
|
|||
22
mikeA
19.06.14
✎
00:38
|
(0) как посчитать нарастающий итог запросом ты надеюсь знаешь. после этого таблица будет
Месяц НадоОтгрузить НадоОтгрузитьИтог ОтгруженоИтог Январь 2 2 0 Февр 3 5 2 Март 5 10 5 дальше совсем просто ВЫБОР КОГДА ОтгруженоИтог >= Количество ТОГДА 0 КОГДА ОтгруженоИтог + НадоОтгрузить > Количество ТОГДА Количество - ОтгруженоИтог ИНАЧЕ НадоОтгрузить КОНЕЦ |
|||
23
DirecTwiX
19.06.14
✎
04:27
|
(22) Только после того, как запрос написал, понял, о каком итоге ты говоришь - сначала не стал всё сообщение читать)
(0) На здоровье:
:) |
|||
24
Homer
19.06.14
✎
06:45
|
(23)он не работает, взял для примера
Распределить = 7 |
|||
25
Лодырь
19.06.14
✎
06:46
|
Обычное же фифо в запросе, не?
|
|||
26
echo77
19.06.14
✎
08:13
|
(19) Спасибо, это перепечатка из моей статьи http://infostart.ru/public/267055/
Но не могу сообразить как мне это поможет |
|||
27
Лодырь
19.06.14
✎
08:16
|
(26) Можно пояснить чем задача отличается от стандартной задачи распределения количества по партиям?
|
|||
28
echo77
19.06.14
✎
08:17
|
(27) Думаю, ничем. Нужно реализовать в СКД. Попробую (22)
|
|||
29
Bober
19.06.14
✎
08:44
|
(28) а чем тебе вариант (20) не устроил?
|
|||
30
agorbunov
19.06.14
✎
09:38
|
С нарастающим итогом, все просто
ВЫБРАТЬ Т.Месяц, Т.НадоОтгрузить, &Количество КАК Количество ПОМЕСТИТЬ ТаблицаОтгрузок ИЗ &Т КАК Т ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаОтгрузок.Месяц, ТаблицаОтгрузок.НадоОтгрузить, ТаблицаОтгрузок.Количество, СУММА(ЕСТЬNULL(ОтгруженоУже.НадоОтгрузить, 0)) КАК ОтгруженоУже, ВЫБОР КОГДА СУММА(ЕСТЬNULL(ОтгруженоУже.НадоОтгрузить, 0)) > ТаблицаОтгрузок.Количество ТОГДА 0 КОГДА СУММА(ЕСТЬNULL(ОтгруженоУже.НадоОтгрузить, 0)) + ТаблицаОтгрузок.НадоОтгрузить > ТаблицаОтгрузок.Количество ТОГДА СУММА(ЕСТЬNULL(ОтгруженоУже.НадоОтгрузить, 0)) + ТаблицаОтгрузок.НадоОтгрузить - ТаблицаОтгрузок.Количество ИНАЧЕ ТаблицаОтгрузок.НадоОтгрузить КОНЕЦ КАК Отгружаем ИЗ ТаблицаОтгрузок КАК ТаблицаОтгрузок ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОтгрузок КАК ОтгруженоУже ПО ТаблицаОтгрузок.Месяц > ОтгруженоУже.Месяц СГРУППИРОВАТЬ ПО ТаблицаОтгрузок.Месяц, ТаблицаОтгрузок.НадоОтгрузить, ТаблицаОтгрузок.Количество |
|||
31
echo77
19.06.14
✎
09:58
|
(29) Пока не проверял. Сейчас буду все пробовать.
Спасибо |
|||
32
Bober
19.06.14
✎
10:19
|
(31) отпишись по результату.
|
|||
33
echo77
19.06.14
✎
10:58
|
(20) Не получается так.
Возможно проблема в том, что у меня все это дело в разрезе номенклатуры и заказов |
|||
34
Bober
19.06.14
✎
11:05
|
(33) тогда нужно указать группировку или группировать нужным образом. я же показал пример расчета по таблице из (0)
|
|||
35
echo77
19.06.14
✎
12:16
|
(22) Этот пример вполне жизнеспособен! Спасибо!
(34) Вам тоже спасибо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |