? ? ? 前不久有KIS旗艦版的客戶反饋給我,他們在禁用物料時在BOM維護界面不能直觀的看到是什么原因反使用BOM,每次都需要去物料信息查看物料狀態(tài)才弄清楚是物料禁用了。問我有沒有快捷的辦法不用這么麻煩。? ? ? 經(jīng)過一番研究以后順利實現(xiàn)這個客戶的需求,現(xiàn)將解決分享一下:? ? ? 1、打開【客戶端工具包】-【輔助工具】-【單據(jù)自定義】,使用具有操作權限的用戶登錄后打開BOM。
2、在BOM中增加【單據(jù)頭字段】,將其名稱修改為“物料使用狀態(tài)”,同時指定默認值為“使用”。
此外,為防止誤操作,可將該字段設置為在單據(jù)錄入和修改時不可見。
3、在SSMS控制臺修改t_ICItem視圖中的觸發(fā)器
增加以下代碼:
BEGIN
-- 根據(jù) inserted 表中 fdeleted 的值更新 icbom 表的相關字段
UPDATE icbom
SET
FHeadSelfZ0134 = CASE
WHEN i.fdeleted = 1 THEN '禁用'
ELSE '使用'
END,
FUseStatus? ? ?= CASE
WHEN i.fdeleted = 1 THEN 1073
ELSE icbom.FUseStatus -- 保持原值不變
END
FROM icbom
INNER JOIN inserted i ON icbom.fitemid = i.fitemid;
END;?
最終實現(xiàn)的效果如下:
物料禁用前BOM狀態(tài)為使用,物料使用狀態(tài)為“使用”
物料禁用后BOM狀態(tài)為未使用,物料使用狀態(tài)為“禁用”
在t_ICItem修改觸發(fā)器控制的后期物料的禁用和反禁用同步更新BOM表頭的“物料使用狀態(tài)”,歷史數(shù)據(jù)還需要用SQL語句更新一下,附上語句:
UPDATE icbom
SET FHeadSelfZ0134 = '禁用',FUseStatus=1073
FROM icbom a
INNER JOIN t_ICItem b ON a.fitemid = b.fitemid
WHERE b.fdeleted = 1;
UPDATE icbom
SET FHeadSelfZ0134 = '使用'
FROM icbom a
INNER JOIN t_ICItem b ON a.fitemid = b.fitemid
WHERE b.fdeleted = 0;?
? ? ? 通過這樣的修改,當對物料進行禁用和反禁用操作時,即使該字段在單據(jù)錄入時不可見,但在數(shù)據(jù)庫層面的相關邏輯能夠根據(jù)這個字段值的變化而執(zhí)行相應的操作。例如在上述代碼中,當物料被禁用或者反禁用時,相關聯(lián)表中的狀態(tài)也會相應更新,從而實現(xiàn)整個業(yè)務流程中數(shù)據(jù)的一致性和完整性。并且由于在BOM中對字段的設置,也避免了用戶在單據(jù)錄入時的誤操作,保證了數(shù)據(jù)的準確性。
該文章在 2024/12/20 11:51:17 編輯過