# `Sp_salsalesorderVirtual` (procedure)

> 订单-虚拟库存明细


- **Type:** PROCEDURE
- **Deterministic:** NO
- **SQL data access:** CONTAINS SQL

## Parameters

| # | Mode | Name | Type |
|---|---|---|---|
| 1 | IN | `sGuids` | `longtext` |
| 2 | IN | `sBrId` | `varchar(100)` |
| 3 | IN | `sSuId` | `varchar(100)` |

## Body

_Body is not pre-cached. To inspect: `mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDURE `Sp_salsalesorderVirtual`'`._

## Narrative

**Business context:** 销售管理 → 销售订单 → 订单-虚拟库存明细 — rebuilds the order-side "virtual stock reservation" rows (`salsalesproductionordervirtual`) for a given set of 销售订单从表 ids. The virtual-stock table is the soft reservation that lets downstream warehouse views show "qty already promised but not yet 送货" against each order line.

**What it does:** Parses `sGuids` (comma-separated 从表 ids) into temp table `p_t_sId`. Deletes existing `salsalesproductionordervirtual` rows whose `sBillSlaveId` matches the input set, then re-inserts one row per slave: `INSERT INTO salsalesproductionordervirtual (sId, sBrandsId, sSubsidiaryId, iOrder, sMakePerson, sProductId, dProductQty=a.dUseStockQty, sFormId, sBillId, sBillSlaveId, sBillNo, tCreateDate=NOW())` joining `salsalesorderslave` a + `salsalesordermaster` b for rows with `dUseStockQty>0`. Finally deletes any rows where `dProductQty<=0`.

**Invocation:** Called by `Sp_Calc_sDgd`, `Sp_Calc_sDgdCL`, `Sp_Calc_sDgd_1226`, `Sp_Calc_sDgd_20250612` (the 送货单 audit-time recalculators) and `Sp_ProductionOrder_Rransmit` — these are the procedures that decide a 销售订单 line's stock-promise has changed and re-seed the virtual table. No direct form binding (the page heading 订单-虚拟库存明细 comes from a report form that queries `salsalesproductionordervirtual` directly).
