|
Рассчитать начальные остатки в запросе (как соединить таблицы ?) | ☑ | ||
---|---|---|---|---|
0
kassbar
13.04.20
✎
23:20
|
Привет, страдаю над запросом для отчета, коллеги, может есть светлые мысли ?
Вот выжимка из условий: Есть таблица 1, остатки на начало периода (01.04.2020) Период Товар Нач. остаток 01.04 А 100 01.04 В 200 Есть таблица 2, обороты за период (01.04.2020 - 31.04.2020) Период Товар Приход Расход 01.04 В 100 02.04 В 50 Необходимо получить запросом итоговую таблицу: Период Товар Нач. остаток Приход Расход 01.04 А 100 0 0 01.04 В 200 100 0 02.04 В 300 0 50 Возникла сложность в расчете начальных остатков. |
|||
1
NcSteel
13.04.20
✎
23:31
|
Левое соединение, а вообще для этого РН придуманы и виртуальная таблица остатки и обороты
|
|||
2
kassbar
14.04.20
✎
00:00
|
вирт. таблица не подойдет, у меня остатки получаются расчетным путем, в этом вся фишка.
можно развернуть мысль про левое соединение подробнее ? |
|||
3
Ёпрст
14.04.20
✎
01:18
|
(0) запрос к вт остатки + объединить все к запросу оборотов. Усё
|
|||
4
Ёпрст
14.04.20
✎
01:21
|
Будет так:
Выбрать товар, начост, 0 как приход, 0 как расход из вт останки Объеденить все Выбрать товар,0, приход,расход из вт обороты Потом все это в обертку, сворачиваешь по товару и вычисляешь там же коност = начост+приход- расход |
|||
5
kassbar
14.04.20
✎
09:02
|
(4) пробовал, нач. остаток для В на 02.04.2020 не получить
|
|||
6
Ёпрст
14.04.20
✎
10:18
|
(5) нам отсюда не видно, как и чего ты получаешь
|
|||
7
kassbar
14.04.20
✎
10:39
|
(6) а чего именно тебе не хватает, чтобы увидеть результат объединения и группировки строк по товару В ?
|
|||
8
hhhh
14.04.20
✎
10:57
|
(7) а как он увидит результат? Пока же информации 0. Только философские рассуждения.
|
|||
9
kassbar
14.04.20
✎
11:06
|
(8) хм, ну ок, следуя инструкции из (4):
результат объединения (оставим для наглядности только товар В): период товар нач. ост приход расход 01.04 В 200 0 0 01.04 В 0 100 0 02.04 В 0 0 50 результат группировки по товару В и периоду: период товар нач. ост приход расход 01.04 В 200 100 0 02.04 В 0 0 50 на 02.04 нач остаток = 0, а нужен 300. Я например вижу результат сразу, не рисуя этих таблиц.. |
|||
10
hhhh
14.04.20
✎
11:34
|
(9) а почему вы решили что группировка должна так работать? Группировка же тупо суммирует и всё. Чтобы работало нормально, вам надо или виртуальную таблицу, или делать отчет на скд. Там это дело специально заточено, поля остатков обрабатываются по другому.
|
|||
11
kassbar
14.04.20
✎
11:51
|
(10) Это же не моя идея, а (4). Я знаю что так не будет работать.
Мне надо сначала подготовить таблицу, которую я потом передам в СКД как источник данных и там уже назначу нужные роли полям и т.д. Вирт. таблицу не могу использовать, т.к. мне нужны остатки с отбором по значению реквизита-регистратора, и я их получаю отдельно на начало периода. Затем мне их надо состыковать с оборотами и получить остатки расчетным путем. Если весь этот контекст задачи отбросить, то возвращаемся к вопросу (0) |
|||
12
Ёпрст
14.04.20
✎
11:54
|
(11)
если не хочешь скд, или постобработку в (4) Тогда так Остатки на каждый день в запросе. (40) пост |
|||
13
kassbar
14.04.20
✎
11:57
|
(12) чето не открывает
|
|||
14
Ёпрст
14.04.20
✎
11:58
|
||||
15
kassbar
14.04.20
✎
12:06
|
остатки на каждый календарный день периода не нужны, нужно получить остатки на начало периода, конец периода и на каждую дату где есть оборот.
ладно, буду через постобработку в компоновке результата пилить, я вообщем так и предполагал что простого способа решения нет всем спасибо |
|||
16
Ёпрст
14.04.20
✎
12:24
|
(15) если не нужны за каждый день, а только где есть обороты, то достаточно запроса в вт ОстанкиИОбороты и всё. С группировкаой по периоду
|
|||
17
d4rkmesa
14.04.20
✎
12:36
|
(15) Можно сделать, принцип такой же, как в остатках на каждый день, таблицу периодов только формируете из оборотов, округляя даты до суток(или чего там). http://www.gilev.ru/остатки-на-каждый-день/
Для начального остатка формула будет примерно: СУММА(ВЫБОР КОГДА Движения.Период = &НачалоПериода И ДНИ.Период = &НачалоПериода ТОГДА Движения.КоличествоНачальныйОстаток КОГДА Движения.Период = &НачалоПериода ТОГДА Движения.КоличествоНачальныйОстаток + Движения.КоличествоОборот ИНАЧЕ ВЫБОР КОГДА Движения.Период < ДНИ.Период ТОГДА Движения.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ) КАК КоличествоНачальныйОстаток |
|||
18
kassbar
04.05.20
✎
23:59
|
в итоге сделал так (все в запросе):
получил все обороты за период, дополнил начальными остатками. соединил их с собой по Период < Период и сгруппировал, чтобы получить начальный остаток как оборот нарастающим итогом. дополнил 2 строками - начальный остаток и конечный остаток, раздал нужные роли. в итоге СКД скомпоновала так, как мне и было нужно. похожая задача кстати обсуждалась тут https://forum.infostart.ru/forum9/topic226625/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |