Имя: Пароль:
1C
1С v8
Рассчитать начальные остатки в запросе (как соединить таблицы ?)
, , ,
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/
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.