金蝶BOS开发指南_BOTP
6.4.4
重新上拉
“重新上拉”功能只在已经执行过“拉式生成”操作后才可用,如果勾选“重新上拉”,系统会自动选择上次的转换规则, 并自动选择上次的源单列表, 用户可以直接在上次选择的基础上作修改,不需要全部重选一遍,可以大大的减少修改时的工作量;
6.5 凭证
6.5.1 判断是否已生成凭证
1. 通过fiVouchered判断
EAS6.0及以前版本, 判断单据是否已经生成凭证可以通过存在单据里面的一个boolean型自有属性, 如果是自定义的单据, 没有此属性的话, 则需要手动添加一个同名属性 boolean fiVouchered 是否已经生成凭证
生成单据后, 该属性会被BOTP引擎反写逻辑自动设置为true;
2. 通过接口判断
EAS 6.1及以后版本还可以通过以下接口方法判断, IDAPTransformer类中提供了以下接口方法查询单据是否已生成凭证:
public boolean isHaveVoucher(String srcBillId, String companyOrgId) throws BOSException; 其中参数srcBillId为单据单据; 参数companyOrgId用于指定组织ID, 为空表示单账簿; 返回值为boolean型, true表示已生成凭证, false表示未生成;
46 / 59
金蝶BOS开发指南_BOTP
6.6 分组合并
6.6.1 分组合并原理
分组合并规则设置, 其功能在于将BOTP转换生成的目标单据和分录对象, 按照预设的合并规则进行分组合并, 并在合并过程中将指定的合计字段的数值合并起来;
BOTP转换的原理是: 当不设置任何分组合并规则时, 源单的每张单会对应一张目标单, 源单的每条分录会按照分录映射规则生成对应数量的目标单分录, 数量 = 源单分录数 X 分录映射规则数;
分组合并规则设置后, 如果多张目标单据头上的“分组合并条件”符合, 则将合并为一张目标单; 同理如果多条分录上的“分组合并条件”符合, 则将合并为一条分录; ? 设置分组合并条件只会让目标单/分录对象数因合并减少而不是增多;
? 单据头上的分组合并字段又称为一级分组规则, 当设置了一级分组属性后, 影响的主要是目标单
单据头是否合并; 一级分组属性对目标单分录是否合并没有影响; ? 单据分录上的分组合并字段主要影响目标单分录是否合并; ? 规则定义时必须至少设置一个一级分组属性;
6.6.2
分组合并实例
假设采购订单生成采购退货申请单, 源单据有2张, 每张单据有2条分录
对应的BOTP规则中设置了2条分录转换规则
其中可设置的分组合并属性有:“原始单据ID”、“采购退货分录.物料”
47 / 59
金蝶BOS开发指南_BOTP
a. 设置一个一级分组属性“原始单据ID”, 假设该属性字段值为空(例如未设置字段映射规则时), 相当于所有目标单的该字段值均相同,所以需要合并成一张目标单; 此时将生成1张目标单, 单据共有2(源单) X 2(分录) X 2(分录规则) = 8条分录;
b. 如果该一级分组属性“原始单据ID”字段值不为空, 此时将会按照此字段来分成多张单, 实际将生成2张目标单, 每张目标单有2(分录) X 2(规则) = 4条分录
c. 如果规则在此基础上再勾选“单据头.分录.物料”字段作为分组合并属性, 那么生成2张目标单据仍然
48 / 59
金蝶BOS开发指南_BOTP
不变, 但同时单据上的4条分录将按“物料”字段来合并, 物料相同的就合并成一条分录, 并合计相关的数值型字段;
6.6.3
按照分录字段来分单
按照前述内容, 分组合并规则设置时是不能按照分录字段来分单的, 也就是只有单据头上的字段值不同, 才能分成不同的目标单; 那怎样才能按照单据的分录字段来分单? 例如按照源单上分录上的某个字段值不同, 就分别生成不同的目标单据。
方法是可以使用单据的“分组属性”功能, 在规则设置页签的单据头映射部分, 最后一项F7名为“分
组属性”, 可以设置源单上的分录字段,
然后再勾选分组合并页签的最后一个”分组属性”
49 / 59
金蝶BOS开发指南_BOTP
即可实现按源单分录上的字段分单, 即当源单上的该字段值不同时, 生成不同的目标单据;
这里按分单和分组规则,一共生成了4张目标单,每张目标单上只有一条分录,物料各不相同;
50 / 59