编辑代码

#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DependencyRules import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.Metadata.EntityElement import *
from Kingdee.BOS.Core.Metadata.FieldElement import *
from Kingdee.BOS.Orm.DataEntity import *

def DataChanged(e):
	#fldKey=e.Field.Key.ToUpperInvariant();#字段标识大写 MaterialId
	billObj = this.View.Model.DataObject;#获取单据头的数据包,即单据的数据包,DynamicObject类型,可进一步解析
	entity=billObj["POOrderEntry"];#订单明细单据体,DynamicObjectCollection类型  POOrderEntry 
	FBillTypeID= this.Model.GetValue("FBillTypeID")["Number"]
	#this.View.ShowMessage(str(FBillTypeID));
	if FBillTypeID=="CGDD01_SYS": #采购订单  触发包材规则计算价格
		if e.Key=="FMaterialId":
			row=e.Row;
			#this.View.ShowMessage(str(row));
			number= this.Model.GetValue("FMaterialID",row)["Number"]
			FMaterialID= this.Model.GetValue("FMaterialID",row)["ID"] # 物料ID
			BaseProperty= this.Model.GetValue("FMaterialID",row)["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo  1 包材规则  4 金属材料价格
			#this.View.ShowMessage(str(BaseProperty));
			#supplier= this.Model.GetValue("FSupplierId",0)["Number"]
			if str(BaseProperty)=="1":
				sql = "SELECT p.FPriceStandard,p.FPrice,p.FNUMBER  FROM V_WDI_PagePrice p where p.FMATERIALID="+str(FMaterialID);
				result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
				if len(result) > 0:
					#this.View.ShowMessage(str(len(result)));
					this.Model.SetValue("F_VCDB_Price1",result[0][1],row) #包装系数
					this.Model.SetValue("F_VCDB_Decimal2",result[0][0],row) #规则单价
					this.Model.SetValue("FTAXPRICE",round(result[0][0]*1.13,3),row)
            elif str(BaseProperty)=="4":
                sql = "SELECT p.FPriceStandard,p.FPrice,p.FNUMBER  FROM V_WDI_PagePrice p where FDATAVALUE IS NOT NULL AND p.FNUMBER='"+number+"'";
				result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
                if len(result) > 0:
                    cuSql="""SELECT  F_SSQX_DATE_APV '取价日期',F_SSQX_DECIMAL_TZK '铜均价',F_SSQX_DECIMAL_QTR '铝均价',F_SSQX_DECIMAL_83G '镍均价',F_SSQX_DECIMAL_RE5 '锡均价' 
                    FROM SSQX_t_Cust100129 WHERE F_SSQX_DATE_APV >= CAST(GETDATE() AS DATE) AND F_SSQX_DATE_APV < DATEADD(DAY, 1, CAST(GETDATE() AS DATE))""";
                    curesult = DBServiceHelper.ExecuteDynamicObject(this.Context, cuSql)
                    copper_price = float(curesult[0]['铜均价'])  # 铜均价     result[0][1]  金属加工费
                    tax_included_price = round((copper_price / 1000) + result[0][1],3)
                    this.Model.SetValue("F_SSQX_Decimal_re5",copper_price,row)#F_SSQX_Decimal_re5 金属实时价格
                    this.Model.SetValue("F_VCDB_Decimal2",tax_included_price,row) #规则单价
					this.Model.SetValue("FTAXPRICE",round(tax_included_price*1.13,3),row)

	
	elif  FBillTypeID=="CGDD02_SYS": #委外订单  触发电镀规则计算价格
		supplier= this.Model.GetValue("FSupplierId")
		#this.View.ShowMessage(supplier);
		#if e.Key=="FMaterialId" or e.Key=="FSupplierId":
		if e.Key=="FMaterialId":#物料改变时
			row=e.Row;
			#this.View.ShowMessage(str(row));
			number= this.Model.GetValue("FMaterialID",row)["Number"]
			FMaterialID= this.Model.GetValue("FMaterialID",row)["ID"] # 物料ID
			BaseProperty= this.Model.GetValue("FMaterialID",row)["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo 2 电镀规则
			if supplier==None :
				this.View.ShowWarnningMessage("请先录入供应商");
			else:
				supplierID=supplier["ID"];
				#this.View.ShowMessage(str(supplierID));
				if str(BaseProperty)=="2":
					dbsql = ("SELECT p.standardPrice,p.FPrice,p.FNUMBER,p.FMATERIALID  FROM V_WDI_DianduPshaPrice p where p.FMATERIALID={0} and p.FSupplyID={1}").format(FMaterialID,supplierID);
					#this.View.ShowMessage(dbsql);
					dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
					if len(dbresult) > 0:
						#this.View.ShowMessage(str(len(dbresult)));
						this.Model.SetValue("F_VCDB_Decimal",dbresult[0][0],row) #电镀价格系数
						this.Model.SetValue("F_VCDB_Price1",dbresult[0][1],row) #规则单价
						this.Model.SetValue("FTAXPRICE",round(result[0][1]*1.13,3),row)
		elif e.Key=="FSupplierId":#供应商改变时
			rows=this.Model.GetEntryRowCount("FPOOrderEntry");
			supplier= this.Model.GetValue("FSupplierId")
			if supplier==None :
				this.View.ShowWarnningMessage("供应商不能为空");
			else:
				#this.View.ShowMessage(str(rows));
				supplierID=supplier["ID"];
				for i in range(rows):
					#this.View.ShowWarnningMessage(str(i));
					#number= this.Model.GetValue("MaterialID",0)["Number"]
					FMaterial= this.Model.GetValue("FMaterialID",i)# 物料ID
					#if FMaterial==None :
					#	this.View.ShowWarnningMessage("")
					if not FMaterial is None:
						FMaterialID= FMaterial["Id"] # 物料ID
						BaseProperty= FMaterial["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo 2 电镀规则
						if str(BaseProperty)=="2":
							dbsql = ("SELECT p.standardPrice,p.FPrice,p.FNUMBER,p.FMATERIALID  FROM V_WDI_DianduPshaPrice p where p.FMATERIALID={0} and p.FSupplyID={1}").format(FMaterialID,supplierID);
							#this.View.ShowMessage(dbsql);
							dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
							if len(dbresult) > 0:
								#this.View.ShowMessage(str(len(dbresult)));
								this.Model.SetValue("F_VCDB_Decimal",dbresult[0][0],i) #电镀价格系数
								this.Model.SetValue("F_VCDB_Price1",dbresult[0][1],i) #规则单价
								this.Model.SetValue("FTAXPRICE",round(dbresult[0][1]*1.13,3),i)
							else:
								this.Model.SetValue("F_VCDB_Decimal",0,i) #电镀价格系数
								this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价
								this.Model.SetValue("FTAXPRICE",0,i) #规则单价