单据转换多个单据体转换Python实现案例

业务需求:一个单据有多个个单据体,想在单据转换中配置多个单据体下推,可是不支持多单据体字段转换映射的配置
示例:将收料通知单明细信息下推到检验单上的二开单据体上。


#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference("Kingdee.BOS.App.Core")
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.App import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from System.Text import *
from System.Collections import *
from System import StringComparison
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import *
from Kingdee.BOS.Core.Metadata import SelectorItemInfo
from Kingdee.BOS.Core.SqlBuilder import QueryBuilderParemeter
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.App.Core import *
global FBillNo
def OnGetSourceData(e):
global FBillNo
sourceData = e.SourceData;
FBillNo = List[str]()
for row in sourceData:
FBillNo.Add(Convert.ToString(row["FID"]));
FBillNo = set(FBillNo)#定义变量,获取源单ID
def AfterConvert(e):
global FBillNo
mainEntity = e.TargetBusinessInfo.GetEntity("F_SHUU_Entity");
billDataEntitys = e.Result.FindByEntityKey("FBillHead");
obj = e.TargetBusinessInfo.GetEntryEntity("F_SHUU_Entity");
viewService = ViewService()
for item in billDataEntitys:
dataObject = item.DataEntity;
secondEntryRows = mainEntity.DynamicProperty.GetValue(dataObject)
secondEntryRows.Remove(secondEntryRows[0]);
for i in FBillNo:
sql = "/*dialect*/select * from T_PUR_ReceiveEntry where F_ZL_CheckBox='1' and fid in ('{0}')".format(i)#自行用SQL查找需要的字段
doc = DBServiceHelper.ExecuteDynamicObject(this.Context, sql,None)
for OB in doc:
newRow = DynamicObject(obj.DynamicObjectType)
Service = ServiceHelper.GetService<IViewService>()
FPAYMATERIALIDz = Convert.ToString(OB["FMaterialId"]);
if FPAYMATERIALIDz is not None and Convert.ToInt64(FPAYMATERIALIDz) > 0:
baseDataField = e.TargetBusinessInfo.GetField("F_SHUU_Base1")
vendor = vi
单据转换多个单据体转换Python实现案例
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



