关于直接在SQL中更新Microsoft GP的Last_Originating_Cost字段的安全性问询
直接更新Microsoft GP的Last_Originating_Cost字段的风险与验证
直接更新IV00103表的Last_Originating_Cost字段,一般不会影响已存在的采购订单(PO)或已完成的采购记录——因为现有PO的价格通常在创建时就固化到对应的PO表(比如POP10100)中,不会实时读取IV00103的这个字段。但你仍需要注意以下几个关键风险:
潜在风险点
- 隐藏的字段关联:虽然该字段看似独立,但Microsoft GP的部分核心功能或自定义扩展可能依赖它。比如:
- 某些库存估值报表、供应商成本分析报表可能会调用这个字段
- SalesPad的自定义逻辑如果有读取该字段做默认价之外的计算,可能受影响
- 数据一致性问题:直接写SQL更新会绕过GP的业务校验逻辑,可能导致
Last_Originating_Cost与同表的CURRCOST、UNITCOST等字段数据不一致,部分GP模块可能依赖这些字段的联动更新规则 - 审计缺失:手动更新不会生成GP系统自带的价格变更审计日志,后续追溯价格变动历史会比较麻烦
批量更新的安全做法
针对50-1000个物料的批量更新,不建议写硬编码的单条UPDATE语句,推荐更可控的方式:
- 先创建临时表,导入供应商提供的最新价格数据(包含
VENDORID、ITEMNMBR、NEW_COST三列) - 用关联更新语句执行批量操作,示例:
UPDATE iv SET iv.Last_Originating_Cost = temp.NEW_COST FROM [WAREC].[dbo].[IV00103] iv JOIN #TempVendorPrices temp ON iv.VENDORID = temp.VENDORID AND iv.ITEMNMBR = temp.ITEMNMBR - 执行更新前,务必先运行SELECT语句验证匹配的记录是否完全符合预期:
SELECT iv.VENDORID, iv.ITEMNMBR, iv.Last_Originating_Cost, temp.NEW_COST FROM [WAREC].[dbo].[IV00103] iv JOIN #TempVendorPrices temp ON iv.VENDORID = temp.VENDORID AND iv.ITEMNMBR = temp.ITEMNMBR
必做的验证步骤
更新前一定要在测试环境先验证:
- 打开几个已存在的PO,确认它们的单价没有被修改
- 在SalesPad中创建新PO,确认目标物料的默认价格已更新为新值
- 检查GP的库存成本报表、供应商价格列表,确认数据无异常
内容的提问来源于stack exchange,提问作者Michael Fever
相关产品推荐
相关产品推荐

