编辑代码

#引入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.ServiceHelper')
clr.AddReference('Newtonsoft.Json')
clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.DataEntity')

#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.Metadata.ElementMetadata import*
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Core.List import*
from Kingdee.BOS.Core.List.PlugIn import *
from Kingdee.BOS.Core.SqlBuilder import *
from Kingdee.BOS.Core.Metadata import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.App.Core import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Newtonsoft.Json import JsonConvert
from Newtonsoft.Json.Linq import *
from Kingdee.BOS.JSON import*
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DependencyRules import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from System.Reflection import *
from Kingdee.BOS.Util import*
from Kingdee.BOS.Orm.DataEntity import *
from clr import StrongBox



def AfterConvert(e):
	headEntity = e.Result.FindByEntityKey("FBillHead");
	for entity in headEntity:
		setSubEn(entity.DataEntity,e);

def setSubEn(billObj,e):
	entityRows=billObj["POOrderEntry"]
	billSdate=billObj['Date']
	Edate=billSdate.ToString("yyyy-MM-dd");
	billEdate=billSdate.AddDays(-365)
	Sdate=billEdate.ToString("yyyy-MM-dd");
	billOrg=billObj['PurchaseOrgId_id']
	# msg=JsonConvert.SerializeObject(Edate);#将数据包转换成JSON格式显示出来,测试时使用
	# raise Exception(msg)
	for enObj in entityRows:
		
		Metid=enObj['MaterialId_Id']
		msterID=enObj['MaterialId']['msterID']
		row=enObj['Seq']
		#msg=JsonConvert.SerializeObject(enObj['MaterialId']['msterID']);#将数据包转换成JSON格式显示出来,测试时使用
		#raise Exception(msg)
		pkIds=List[object]()
		pkIds.Add(Metid)
		sql = ("""/*dialect*/select top 1 b.FMATERIALID,d.FPRICE,sl.FNAME,b.FGIVEAWAY,convert(varchar,CONVERT(decimal(18,6),d.FPRICE))+'   '+sl.FNAME as t,h.FPURCHASEORGID
from t_PUR_POOrder h
left join t_PUR_POOrderEntry b on h.FID=b.FID
left join T_PUR_POORDERENTRY_F d on b.FENTRYID=d.FENTRYID
left join t_BD_Supplier s on s.FSUPPLIERID=h.FSUPPLIERID 
left join t_BD_Supplier_L sl on sl.FSUPPLIERID=s.FSUPPLIERID  
where h.FDOCUMENTSTATUS='c' and b.FGIVEAWAY='0'and b.FMATERIALID={0} and h.FPURCHASEORGID='{1}'and d.FPRICE>0  and h.FDATE between '{2}' and '{3}'
 order by FPRICE  """).format(Metid,billOrg,Sdate,Edate);
		ds = DBServiceHelper.ExecuteDataSet(this.Context,sql);
		tab = ds.Tables[0];	
		for dr in tab.Rows:
			enObj['F_SSQX_ZZZDJ']=dr['t']

		#Matemeta = MetaDataServiceHelper.Load(this.Context,"BD_MATERIAL");
		#dynamicObjects = BusinessDataServiceHelper.Load(this.Context,pkIds.ToArray(),Matemeta.BusinessInfo.GetDynamicObjectType());
		#MateObj=dynamicObjects[0]
		# msg=JsonConvert.SerializeObject(MateObj);#将数据包转换成JSON格式显示出来,测试时使用
		# raise Exception(msg)
		
		sql = ("""/*dialect*/SELECT TOP 1  t2.FMATERIALID ,sl.FNAME,CAST(t2.FPRICE AS decimal(18,6)) AS FPrice,sl.FNAME as t,t1.FPURCHASEORGID ,t2.FDISABLERID 
 FROM T_PUR_PRICELIST t1 
LEFT JOIN T_PUR_PRICELISTENTRY t2 ON t1.FID =t2.FID 
left join t_BD_Supplier s on s.FSUPPLIERID=t1.FSUPPLIERID  
left join t_BD_Supplier_L sl on sl.FSUPPLIERID=s.FSUPPLIERID  
LEFT JOIN T_BD_MATERIAL tbm ON tbm.FMATERIALID =t2.FMATERIALID 
WHERE t2.FDISABLERID =0 AND  t1.FFORBIDSTATUS='A' AND t1.FDOCUMENTSTATUS='C' 
AND CONVERT(varchar(100), t2.FEXPIRYDATE, 23)>=CONVERT(DATE, GETDATE())
AND sl.FNAME NOT LIKE '%西典%'
and tbm.FMASTERID={0} and t2.FPRICE>0
 order by t2.FPRICE   """).format(msterID);
 		#raise Exception("问题SQL:"+sql);
		ds = DBServiceHelper.ExecuteDataSet(this.Context,sql);
		tab = ds.Tables[0];	
		for dr in tab.Rows:
			enObj['F_SSQX_JMBGYS']=dr['t']
			enObj['F_SSQX_JMB']=dr['FPrice']

		Matemeta = MetaDataServiceHelper.Load(this.Context,"BD_MATERIAL");
		dynamicObjects = BusinessDataServiceHelper.Load(this.Context,pkIds.ToArray(),Matemeta.BusinessInfo.GetDynamicObjectType());
		MateObj=dynamicObjects[0]
		# msg=JsonConvert.SerializeObject(MateObj);#将数据包转换成JSON格式显示出来,测试时使用
		# raise Exception(msg)
		
		MastID=MateObj['msterID']
		sql = ("""/*dialect*/select  top 1 b.FMATERIALID,d.FPRICE,sl.FNAME,b.FGIVEAWAY ,convert(varchar,CONVERT(decimal(18,6),d.FPRICE))+'   '+sl.FNAME as t,h.FPURCHASEORGID,g.FMASTERID
from t_PUR_POOrder h
left join t_PUR_POOrderEntry b on h.FID=b.FID
left join T_PUR_POORDERENTRY_F d on b.FENTRYID=d.FENTRYID
left join t_BD_Supplier s on s.FSUPPLIERID=h.FSUPPLIERID 
left join t_BD_Supplier_L sl on sl.FSUPPLIERID=s.FSUPPLIERID  
left join T_BD_MATERIAL g on b.FMATERIALID=g.FMATERIALID
where h.FDOCUMENTSTATUS='c' and b.FGIVEAWAY='0' and d.FPRICE>0 and g.FMASTERID={0} and h.FDATE between '{1}' and '{2}'
 Order by FPRICE  """).format(MastID,Sdate,Edate);
		ds = DBServiceHelper.ExecuteDataSet(this.Context,sql);
		tab = ds.Tables[0];	
		for dr in tab.Rows:
			enObj['F_SSQX_JTZDJ']=dr['t']