比如,想建立一个规则,当销售订单没有完工的生产订单时,不准批量拉取出货单。
在数据库里写存储过程如下:
Alter TRIGGER tri_SM_ShipLine_Insert
ON SM_ShipLine
AFTER INSERT
AS
BEGIN
Declare @ID BigInt
SELECT @ID =SrcDocKey FROM Inserted
If Not Exists (
Select * From SM_ShipLine SSL
Left Outer Join MO_MO MO
On SSL.SrcDocKey=MO.SrcDoc_SrcDoc_EntityID
Where Mo.DocState=3
And MO.SrcDoc_SrcDoc_EntityID=@ID
)
Begin
Declare @Tips VarChar(500)
Set @Tips='该销售订单尚未有完工的生产订单,所以暂时还不能拉单出货!'
RAISERROR(@Tips, 16, 1)
RollBack Transaction
End
END
GO
如果是在“出货单批量生单”界面的列表里,只选取单行,那么是肯定能控制得住的。如果是本行与其它的客户销售行一起选择,也能控制得住。但是如果是本行与本行所属客户的销售行一起选择呢?那就控制不住了。它会把该客户的所有尚未有出货单的销售行都做成出货单,压根不管是否有触发器。
试举例说明吧!
有ABCD四条销售记录尚未拉取出货单。其中ABC属于客户甲,D属于客户乙。
“出货单批量生单”列表操作和结果如下:
只选A,红色惊叹号报错,有触发器里设计好的提示文本出现,不会生单
只选AD,红色惊叹号报错,有触发器里设计好的提示文本出现,一张单都不会生成
ABCD全选,没有红色惊叹号,建立了两张出货单,其中第一张为ABC,第二张为D。没有实现需求啊,怪不得要二次开发呢~~