日期:2014-05-17  浏览次数:20532 次

能否通过触发器实现满足某个条件时,阻止审核单据?
如题,比如,领料单单身有两个栏位A、B,当A或B的值为空时,不允许审核单据,并且提示信息,只有当A,B有具体值时才可以审核(注,无系统源码,才想这样的下三烂手段)

------解决方案--------------------
引用:
Quote: 引用:

我通过如下代码基本能实现我的需求

select * from sysobjects where type = 'TR';
exec sp_helptext 'tr_test_update'

create  trigger tr_test_update on PURTA
for update
as 
if exists(select * from inserted left join PURTB on 
inserted.单别=PURTB.单别 and inserted.单号=PURTB.单号 where A='' or B='')
begin
raiserror('“参考单别”或“参考单号”不能为空!',16,1)
rollback
end



但同时引发出另一个问题困扰我,如果是修改单据,某一行要控制的“参考单别”或“参考单号”漏写,则也会提示 '“参考单别”或“参考单号”不能为空!',造成修改后的整张单据都不能保存,必须要放弃整张单据,重新来修改。


哦 这个单据审核操作也是update操作是吧,那就和普通的update操作,没区别,所以不管是审核,还是更新,都会报错了。

如果在操作的时候,能区分审核,还是更新操作,就好了



系统单据的审核,在后台数据库就是有单据的单头档,和单身档两个表,各有一个审核码的字段,默认为‘ N ’,审核之后就都更新为‘ Y ’

哦 ,那就在你的update触发器中,再加个判断:

create  trigger tr_test_update on PURTA
for update
as 
    if  update(审核码)--这个就是审核
    begin
        if exists(select * from inserted left join PURTB on 
           inserted.单别=PURTB.单别 and inserted.单号=PURTB.单号 where A='' or B='')
           
begin
raiserror('“参考单别”或“参考单号”不能为空!',16,1)
rollback
end
end
go