
@[TOC](目录)
### 背景
法人组织间购销自动化流程在生成下游单据(例如采购订单)时,当所有的物料都未分配给目标组织时不会生成下游单据,并且会提示采购订单保存失败,而当只存在部分物料分配给了目标组织时,自动生成成功,并生成了部分符合条件的物料的分录。有客户想强制控制要么全部生成,要么就都不生成。
### 方案
鉴于法人组织间购销自动化流程在自动生成采购订单时不存在分录合并拆分的情况,因此如果想校验当前单据是否全部生成目标单据的话,只需要校验自动生成的下游单据的分录行数是否等于上游单据的分录行数即可。
### 步骤(以销售订单审核自动生成采购订单为例)
1. **销售订单**上新增一个整数字段,标识、名称、字段名随意,但尽量取有意义的名字,然后可以默认不可见和锁定

2. (建议使用第3步注册插件方式)~~销售订单保存按钮计算销售明细行数~~ ==(两个保存按钮都需要加)==


==计算销售明细行数加好后一定要上移到保存操作之前,只有这样计算的行数数据才会保存==
3. 销售订单保存操作通过Python脚本计算分录行数(推荐)
有很多客户不会点击保存按钮,而是直接点击提交按钮。上面第2的方式无法避免这种情况,建议用第3点这种插件方式处理
```python
import clr
clr.AddReference('System')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
from System import *
from Kingdee.BOS.Core import *
def OnPreparePropertys(e):
e.FieldKeys.Add("F_SXIM_Integer")
def BeginOperationTransaction(e):
if e.DataEntitys == None:
return
for entity in e.DataEntitys:
entity["F_SXIM_Integer"] = len(entity["SaleOrderEntry"])
```
4. **采购订单**上同样新增一个整数字段,标识、名称、字段名随意,但尽量取有意义的名字,然后可以默认不可见和锁定

5. **单据转换**字段映射做好这两个字段的映射

6. **采购订单**保存操作上增加一个**校验规则**

==设置前置条件==

==设置校验检查公式==:FInteger <> len(filter(lambda x:x.FMaterialId<>null,FPOOrderEntry ))

### 效果展示
1. 销售订单保存时自动计算明细行数

2. 采购订单**没加校验时**销售订单审核生成情况


==没加校验时四行销售订单会生成两行符合条件的采购订单==
3. **加了校验后的最终效果**

4. 也不会影响正常手工新增其他类型的采购订单

**其他更多文章入口:**[https://vip.kingdee.com/link/s/lbRPP](https://vip.kingdee.com/link/s/lbRPP)