Sp_afterSave_sDgda.md 2.37 KB

Sp_afterSave_sDgda (procedure)

材料送货单单据保存后反写数量

  • Type: PROCEDURE
  • Deterministic: NO
  • SQL data access: CONTAINS SQL

Parameters

# Mode Name Type
1 IN sGuid varchar(2000)
2 IN sBrId varchar(100)
3 IN sSuId varchar(100)
4 OUT sCode int
5 OUT sReturn varchar(4000)

Body

Body is not pre-cached. To inspect: mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDURESpafterSave_sDgda'._

Narrative

Business context: 材料送货单 (materials-delivery note) — outlier in the historic Sp_afterSave_s<Code> family. Unlike its thin-wrapper siblings, this one inlines the reverse-write logic directly instead of delegating to Sp_saveReturn_sDgda (companion was removed or renamed). The work it does is the same: after a materials-delivery note is saved, the proc syncs the upstream 送货通知 row's dDeliverQty/dMaterialsDeliverQty to the SUM of all related 送货单 detail rows and renumbers the line numbers.

What it does: Builds three dynamic UPDATE statements in p_sMasterSql, then splits by ; and PREPARE/EXECUTEs each: (1) UPDATE saldelivernotifyslave SET dDeliverQty / dMaterialsDeliverQty = SUM(non-invalid saldelivergoodsslave qty grouped by sSrcSlaveId) for the notify-rows referenced by the saved delivery; (2) UPDATE saldelivergoodsslave SET iDeliverLineNo = iIncrement % 1000000 to renumber lines on the saved delivery; (3) UPDATE saldelivergoodsslave SET dReturnQty = |SUM(red-strike rows by sMinusSrcSlaveId)| to write back 红冲 (red-strike) reversals; and a fourth block updating mitmaterialsstorebarcode.dReturnQty/dReturnMaterialsQty from salrejectgoodsmaster aggregates.

Invocation: Status: appears orphaned. No caller found in any channel (gdsmodule.sSaveProName/sCalcProName/sProcName, form-master, other routines, xly-src grep) — same decommissioned-legacy condition as the rest of the Sp_afterSave_* family; production reverse-write for delivery notes flows through Sp_Check_sDgd instead. Candidate for maintainer audit.

Caveats: builds and executes raw dynamic SQL via PREPARE/EXECUTE, splitting on ; — fragile against any literal ; inside the SQL (none present today but no escaping); JOIN-against-self pattern means the proc can be expensive on large saldelivergoodsslave tables.