# `Sp_MaterialsPurchaseStoreVirtual` (procedure)


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

## Parameters

| # | Mode | Name | Type |
|---|---|---|---|
| 1 | IN | `sGuid` | `varchar(4000)` |
| 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_MaterialsPurchaseStoreVirtual`'`._

## Narrative

**Business context:** 采购管理 → 采购订单 / 仓库管理 → 虚拟库存 — refreshes the on-order (虚拟入库) projection that `mitmaterialsstorevirtual` maintains for a purchase order. The virtual store tracks "已下单未入库" quantities so MRP/stock checks can reserve against the still-open purchase commitment.

**What it does:** Takes a comma-delimited `sGuid` of `PurPurchaseOrderMaster.sId` values, materialises them into temp table `p_t_sId`, deletes the existing `mitmaterialsstorevirtual` rows for those bill ids (scoped by `sBrId`/`sSuId`), then re-inserts one row per `purpurchaseorderslave` where `bInStoreComplete=0`, carrying the outstanding `dAuxiliaryQty - dInStoreAuxiliaryQty` and `dMaterialsQty - dInStoreQty` from the slave plus master metadata (`sBillNo`, `sFormId`). Effectively a "delete + rebuild" for one purchase order.

**Invocation:** Chained from `Sp_Calc_sPod` (采购订单 审核/反审核), `Sp_Calc_sPis` (采购入库 calc), `Sp_Bill_Force_Complete` (强制完结), and `Sp_Bill_Force_Complete_copy1`. xly-src ships `script/标版/30100101/Sp_MaterialsPurchaseStoreVirtual.sql` as the install script. No direct UI button — always invoked as a side-effect of upstream PO/入库 lifecycle events.
