本文介绍了在单据转换过程中,特别是在处理子单据体与下游单据体关联时的配置和注意事项。首先,在转换规则中配置了子单据体字段映射到下游单据体。其次,通过单据转换分组策略使用唯一标识确保分组后的下游单据体行数正确。为实现子单据体与单据体的关联,需调整转换规则中的单据体Key。同时,文章指出了平台支持的字段反写关系、列表上下查及整单上下查的限制,并给出了示例和相关的表单插件代码,用于实现单据A的子单据体到单据B的单据体的转换及反写。
说明:
1、首先在转换规则字段映射中配置了子单据体携带到下游单据体中。
2、在单据转换分组策略中使用子单据体字段和其父单据体中的字段组成唯一标识,从而确保分组后的下游单据体行数等于子上游单据体行数乘以单据体行数。
3、 默认的关联关系创建为:单据头-》单据头, 单据体-》单据体, 要实现子单据体关联单据体,则需要把转换规则中的单据体Key改为子单据体key.
特别注意:
1、平台只支持有关联关系的实体中的字段和其上级实体中的字段反写,不支持其子级实体反写,如果实现子单据体跟单据体关联,就能反写到子单据体,但反写到单据体就会反写多次(子单据体有多少行就反写多少次)
2、列表上下查最低级别只能根据分录来查询,子单据体关联则查询不到
3、整单上下查只能查询选中分录行下的子单据体的关联数据。
所以在使用此解决方案,一定要考虑清楚。
示例: 单据A的子单据体携带到单据B的单据体中
1、创建转换规则
2. 创建反写规则单据B的单据体数量字段反写单据A的子单据体数量字段:
3. 新增单据A带两条子分录
4.下推单据体B 有两条分录
5. 保存单据体B之后重新打开单据A,可以看到数量反写后的值
表单插件代码:
using System; using System.ComponentModel; using System.Text; using System.Linq; using System.Collections.Generic; using Kingdee.BOS.Core; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Const; using Kingdee.BOS.Orm; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.App.Core; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.App.Core.PlugInProxy; namespace Kingdee.BOS.TestPlugIn.BillABillB { [HotUpdate] [Description("单据转换插件")] public class BillConvertPlugIn : AbstractConvertPlugIn { private ConvertRuleElement _rule; public override void OnInitVariable(InitVariableEventArgs e) { this._rule = e.Rule; } public override void OnInSelectedRow(InSelectedRowEventArgs e) { base.OnInSelectedRow(e); var defaultPolicy = this._rule.Policies.FirstOrDefault(x => x is DefaultConvertPolicyElement) as DefaultConvertPolicyElement; if (defaultPolicy != null) { //把此策略的源单据体key改成子单据体key defaultPolicy.SourceEntryKey = defaultPolicy.SourceSubEntryKey; } } } }
python表单插件代码:
convertRule = None def OnInitVariable(e): global convertRule convertRule = e.Rule def OnInSelectedRow(e): global convertRule if convertRule is not None: ruleElement.Policies[2].SourceEntryKey = ruleElement.Policies[2].SourceSubEntryKey
推荐阅读