Sp_System_MaterialsCost.md 2.6 KB

Sp_System_MaterialsCost (procedure)

@author:杨恒林 @date:20210521 封存 @describe:全月加权计算价格后 期初金额 + 采购入库金额+期它入库金额/ 期初数量 + 采购入库金额+期它入库金额 更新到其它各单据 bUpdate = 0:第一次分摊,分切单主表分摊到从表。 第二次正常分摊

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

Parameters

# Mode Name Type
1 IN sProInParam varchar(10000)
2 IN iSecond int
3 IN sMakePerson varchar(100)
4 IN sBrId varchar(100)
5 IN sSuId varchar(100)
6 OUT sReturn varchar(4000)
7 OUT sCode int

Body

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

Narrative

Business context: 成本核算 / 全月加权材料价格计算 — per the procedure COMMENT (杨恒林, 2021-05-21): full-month weighted-average price = (期初金额 + 采购入库金额 + 其它入库金额) / (期初数量 + 采购入库数量 + 其它入库数量). Computes the period's material weighted price, writes it into the materials-cost ledger, and pushes the price back into each consuming bill so downstream calculations (产品成本, 工单成本) work off a single canonical 材料价 per period. iSecond flag controls first-pass (master-to-slave price seed) vs subsequent reallocation.

What it does: Validates the sProInParam JSON of selected sysaccountperiod ids. For each period: reads sPeriodId, gathers prior-period balance via Sp_MaterialsCarryforward, builds the weighted price across mitmaterialspurchaseinslave (采购入库), and other inbound flows, then upserts accmaterialsstore (materials cost ledger) and Sp_EleMaterialsStock temp; deletes and rebuilds mitmaterialsstoreadjustmoneymaster/slave (adjustment journals) when prices change; loops through 分切单 (mitmaterialscutmaster) to re-spread cost; calls SP_Sis_GetMaxNo for adjustment bill numbers; finally updates sysaccountperiod flags.

Invocation: Called from Sp_System_ProductionCost, Sp_System_ProductionCost_new, and Sp_System_ProductionCost24222 (production-cost runs need materials priced first). No direct UI binding; reached transitively when the user clicks 生产成本计算 on the 月度成本 grid. Install script script/标版/30100101/cost/Sp_System_MaterialsCost.sql. Body is 65K chars — most of the bulk is the multi-stage temp-table assembly for the weighted-price spread.