import clr clr.AddReference("System") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.DataEntity") clr.AddReference("Kingdee.BOS.App") clr.AddReference("Kingdee.BOS.Contracts") clr.AddReference("Kingdee.BOS.ServiceHelper") from Kingdee.BOS import* from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Metadata.EntityElement import * from Kingdee.BOS.Orm.DataEntity import* from Kingdee.BOS.Orm.Metadata.DataEntity import* from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.BOS.Util import * from System import * from System.ComponentModel import* from System.Collections.Generic import* from System.Text import* from Kingdee.BOS.ServiceHelper import * def DataChanged(e): if e.Field.Key == "FMaterialId": if DoCheckConditions(): if e.NewValue != None and e.NewValue != 0: hasQRCost = this.View.Model.GetValue("FHasQRCost") idlist = [{ "materialId" : e.NewValue , "inRow" : e.Row}] GetcContractAnnualCost(idlist,hasQRCost) else: this.View.Model.SetValue("FTAXPRICE", 0, e.Row) this.View.Model.SetValue("FTAXRATE", 0, e.Row) this.View.InvokeFieldUpdateService("FTAXPRICE" ,e.Row) if e.Field.Key == "FHasQRCost": if DoCheckConditions(): hasQRCost = e.NewValue entity = this.View.BusinessInfo.GetEntity("FEntity") entrys = this.View.Model.GetEntityDataObject(entity) idlist = list(filter(lambda x:x["materialId"] > 0,map(lambda x:{ "materialId":x["MaterialId_Id"] ,"inRow": x["Seq"] - 1} ,entrys))) GetcContractAnnualCost(idlist,hasQRCost) def GetcContractAnnualCost(idList,hasQRCost): # whereSql = " AND t0e.F_QNV_BASE1 IN ({0}) ".format(",".join(idList)) intoSqlList = List[str]() if idList != None and idList.Count > 0: for idObj in idList: intoSqlList.Add("SELECT {0} AS 'MATERIALID' ,{1} inRow".format(str(idObj["materialId"]),str(idObj["inRow"]))); sql = """/*dialect*/ SELECT * INTO #TMPMATERIALNUM FROM ({0}) tt SELECT tt.inRow,ISNULL(t.物料内码,0) AS '物料内码' ,ISNULL(t.含税单价,0) AS '含税单价' ,ISNULL(t.综合单价,0) AS '综合单价' ,ISNULL(t.默认税率,0) AS '默认税率' FROM #TMPMATERIALNUM tt LEFT JOIN (SELECT t0e.FID ,t0e.FENTRYID ,t0.FBILLNO ,t0.F_QNV_TEXT2 ,t0e.F_QNV_BASE1 AS '物料内码' ,t0e.F_QNV_DECIMAL1 AS '含税单价' ,t0e.F_QNV_DECIMAL3 AS '综合单价' ,t0e.F_QNV_DATE2 AS '单价生效日期' ,t0e.F_QNV_DATE3 AS '单价失效日期' ,t1.FTAXRATE AS '默认税率' ,ROW_NUMBER() OVER (PARTITION BY t0e.F_QNV_BASE1 ORDER BY t0e.F_QNV_DATE2 DESC) AS 'RN' FROM QNV_t_Cust_Entry100003 t0 INNER JOIN QNV_t_Cust_Entry100004 t0e on t0.FID = t0e.FID INNER JOIN T_BD_TAXRATE t1 on t1.FID = t0e.F_QNV_BASE3 WHERE 1=1 AND t0.FDOCUMENTSTATUS ='C' AND GETDATE() BETWEEN t0e.F_QNV_DATE2 AND t0e.F_QNV_DATE3 ) t on t.物料内码 = tt.MATERIALID AND t.RN = 1 WHERE 1 = 1 """.format(" union ".join(intoSqlList)) result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql) if result != None and result.Count > 0: priceKey = "综合单价" if hasQRCost else "含税单价" for row in result: rowIndex = row["inRow"] this.View.Model.SetValue("FTAXPRICE", row[priceKey], rowIndex) this.View.Model.SetValue("FTAXRATE", row["默认税率"], rowIndex) this.View.InvokeFieldUpdateService("FTAXPRICE" ,rowIndex) def DoCheckConditions(): orgObj = this.View.Model.GetValue("FApplicationOrgId") if orgObj["Id"] == 101542: return True return False