Stock Transfer & Inter-Branch Movements: Mastering Godown, Depot, and Branch Transfers Without Breaking the General Ledger
How delayed receipts, in-transit valuation, and inter-branch billing cause G/L mismatches – and what SAP STO, Oracle Inter-Org, Odoo, and custom ERPs must get right
Why a Simple Stock Transfer Can Destroy Your General Ledger
Moving inventory from one godown to another sounds trivial: just debit the receiving location and credit the sending location, right? Wrong. In enterprise reality, a stock transfer involves physical movement, financial valuation, in-transit risk, inter-branch billing, and tax implications. A single missing receipt confirmation can cause stock to appear simultaneously at both branches, inflating total inventory and misstating the balance sheet.
*Aggregated from 150+ ERP implementation audits (2023-2026)
Transfer Types and Their Hidden Accounting Shadows
Not all transfers are equal. The accounting impact depends on whether the transfer is intra-company (same legal entity, different storage locations) or inter-company (different legal entities, each with its own books). The choice of transfer method directly affects G/L postings, tax treatment, and inter-branch billing.
| Transfer Type | Example | Inventory Accounting | Financial Impact | Tax Considerations |
|---|---|---|---|---|
| Intra-Company, One-Step | Warehouse A to Warehouse B (same legal entity) | Simple stock move; no G/L entry except maybe cost center change | No financial P&L impact; just location rebalancing | No GST/VAT unless goods cross state borders (India IGST) |
| Intra-Company, Two-Step (In Transit) | Factory to regional depot, 3 days transit | Goods in transit account debited; receipt credits it | Transit stock appears on balance sheet; freight may be capitalized | Tax point depends on delivery terms (ex-works vs. FOB) |
| Inter-Company (STO) | Legal entity A sells to legal entity B (same group) | Sales invoice from A; purchase receipt at B; inter-company profit elimination | Revenue at A, COGS at A; inventory at B; consolidated P&L must eliminate unrealized profit | Full VAT/GST invoice; transfer pricing rules apply; arm's length principle |
| Inter-Branch (same legal entity, separate registrations) | Branch in State1 to Branch in State2 (India GST scenario) | Stock transfer with deemed supply; tax invoice required | No P&L, but balance sheet inventory moves; tax liability arises on inter-state movement | IGST charged on transfer; input credit available to receiving branch |
Transit Accounting: The "Black Hole" Between Shipping and Receiving
When goods leave the sending location but haven't arrived at the destination, they exist in a state of in-transit inventory. If the system immediately reduces sending location stock but the receiving location doesn't record the receipt until days later, total company-wide inventory appears to drop—a phantom shortage. Worse, if the sending location fails to issue stock, the goods are counted twice.
Transit Accounting in Different ERPs
- SAP: Using two-step stock transport order (STO) with delivery, the goods issue posts to a transit stock account (movement type 641/647). Goods receipt (MIGO) clears it.
- Oracle Fusion: Inter-org transfer with in-transit enabled creates a "Intransit Inventory" entry in
INV_MATERIAL_TXNS. The receiving org's receipt completes the transfer. - Odoo: Routes with "Pick + Pack + Ship" can generate a transfer picking; the intermediate "Transit" location (a virtual location) holds stock until receipt. No dedicated transit GL account unless customized.
- Custom SQL Server ERP: The
sp_TransferStockprocedure must insert a row intoTransitInventorytable and later asp_ReceiveTransfermust clear it. If the receiving branch never calls the receive procedure (e.g., due to a lost UI action), stock remains stuck in transit forever.
Inter-Branch Billing & Transfer Pricing: The Profit Illusion
When branches operate as profit centers, the sending branch may "bill" the receiving branch at a price above cost (e.g., cost + 10%). This creates inter-branch profit on the sender's books, but the inventory at the receiving branch is now inflated. On consolidation, this unrealized profit must be eliminated; otherwise, the group's profit is overstated and inventory is overvalued.
Sample Inter-Branch Transfer with Markup
Branch A (sending) purchases goods at $50/unit. It transfers 200 units to Branch B at a transfer price of $55/unit. The accounting entries:
Now, from the group perspective, the inventory is worth $10,000 (original cost), not $11,000. If the group doesn't eliminate the $1,000 profit, the balance sheet shows inflated inventory and the P&L shows profit on an internal transfer—misleading stakeholders and tax authorities.
CXGP or group reporting) must eliminate inter-company profit. Many custom ERPs completely miss this elimination, causing audit failures.
Freight and Cost Allocation: Who Bears the Carriage?
Freight charges for stock transfers can either be capitalized into inventory cost or expensed as distribution cost. The decision depends on accounting policies and the ERP's ability to allocate freight proportionally. A common G/L break occurs when freight is posted to a separate expense account but the inventory valuation remains at the base transfer cost, undervaluing stock.
Freight Capitalization Example with Sample Data
Transfer of 500 units at $20 each (total $10,000). Freight cost for the trip: $800. The freight is to be absorbed into inventory.
| Step | Account | Debit | Credit |
|---|---|---|---|
| 1. Issue from Sending Location | Inventory - Depot A | $10,000 | |
| Goods in Transit | $10,000 | ||
| 2. Freight Invoice Received | Freight Clearing Account | $800 | |
| Accounts Payable | $800 | ||
| 3. Receipt at Depot B (with freight absorption) | Inventory - Depot B | $10,800 | |
| Goods in Transit | $10,000 | ||
| Freight Clearing Account | $800 |
If the ERP only moves the $10,000 and leaves the $800 freight in a suspense account, the inventory is undervalued by $800. The MIS team will later scramble to allocate it manually.
ERP Showdown: How Top Systems Handle Stock Transfers
| Feature | SAP S/4HANA (STO) | Oracle Fusion | Odoo | Dynamics 365 | Custom SQL Server |
|---|---|---|---|---|---|
| Transfer Mechanism | Stock Transport Order (ME21N) with delivery | Inter-Organization Transfer (INV) | Replenishment routes, push/pull rules | Transfer Order (Inventory Management) | Custom tables + stored procedures |
| In-Transit Visibility | Transit stock account (movement type 641) | Intransit Inventory in INV_MATERIAL_TXNS | Virtual Transit location (no GL by default) | In-transit warehouse concept | TransitInventory table; prone to orphan records |
| Inter-Company Billing | Automatic via STO (IV billing) | Intercompany Invoicing (IR/ISO) | Requires separate sales/purchase orders | Intercompany trade agreement | Manual or separate module; often missed |
| Freight Allocation | Planned delivery costs (condition type) | Landed Cost Management | Landed costs app (stock.landed.cost) | Landed cost module | Often hard-coded or absent |
| Transfer Pricing | Condition records + pricing procedure | Transfer price rules in Cost Management | Manual price on transfer picking | Intercompany pricing | Custom logic; risky |
Inter-Branch Transfer Lifecycle – Visual Workflow
Real-Life Scenarios with Sample Data – When Theory Hits Reality
Background: A manufacturing company with two depots (A and B) uses a custom SQL Server ERP. Depot A transfers 300 units of raw material to Depot B on March 1. The shipping clerk records the issue at Depot A. Depot B receives the goods on March 4, but the receiving clerk forgets to enter the transfer receipt in the system. On March 5, the production manager at Depot A realizes the material is needed back and initiates a transfer return (B to A). However, because the original receipt at B was never recorded, B's system shows zero stock of that item. The return cannot be processed without a receipt. Meanwhile, the inventory report shows the 300 units still at Depot A (since the issue was recorded but the return hasn't been logged) and zero at Depot B, but physically the goods are at Depot B. The cycle count reveals a discrepancy of 300 units at both ends.
Resolution: The DBA had to manually insert a receipt record in StockTransactions for Depot B with the correct batch and date, then process the return. A stored procedure was later updated to enforce that a transfer receipt must exist before any return from the destination location.
Data: Head Office transfers 1,000 units of finished goods to its retail branch. Cost per unit: $80. Transfer price set at cost + 20% = $96. Branch sells 600 units during the month at $130 each. Remaining 400 units are in branch stock. At month-end, the group accountant prepares consolidated financials.
Without elimination: Head Office P&L shows inter-branch profit of ($96-$80)*1000 = $16,000. Branch P&L shows sales of 600*$130=$78,000, COGS of 600*$96=$57,600, profit $20,400. Consolidated P&L would show total profit $36,400 (inflated by unrealized profit on unsold stock). Branch balance sheet shows inventory of 400*$96=$38,400, but actual group cost is $32,000 (400*$80). The $6,400 unrealized profit must be eliminated.
Correct consolidation: Eliminate inter-company sales of $96,000 and COGS of $80,000. Adjust inventory down by $6,400. Consolidated profit should be: Sales $78,000 - COGS (600*$80) $48,000 = $30,000. The $6,400 remains in inventory valuation until sold externally. Without this elimination, the group overstates profit and inventory.
Role-Based Operational Challenges – JSON Data Driven
Interactive Q&A – Stock Transfer Puzzles
Best Practices to Keep Your G/L Aligned
- Always use a Goods in Transit account for any transfer that spans more than a day. Never leave stock in a void.
- Implement transfer receipt mandatory confirmation: The system should block further transfers until the original transfer is acknowledged.
- Automate inter-company eliminations if your ERP supports consolidation. For custom ERPs, build a month-end elimination script.
- Freight capitalization rules must be consistent: Use landed cost functionality to allocate freight to inventory.
- Regularly reconcile transit accounts: Any balance in Goods in Transit older than a few days must be investigated.
- Train warehouse staff: A missing click on "Receive" can break financial statements. Simple UI/UX improvements reduce errors.

0 Comments
thanks for your comments!