主题
应付暂估与存货核算月结不平
**样板案例。**本篇用于固化八段式写作模板,内容为脱敏后的结构示意,具体数据与截图已移除。
一、背景
某离散制造客户,U8 V15.0,上线第 4 个月。采购业务量约每月 800 张入库单,其中暂估入库占比约三成。
财务在月结时发现:应付模块的暂估余额与存货核算的暂估结存对不上,差额随月份累积扩大。
二、需求
财务要的不是「解释差异」,是月结能过、且以后不再出现。这两件事优先级不同,先解决当月过账,再治根因。
三、诊断
排查路径
- 先确认差异是单向还是双向 —— 只有应付多,还是互有多少
- 按单据逐笔比对,定位差异单据的共同特征
- 回溯这批单据的操作日志,看是否有非常规操作
定位结论
差异单据集中在两类:
| 类型 | 特征 | 占差异额 |
|---|---|---|
| A | 暂估入库后,原采购订单被修改单价 | 约 7 成 |
| B | 跨月红字回冲,回冲期间与原单期间不同 | 约 3 成 |
根因:客户为了赶月结,用了「先入库后补单价」的操作习惯。存货核算按入库时点取价,应付按发票时点取价,两边基准不一致。
四、方案
分两步走:
- 短期(当月月结) —— 定位差异单据,用调整单手工平账,附差异说明台账
- 长期(治根因) —— 关闭采购订单在暂估入库后的改价权限,改走「暂估回冲 + 重新入库」标准流程
五、配置
权限调整路径
采购管理 → 设置 → 采购选项 → 「已入库订单允许修改单价」→ 取消勾选
存货核算 → 设置 → 核算选项 → 暂估方式 → 确认为「月初回冲」核对 SQL
sql
-- 用途:比对应付暂估余额与存货核算暂估结存
-- 方言:T-SQL (SQL Server)
-- 参数:@period 会计期间 'YYYY-MM'
DECLARE @period CHAR(7) = '2026-07';
WITH ap AS (
SELECT cInvCode, SUM(iAPCost) AS ap_amt
FROM AP_Estimate_Detail -- 示意表名,实际按版本核对
WHERE cPeriod = @period
GROUP BY cInvCode
),
ia AS (
SELECT cInvCode, SUM(iCost) AS ia_amt
FROM IA_Estimate_Balance -- 示意表名
WHERE cPeriod = @period
GROUP BY cInvCode
)
SELECT
COALESCE(ap.cInvCode, ia.cInvCode) AS 存货编码,
ISNULL(ap.ap_amt, 0) AS 应付暂估,
ISNULL(ia.ia_amt, 0) AS 核算暂估,
ISNULL(ap.ap_amt, 0) - ISNULL(ia.ia_amt, 0) AS 差额
FROM ap
FULL OUTER JOIN ia ON ap.cInvCode = ia.cInvCode
WHERE ABS(ISNULL(ap.ap_amt, 0) - ISNULL(ia.ia_amt, 0)) > 0.01
ORDER BY ABS(ISNULL(ap.ap_amt, 0) - ISNULL(ia.ia_amt, 0)) DESC;Oracle 写法差异:
ISNULL→NVL,FULL OUTER JOIN语法一致,DECLARE改用绑定变量:period,字符串拼接+→||。
六、踩坑
- **别一上来就查表结构差异。**先看操作日志,业务操作习惯造成的问题占多数,改表改配置都是治标。
- **暂估方式改动有追溯影响。**从「单到回冲」改「月初回冲」,改之前必须确认历史期间已全部结账,否则重算会污染已结期间。
- **手工调整单要留台账。**审计会问,隔半年自己也会忘为什么调这一笔。
- 差异金额小于 0.01 的过滤掉,那是舍入误差,追下去浪费时间。
七、验收
- 当月月结通过,应付暂估与核算暂估差额归零
- 连续观察 2 个月结,无新增差异
- 客户采购员操作习惯已调整,改价需求走正规回冲流程
八、回顾
做对的:先解决月结通过(业务要的),再治根因(我要的)。顺序反了会被客户投诉拖进度。
做得不够的:上线时的操作规范培训只讲了「怎么做」,没讲「不这么做会怎样」。用户不知道后果,就一定会图省事。下个项目在培训环节加「反面案例」一节。
可复用:那段核对 SQL 已放进 SQL 库,后续项目上线第 2 个月就主动跑一遍,提前发现问题。