BOS选单关系中如何反写未下推数量原创
金蝶云社区-Robby
Robby
5人赞赏了该文章 377次浏览 未经作者许可,禁止转载编辑于2022年11月28日 16:15:55

BOS选单关系中可以通过配置勾稽来反写已下推数量,这个也是比较常用的关系,但是不能配置其他字段反写,

如何在序时簿里直观的看出未下推数量?本文介绍不写触发器,不写插件代码实现未下推数量自动反写。

举例:上游单据为200000068

image.png

注意:先在单据中为【数量】配置值更新事件未下推数量=数量-已下推数量,保证单据初始化的时候数据是准确的。

下游单据

image.png

选单关系如下配置:

image.png

勾稽的方式下推,这样配置完之后,下游单据保存后可以反写上游单据的【已下推数量】,但是不能反写未下推数量;

在bos设计器打开下游单据的属性窗口

image.png

点击保存后事件-新增事件,

image.png

再变量名处填写 subId,对应字段选择【单据头.内码】,点击添加

image.png

然后再【sql语句】中填写Exec P_WriteBack0068 @subID@

image.png

确定后关闭界面,然后点击主界面【保存】按钮以更新bos的更改使事件生效。

打开SQLServer 编写脚本并执行以创建存储过程P_WriteBack0068(这个名称根据需要自己自己定义,单需要和事件中的名称保持一致。)

create proc P_WriteBack0068

@SubID as int

as

begin

update a

set  a.FDecimal2 = a.fdecimal - a.fdecimal1

from t_BOS200000068entry2 as a

inner join t_BOS200000069entry2 b on a.FID = b.fid_src and a.fentryid = b.fentryid_src

where b.FID = @SubID

end

Go

t_BOS200000068entry2 是上游单据的表体物理表

t_BOS200000069entry2 是下游单据的表体物理表

a.FDecimal2 = a.fdecimal - a.fdecimal1指使未下推数量=数量-下推数量

(通过模板表确定字段再物理表里的列名)

image.png

下游单据保存后事件配置完毕;还需要配置下游单据删除时的反写(必须),以保证数据完整性;

同样的操作,再下游单据的属性里找到【删除前事件】(注意,必须是删除前事件)

image.png

编写存储过程P_WriteBack0068_delete如下:

create proc P_WriteBack0068_delete

@SubID as int

as

begin

update a

set  a.FDecimal2 = a.FDecimal2 + b.FDecimal

from t_BOS200000068entry2 as a

inner join t_BOS200000069entry2 b on a.FID = b.fid_src and a.fentryid = b.fentryid_src

where b.FID = @SubID

end

Go

注意它和P_WriteBack0068的区别(这里计算公式是【未下推数量】=【未下推数量】+下游单据的【执行数量】)

image.png

完。


赞 5