Hi,
In Odoo Online, you cannot fully automate a stock movement report with opening, in, out, and closing balances. You can use the Inventory Valuation report for opening and closing balances and the Stock Moves report (Pivot view) for in/out movements. With Odoo Studio, you can add fields to separate incoming and outgoing moves, but full automation isn’t possible. The practical approach is to export both reports and calculate balances in Excel. Fully automated reporting requires a custom module on Odoo.sh or on-premise.
Option 1: Use the Inventory Valuation Report (Available in Odoo Enterprise)
Go to Inventory → Reporting → Inventory Valuation.
Set your Start Date and End Date in the filters (by adjusting the date range).
The report already shows the On Hand Quantity (closing balance) for each product.
You can use the Group By → Product to summarize quantities.

Limitation:
It won’t show “Opening,” “In,” and “Out” separately — it only gives the current valuation or closing balance.
Option 2: Use Stock Moves with Studio Customization
Go to Inventory → Reporting → Moves.
Use filters:
Date ≥ Start Date
Date ≤ End Date
Group by Product.
Add a Pivot View, where:
“Done Quantity” (quantity_done) shows total movement.
“To” locations can represent Incoming, and “From” locations represent Outgoing.

You can use Odoo Studio to add:
A computed field to differentiate In vs Out moves based on the source/destination location.
Another computed field to calculate the Opening Balance (using total up to Start Date).
Limitation:
You can’t do a full balance calculation directly without code, but this setup lets you manually export data to Excel and compute balances there.
Also, check the Move Analysis Report
Hope it helps