首页 > 代码库 > 1-1SBO学习心得(存储过程应用)

1-1SBO学习心得(存储过程应用)

SBO_SP_TransactionNotification这个存储过程主要应用于页面操作(数据库操作)的放行和阻止。当返回0时放行(commit),当返回1时阻止(回滚)。

--    ADD    YOUR    CODE    HEREif @object_type=22 and @transaction_type in (A,U)        /*开始-判定是否超过价格清单中的价格*/        BEGIN    declare @visorder nvarchar        set @visorder=(select top 1 T1.visorder+1 from --查找行号                        OPOR T0  INNER JOIN POR1 T1 ON T0.DocEntry = T1.DocEntry --订单主表和从表关联                         where (T1.DocEntry=@list_of_cols_val_tab_del) --条件1,从表主键等于传进来的主键值                        AND ISNULL(T0.U_owtm,-1)<>1 --条件2,非审批提交                        and (T1.INMPRICE+T1.LineVat/T1.Quantity --条件3,税后价格                        >ISNULL((select T2.Price from ITM1 T2 where T2.PriceList=(SELECT TOP 1 T3.ListNum FROM dbo.OCRD T3 WHERE T3.CardCode=T0.CardCode) and T1.ItemCode=T2.ItemCode),0))--价格清单中的价格                                            )        if @visorder is not null --如果不为空证明存在这种数据,返回行号        begin            select @error=1            select @error_message=N+@visorder+N行物料的价格超过允许的范围        end    end    /*结束-判断是否超过价格清单中的价格*/

我们在add your code here部分加入此段代码可以实现如下功能:如果采购订单中任何一行物料的价格高于为供应商预设的价格,则阻止并报错。

其中 if @object_type=22and @transaction_type in (A‘,U)
用作判断(1)操作来自于哪个数据对象,22代表采购订单;(2)是何种操作,A和U代码新增或更新。也就是说,当对采购订单进行更新或新增操作时会触发下面的代码。
SQL逻辑:将采购订单主表和从表关联,取出从表中的行号。当行号不为空证明超价格限制的行,报错;为空证明无此类行,通过。
条件1:找到被操作的采购订单记录;
     条件2:非审批状态;
     条件3:物料行的税后价格大于供应商预设的价格。

错误信息:
向S001供应商购买A0001物料,预设价格未10RMB,订单上填写的税后价格未11.7元,阻止。