首页 > 代码库 > 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=‘22‘ and @transaction_type in (‘A‘,‘U‘)
用作判断(1)操作来自于哪个数据对象,22代表采购订单;(2)是何种操作,A和U代码新增或更新。也就是说,当对采购订单进行更新或新增操作时会触发下面的代码。
SQL逻辑:将采购订单主表和从表关联,取出从表中的行号。当行号不为空证明超价格限制的行,报错;为空证明无此类行,通过。
条件1:找到被操作的采购订单记录;
条件2:非审批状态;
条件3:物料行的税后价格大于供应商预设的价格。
错误信息:
向S001供应商购买A0001物料,预设价格未10RMB,订单上填写的税后价格未11.7元,阻止。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。