以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]一个普遍的核心问题,出库单入库单保存后如何更新其它单据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91532) |
-- 作者:zhangqinyun -- 发布时间:2016/10/12 19:34:00 -- [求助]一个普遍的核心问题,出库单入库单保存后如何更新其它单据 学了狐表好几年了,这个思路问题一直没找到答案。 想给自家工厂做个多人操作的ERP系统。 1.如何处理出库入库单据保存后,相关数据(采购单,销售单)的更新 2.如何保证即时库存的准确性 例如:仓库收到100个物料A,做采购入库单。 操作:1.SQL命令 保存库存明细。 2.SQL命令 在库存表 物料A行的即时库存列+100。 3.SQL命令 在采购单表 对应采购单的已入库列中+100,如果已入库数量>=采购数量,关闭采购明细。 这里我用了数据库事务回滚,保证一次执行所有数据。 但是这个方案即时库存可能还是不准确。是否要加一列期初余额,用期初余额+本期入库-本期出库=实际库存 定期来调整即时库存。 请各位大神帮帮忙,我不是专业出生,谢谢 [此贴子已经被作者于2016/10/12 19:45:53编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/12 20:40:00 -- 你的不准确具体是指什么? 如果是指产生库存数据丢失,那是代码逻辑有问题。否则使用事务的情况下一般不会出现这种情况。 如果是指库存数量变化和查询之间的不实时,这种情况基本很难避免。
|
-- 作者:zhangqinyun -- 发布时间:2016/10/12 20:44:00 -- 因为很多人都说即时库存直接加减很容易出错,需要用有效入库-有效出库来调整 |
-- 作者:有点蓝 -- 发布时间:2016/10/12 21:07:00 -- 事务和逻辑合理就不会出错。 见过的一种做法是,在相关表增加一个标志列 操作时,开启事务,在操作前先查询并更新这个标志值,表示占用状态,如果全部为可操作并更新成功,才开始进行库存操作,这样就会产生行级写锁,保证一个产品只能有一个连接进行更新。但是不影响查询,只不过查询到的只是事务开启之前的数据。 更新完库存后把标志列置为空闲状态,然后提交事务。 这种情况需要快速处理,不能有太多费时的逻辑处理,一般都是扔到存储过程中,整个事务保持在毫秒级,才不会阻塞其它并发处理。
|