首页 > 代码库 > 3-0SBO学习心得(格式化搜索和存储过程的综合应用)

3-0SBO学习心得(格式化搜索和存储过程的综合应用)

功能:

(1)采购订单中每行的物料税后折后价格均不能高于为供应商预设的价格,否则报错。

  实现:存储过程

(2)例外情况,如货源紧张可能出现超价格采购,此种情况可通过审批来跳过(1)的控制。(让存储过程失效)

  实现:加入一个自定义字段(1:送审;-1不送审)。存储过程发现此字段取值为1表明为例外采购,即将送领导审批;取值为-1则表示不是例外采购,控制启动。

(3)判断自定义字段的值,如果1就触发领导审批,-1不触发领导审批。

  实现:格式化搜索可以抓到此字段的值,然后在查询向导中写逻辑。如果1返回true,如果-1返回false。

     新建审批模板,将审批模板的触发条件与上面的 逻辑关联。

实现以下功能:

  (1)自定义字段默认选择不送审,当采购订单提交时会判断价格,超价格阻止,不超放行。

  (2)自定义字段选择送审时,不判断采购订单的价格,直接触发审批逻辑。

 

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    /*结束-判断是否超过价格清单中的价格*/

2、添加自定义字段:

在营销单据-标题中,添加自定义字段:OWTM-审批模版,字母数字(10),定义有效值:-1表示无,1表示低于销售价格,为必填值,默认值为-1。

3、在查询向导中加入以下逻辑:

declare @owtm varchar

@owtm=$[OPOR.U_owtm.0]

set ‘true‘ where @owtm=1

4、设置审批模板,将3中的逻辑引用为触发条件。