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

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

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

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

posted on 2014-06-28 12:57  东方科技ERP  阅读(627)  评论(0)    收藏  举报

导航