#引入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) #规则单价