二开干预选单时排除已选单的数据
下游单据选单上游单据时,标准功能一般是可以重复选择同一上游单据的,即同一张上游单据的同一条明细可以被重复选择多次,这样就会导致下游单据多次选单同一上游单据后出现多条记录,一般是通过反写超额来控制下游的保存,通常单据转换也是用上游的反写数量字段来控制第二次选单时的过滤逻辑)。标准功能为什么不排除已选单的呢?个人认为BOS平台在选单时这么控制是想让多次选单同一上游后能修改数量,想当于上游下推下游单据后能拆分成多行(一般是通过拆分数量,比如上游单据的一条明细是10个数量,3次选单同一上游后,把下游数量分别改成3,3,4个数量以达到拆分行的效果)。
虽然BOS平台的单据转换能配置选单时按下游某个字段过滤,比如下游发货通知单是客户A,选单销售订单时只能选择到A客户的销售订单,但这种配置不能满足排除已选单的情况,选单时字段过滤配置如下图所示1-1所示:
图1-1
本文演示使用C#插件代码排除已选单的上游单据逻辑,此插件适配绝大部分单据(能挂此插件的单据的前置条件是明细分录内码字段名为FENTRYID,类型为INT即可,如果不满足此条件可在下图1-2中红框中相应修改脚本条件),客户可二开挂此插件到相应单据上。
首先创建二开类库,类库中创建列表插件 Kingdee.K3.SCM.Custom.BusinessPlugin.DrawDistinctBillListPlugin ,这是源代码附件:
,二开代码的核心逻辑就是通过当前单据视图找父窗体视图(选单时父窗体视图就是下游单据视图),然后通过下游单据视图动态找单据关联配置并通过关联关系排除上游已选单的数据,列表插件代码如下1-2所示:图1-2
将上图1-2中的类型项目编译好后,在选单上游单据的列表插件中注册下,这里演示的是销售订单,如下图1-3所示:
图1-3
插件注册保存元数据后,发货通知单先第一次选单销售订单,如下图2-1所示:
图2-1
上图2-1选单返回后,不要保存发货通知单(如果是保存了发货通知单,会反写相关可出数量到上游,下次选单可出数量不够时会自动排除上游),再次选单时,上一次选择的销售订单不在列表中,如下图2-2所示:
图2-2
写在最后:
此插件在极端情况下可能存在一些问题,比如下游单据有某个字段输入值的逻辑是先动态弹出上游单据列表再选择上游单据时可能也会被排除已选单的数据,如果存在这种情况,建议动态弹出上游列表时先传个参数,然后在上面的列表插件中的OnInitialize方法中通过语句 this.View.OpenParameter.GetCustomParameter读取参数到一个类字段中,然后在PrepareFilterParameter方法中根据类字段动态处理分支。
二开干预选单时排除已选单的数据
本文2024-09-23 02:46:59发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-154668.html