Б>Для ускорения можно (нужно?) хранить промежуточные результаты (например, на конец месяцы/недели/дня и т.п.). Но...
да, нужно иметь промежуточные предрассчитанные результаты, других вариантов нет.
остатки на произвольную дату считаются так — берется ближайший предрассчитанный итог и по документам от него до нужного момента считаются обороты и результаты агрегируются.
при грамотном подборе периода хранения предрасчитанных итогов, посчитать обороты в интервале обычно довольно быстро.
Б>Во-первых эти промежуточные результаты нужно обновлять при каждом приходе/расходе.
да, но не все. приход/расход обычно вводятся в последний период, а для оперативного учета даже почти в реалтайме, это значит что
при вводе текущих операций обновлять ничего не надо, кроме предрасчитанных текущих остатков, но опять же по единичным позициям это быстро.
Б>Во-вторых, движение товаров может быть введено задним числом. Придется пересчитывать промежуточные итоги сразу за несколько периодов (тоже долго).
может, но это существенно реже чем ввод оперативных данных.
и пересчет идет обычно относительно небольшого количества конкретных позиций, что также ускоряет процесс до приемлемых времен.
Б>Вроде, задача достаточно типовая. Например, в 1С решается с помощью "регистров накоплений" — структуры, созданной специально для этого.
по сути и это и есть предрассчитанные остатки/итоги.
Б>Как обычно решаются такие задачи? Б>Существует ли поддержка со стороны БД?
в БД есть материализованные вью, возможно их можно использовать для поддержки актуальности промежуточных итогов.
конкретно их не использовал, у нас с уровня приложения производился пересчет при корректировках задним числом.