#引入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 BarItemClick(e):
key=e.BarItemKey;#菜单标识大写
#this.View.ShowMessage(key);
if key=="SSQX_tbButton_1":#获取领料套数
#rows=this.Model.GetEntryRowCount("FOptPlanEntity");
#this.View.ShowMessage("获取价格");
billObj = this.View.Model.DataObject;#获取单据头的数据包,即单据的数据包,DynamicObject类型,可进一步解析
entity=billObj["POOrderEntry"];#订单明细单据体,DynamicObjectCollection类型 POOrderEntry
FBillTypeID= this.Model.GetValue("FBillTypeID")["Number"]
FPurchaseOrgId=this.Model.GetValue("FPurchaseOrgId")["ID"] #采购组织
#this.View.ShowMessage(str(FPurchaseOrgId));
#this.View.ShowMessage(str(FBillTypeID));
if FBillTypeID=="CGDD12_SYS" or FBillTypeID=="CGDD01_SYS": #采购订单 触发包材规则计算价格
#this.View.ShowMessage("获取包材价格");
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):
FMaterial= this.Model.GetValue("FMaterialID",i)# 物料ID
if not FMaterial is None:
FMaterialID= FMaterial["Id"] # 物料ID
Number= FMaterial["Number"] # 物料代码
BaseProperty= this.Model.GetValue("FMaterialID",i)["F_VCDB_BASE3"]["ID"]#物料分类ID
F_VCDB_Combo= this.Model.GetValue("FMaterialID",i)["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo 1 包材规则 4 金属材料价格
#this.View.ShowMessage(str(F_VCDB_Combo));
if str(F_VCDB_Combo)=="4":#金属材料计算规则
supplierNo=supplier["Number"];
cuSql ="";
dbsql = ("SELECT p.FPRICE,p.FTaxPrice,p.FDATAVALUE,p.FNUMBER FROM V_WDI_PURPrice p where FDATAVALUE IS NOT NULL AND p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
result = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
#raise Exception(dbsql)
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 CONVERT(varchar (10), F_SSQX_DATE_APV) = CONVERT(varchar (10), GETDATE()) ";
#this.View.ShowMessage(cuSql);
curesult = DBServiceHelper.ExecuteDynamicObject(this.Context, cuSql)
#F_SSQX_DECIMAL_TZK '铜均价',F_SSQX_DECIMAL_QTR '铝均价',F_SSQX_DECIMAL_83G '镍均价',F_SSQX_DECIMAL_RE5 '锡均价'
if len(curesult) > 0:#有金属价格
metal_type = result[0][2] # 第三列是FDATAVALUE 金属类型
this.View.ShowMessage(metal_type);
copper_price=0;
if metal_type == "铜":
copper_price = curesult[0][1] # 铜均价
elif metal_type == "铝":
copper_price = curesult[0][2] # 铝均价
elif metal_type == "镍":
copper_price = curesult[0][3] # 镍均价
elif metal_type == "锡":
copper_price = curesult[0][4] # 锡均价
#raise Exception(copper_price)
cu_price=round(result[0][0],6)#铜加工费未税 价目表未税单价
tax_included_price = round((copper_price / 1000/1.13) + cu_price,6)
this.Model.SetValue("F_SSQX_Decimal_re5",copper_price,i)#F_SSQX_Decimal_re5 金属实时价格
this.Model.SetValue("F_VCDB_Price1",tax_included_price,i) #规则单价
this.Model.SetValue("FTAXPRICE",round(tax_included_price*1.13,6),i)
this.Model.SetValue("F_SSQX_Price",result[0][1]*1000,i)#F_SSQX_Price 铜加工费含税 价目表含税价格*1000
#raise Exception("you")
else:
#raise Exception("wu")
this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价
this.Model.SetValue("FTAXPRICE",0,i)
this.Model.SetValue("F_SSQX_Price",0,i)
this.Model.SetValue("F_SSQX_Decimal_re5",0,i)
else:
dbsql = ("SELECT p.FID FROM VCDB_t_Cust100023 p where p.F_VCDB_BASE={0} ").format(BaseProperty);
dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
supplierNo=supplier["Number"];
if len(dbresult) > 0:#是包材计算规则
dbsql = ("SELECT FPrice , FSUPPLIERID,FMATERIALID,FUSEORGID,p.FMMASTERID,p.FNUMBER,p.FSupplyNumber FROM V_WDI_PURPrice p WHERE p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
#this.View.ShowMessage(dbsql);
dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
#this.View.ShowMessage(str(len(dbresult) ));
if len(dbresult) > 0:#存在价目表
#this.View.ShowMessage(str(dbresult[0][0]));
this.Model.SetValue("F_VCDB_Price1",dbresult[0][0],i) #规则单价
this.Model.SetValue("FTAXPRICE",round(dbresult[0][0]*1.13,6),i)
else:#价目表不存在通过包材价格规则取价
#this.View.ShowMessage("这里");
sql = "SELECT p.FPriceStandard,p.FPrice,p.FNUMBER FROM V_WDI_PagePrice p where p.FMATERIALID="+str(FMaterialID);
#this.View.ShowMessage(sql);
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],i) #包装系数
this.Model.SetValue("F_VCDB_Decimal2",result[0][0],i) #规则单价
this.Model.SetValue("FTAXPRICE",round(result[0][1]*1.13,6),i)
else:
this.Model.SetValue("F_VCDB_Price1",0,i) #包装系数
this.Model.SetValue("F_VCDB_Decimal2",0,i) #规则单价
this.Model.SetValue("FTAXPRICE",0,i)
elif FBillTypeID=="CGDD02_SYS": #委外订单 触发电镀规则计算价格
#this.View.ShowMessage("获取电镀价格");
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
Number= FMaterial["Number"] # 物料代码
BaseProperty= this.Model.GetValue("FMaterialID",i)["F_VCDB_BASE3"]["ID"]#物料分类ID
F_VCDB_Combo= this.Model.GetValue("FMaterialID",i)["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo 1 包材规则 4 金属材料价格
supplierNo=supplier["Number"];
if str(BaseProperty)=="235102" or str(BaseProperty)=="235104":# 确认是电镀和喷砂规则
dbsql = ("SELECT FPrice , FSUPPLIERID,FMATERIALID,FUSEORGID,p.FMMASTERID,p.FNUMBER,p.FSupplyNumber FROM V_WDI_PURPrice p WHERE p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
#this.View.ShowMessage(dbsql);
dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
if len(dbresult) > 0:#存在价目表
#this.View.ShowMessage(str(dbresult[0][0]));
this.Model.SetValue("F_VCDB_Price1",dbresult[0][0],i) #规则单价
this.Model.SetValue("FTAXPRICE",round(dbresult[0][0]*1.13,6),i)
else:#按公式取价
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) #规则单价 FISINCLUDEDTAX
this.Model.SetValue("FTAXPRICE",round(dbresult[0][1]*1.13,6),i)
else:
this.Model.SetValue("F_VCDB_Decimal",0,i) #电镀价格系数
this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价
this.Model.SetValue("FTAXPRICE",0,i)
elif str(F_VCDB_Combo)=="4":#金属材料计算规则
#this.View.ShowMessage("金属");
supplierNo=supplier["Number"];
dbsql = ("SELECT p.FPRICE,p.FTaxPrice,p.FNUMBER FROM V_WDI_PURPrice p where FDATAVALUE IS NOT NULL AND p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
result = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
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 CONVERT(varchar (10), F_SSQX_DATE_APV) = CONVERT(varchar (10), GETDATE()) ";
curesult = DBServiceHelper.ExecuteDynamicObject(this.Context, cuSql)
if len(curesult) > 0:#有金属价目表
metal_type = result[0][2] # 第三列是FDATAVALUE 金属类型
copper_price=0;
if metal_type == "铜":
copper_price = curesult[0][1] # 铜均价
elif metal_type== "铝":
copper_price = curesult[0][2] # 铝均价
elif metal_type== "镍":
copper_price = curesult[0][3] # 镍均价
elif metal_type == "锡":
copper_price = curesult[0][4] # 锡均价
# 供应商编码是 A.01.09 含税单价=长江现货均价/1000+价目表含税单价
#规则单价取未税单价 供应商编码是 A.01.09长江现货均价/1000/1.13+价目表未税单价 其他供应商 价目表未税单价
tax_included_price=0
#copper_price = curesult[0][1] # 铜均价 result[0][1] 金属加工费
cu_price=round(result[0][0],6)#铜加工费未税 价目表未税单价
if str(supplierNo)=='A.01.09':
tax_included_price = round((copper_price / 1000/1.13)*0.04 + cu_price,6)
else:
tax_included_price = cu_price
#raise Exception(str(tax_included_price))
#tax_included_price = round(cu_price*1000,3)
this.Model.SetValue("F_SSQX_Decimal_re5",copper_price,i)#F_SSQX_Decimal_re5 金属实时价格
this.Model.SetValue("F_VCDB_Price1",tax_included_price,i) #规则单价
this.Model.SetValue("FTAXPRICE",round(tax_included_price*1.13,6),i)
this.Model.SetValue("F_SSQX_Price",result[0][1]*1000,i)#F_SSQX_Price 铜加工费含税 价目表含税价格*1000
else:
this.View.ShowMessage("无价格");
this.Model.SetValue("F_SSQX_Decimal_re5",0,i)#F_SSQX_Decimal_re5 金属实时价格
this.Model.SetValue("FTAXPRICE",0,i)
this.Model.SetValue("F_SSQX_Price",0,i)#F_SSQX_Price 铜加工费含税
this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价