import clr clr.AddReference("System") clr.AddReference("System.Xml") 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") clr.AddReference("Kingdee.K3.BD.BarCode.Business.PlugIn") clr.AddReference("Kingdee.K3.BD.BarCode.ServiceHelper") from Kingdee.BOS import * from Kingdee.BOS.Contracts import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.List import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.BOS.Core.Metadata.EntityElement import * from Kingdee.BOS.Core.Bill import * from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.Util import * from Kingdee.BOS.Core.Util import * from System import * from System.Xml import * from System.ComponentModel import * from System.Collections.Generic import * from System.Text import* from Kingdee.BOS.ServiceHelper import * from Kingdee.K3.BD.BarCode.Business.PlugIn import * from Kingdee.K3.BD.BarCode.ServiceHelper import * # 条码扫描 _isFormisFromBillEx = 0 _sFormIdEx = "" _billTypeId = "" _billId = "" def FirstOrDefault(collection, func): """仿Linq的FirstOrDefault Args: collection (_type_): 数据集 func (_type_): lambda公式 Returns: _type_: 获取数据集第一个或null """ result = filter(func, collection) if len(result) == 0: return None return result[0] def OnInitialize(e): # tbBarCodeScanEx _isFromBillObj = e.Paramter.GetCustomParameter("isFromBill"); global _isFormisFromBillEx _isFormisFromBillEx = 0 if _isFromBillObj == None else int(_isFromBillObj) if _isFormisFromBillEx == 1: _sFormIdExObj = e.Paramter.GetCustomParameter("SourceFormId") global _sFormIdEx; _sFormIdEx = "" if _sFormIdExObj == None else _sFormIdExObj global _billTypeId _billTypeId = e.Paramter.GetCustomParameter("billTypeId"); global _billId _billId = e.Paramter.GetCustomParameter("SourceId") def OnLoad(e): if _isFormisFromBillEx == 1: this.View.Model.SetValue("FSourceBillName", _sFormIdEx); this.View.Model.SetValue("FSourceBillId", _billId); this.View.Model.SetValue("FIsSave","1") if _sFormIdEx != None and _sFormIdEx != "": if _sFormIdEx == "PUR_ReceiveBill": this.View.Model.SetValue("FCreatedBillName", "STK_InStock"); this.View.Model.SetItemValueByNumber("FCreatedBillType", "RKD01_SYS",0); # this.View.InvokeFieldUpdateService("FCreatedBillType", 0); if _sFormIdEx == "PRD_MO": this.View.Model.SetValue("FCreatedBillName", "PRD_INSTOCK"); this.View.Model.SetItemValueByNumber("FCreatedBillType", "SCRKD01_SYS",0); # this.View.UpdateView(); def DataChanged(e): if e.Field.Key.upper() == "FBARCODE": barCodeInfos = e.NewValue.split("_") rowIndex = e.Row # raise Exception(barCodeInfos[0]) FSOURCEBILLNAME = this.View.Model.GetValue("FSOURCEBILLNAME") # 源单单据类型 sourceBillTypeId = FSOURCEBILLNAME["Id"] # 源单单据单号 sourceBillNo = this.View.Model.GetValue("FSOURCEBILLID") if sourceBillNo == None or sourceBillNo == "": # this.View.Model.SetValue("FSOURCEBILLID",barCodeInfos[4]) this.View.Model.SetValue("FISMAPTOSOURCEBILL","1") tableNamesql = """/*dialect*/ ;WITH #查询表头名 AS ( SELECT t0.FID,t0_l.FNAME,REPLACE(t1e.FFIELDKEY,'FSeq','') AS 'EntryName' ,FKERNELXML.query('//HeadEntity/TableName').value('(TableName)[1]','varchar(max)') as '单据头表名' FROM T_META_OBJECTTYPE t0 INNER JOIN T_META_OBJECTTYPE_L t0_l on t0.FID = t0_l.FID AND t0_l.FLOCALEID = 2052 INNER JOIN T_BD_BARCODEITEMENTRY t1e on t1e.FBILLFORMID = t0.FID INNER JOIN T_BD_BARCODEITEM t1 on t1.FID = t1e.FID AND t1.FBARCODEFIELDKEY = 'FBILLSEQ' WHERE 1=1 AND t0.FID = '{0}' AND FISTEMPLATE = 0 AND FDEVTYPE != 2 AND FMODELTYPEID = 100 ) SELECT t0.单据头表名 AS 'HeadTableName' ,CONCAT(t0.单据头表名,'Entry') EntryTableName ,t0.EntryName FROM #查询表头名 t0 """ nameSet = DBServiceHelper.ExecuteDynamicObject(this.Context, tableNamesql); if nameSet != None and nameSet.Count > 0: sqlL = """/*dialect*/ SELECT t0.FID,t0.FBILLNO ,t0e.FENTRYID,t0e.FSEQ FROM {1} t0 INNER JOIN {2} t0e on t0.FID = t0e.FID INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0e.FMATERIALID WHERE 1 = 1 AND t0.FDOCUMENTSTATUS = 'C' AND t0.FBILLNO = '{0}' AND t1.FNUMBER = '{3}' """.format(sourceBillNo ,nameSet[0]["HeadTableName"] ,nameSet[0]["EntryTableName"] ,barCodeInfos[0]); dataRes = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); if dataRes != None and dataRes.Count > 0: data = dataRes[0]; this.View.Model.SetValue("FBillType", data["FBILLTYPEID"], rowIndex) materialEntity = this.View.Model.BillBusinessInfo.GetEntryEntity("FScanDetailEntity") materialRows = this.View.Model.GetEntityDataObject(materialEntity) materialRows[rowIndex]["BillCode"] = data["FBILLNO"]; materialRows[rowIndex]["BillSeq"] = data["FSEQ"]; # if sourceBillTypeId == "PUR_ReceiveBill": # sqlL = """/*dialect*/ # SELECT t0.FBILLNO,t0.FBILLTYPEID,t0.FID,t0.FSUPPLIERID,t0.FRECEIVERID # ,t0e.FENTRYID,t0e.FSEQ,t1.FNUMBER,t0e.FMATERIALID,t0e.FUNITID # FROM T_PUR_RECEIVE t0 # INNER JOIN T_PUR_RECEIVEENTRY t0e on t0.FID = t0e.FID # INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0e.FMATERIALID # WHERE t1.FDOCUMENTSTATUS = 'C' AND t1.FFORBIDSTATUS = 'A' # AND t0.FBILLNO = '{0}' AND t1.FNUMBER = '{1}' # """.format(sourceBillNo, barCodeInfos[0]) # dataRes = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); # if dataRes != None and dataRes.Count > 0: # data = dataRes[0]; # this.View.Model.SetValue("FBillType", data["FBILLTYPEID"], rowIndex) # materialEntity = this.View.Model.BillBusinessInfo.GetEntryEntity("FScanDetailEntity") # materialRows = this.View.Model.GetEntityDataObject(materialEntity) # materialRows[rowIndex]["BillCode"] = data["FBILLNO"]; # materialRows[rowIndex]["BillSeq"] = data["FSEQ"];