# `Sp_Manufacture_BillComplete` (procedure) > @author:qmj @date:20210607 封存 @describe iFlag 标志,1 完工,0 取消完工 - **Type:** PROCEDURE - **Deterministic:** NO - **SQL data access:** CONTAINS SQL ## Parameters | # | Mode | Name | Type | |---|---|---|---| | 1 | IN | `sGuid` | `varchar(1000)` | | 2 | IN | `sMakePerson` | `varchar(100)` | | 3 | IN | `iFlag` | `int` | | 4 | IN | `sLoginId` | `varchar(100)` | | 5 | IN | `sBrId` | `varchar(100)` | | 6 | IN | `sSuId` | `varchar(100)` | | 7 | OUT | `sReturn` | `varchar(1000)` | | 8 | OUT | `sCode` | `int` | ## Body _Body is not pre-cached. To inspect: `mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDURE `Sp_Manufacture_BillComplete`'`._ ## Narrative **Business context:** 生产管理 → 生产计划 → 主计划 — 整单完工 / 取消整单完工 toggle. Marks an entire 主计划 (`mftproductionplan`) as complete and cascades to its 机台计划从表 and the parent 工单. Author comment marks the proc 封存 (sealed / archived) as of 2021-06-07. **What it does:** With `iFlag=1` (完工): `UPDATE mftproductionplanslave` set `sState='5'`, `iComplete=1` for all rows under the same `sWorkOrderId` as the main plan `sGuid`; `UPDATE mftproductionplan` set `sState='6'` on `sId=sGuid`; `UPDATE mftworkordermaster.bBillComplete=1` for the linked 工单 via `INNER JOIN mftproductionplan`. With `iFlag=0` (取消完工): re-evaluates `mftworkordermaster.bBillComplete` against `viw_mftworkorder` aggregates (`dProductQty` vs `dProductInStoreQty` and vs `dDeliverQty`) and only clears it when actuals fall short of plan, writing an audit trail into `sCompletePerson`. **Invocation:** Status: appears orphaned. Author comment marks it 封存. No `gdsmodule.sProcName` hook, no form-master binding, no other-routine reference. xly-src ships `script/标版/30100101/Sp_Manufacture_BillComplete.sql` (install script) — preserved for reference but the live UI presumably uses a successor flow. Calc-style signature `(sGuid, sMakePerson, iFlag, sLoginId, sBrId, sSuId, OUT sReturn, OUT sCode)` would normally bind via `gdsmodule.sProcName` on the 主计划 form's 审核 slot — that binding is absent.