python 插件 批量生成领料单

批量生成领料单


import clr
clr.AddReference("System")
clr.AddReference("System.IO")
clr.AddReference("System.Web.Extensions")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Newtonsoft.Json")
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.BOS.WebApi.Client')
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.ServiceFacade.Common")

import sys
import System
import System.IO
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 System.Net import *
from System.Text import *
from System.IO import *
from Kingdee.BOS.App.Data import *
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 *
from Kingdee.BOS.ServiceFacade import *
from System.Collections.Generic import *
from System.Threading import *
from System.Security.Cryptography import *
from System.Web.Script.Serialization import *
from System.Collections.Generic import Dictionary
from Newtonsoft.Json.Linq import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.WebApi.Client import K3CloudApiClient
from Kingdee.BOS.JSON import *

#reload(sys)
sys.setdefaultencoding('utf-8')

def dynamicobjecttojson(dyobject):
    jsonSerializerProxy = JsonSerializerProxy(Encoding.UTF8, False)
    jsonData = jsonSerializerProxy.Serialize(dyobject)
    return jsonData
def BarItemClick(e):	
	if e.BarItemKey=="SRMB_tbButton_PickUpSubstance": 	
		
		user = this.Context.UserName;		
		url = 'http://0.0.0.111/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc';
		client =K3CloudApiClient(url);
		fromID = this.View.BillBusinessInfo.GetForm().Id;
		sql="exec xxxx_GetApiAdress";		
		dbs = DBServiceHelper.ExecuteDynamicObject(this.Context, sql, None);
		for i in range (len(dbs)):
			db = dbs[i];
			loginResult=client.Login(db['vvv'],db['ccc'],db['FPASSWORD'],2052);			
		
		selectedRowsInfo = this.ListView.SelectedRowsInfo;
		datas = this.ListModel.GetData(selectedRowsInfo);		
		if (datas.Count <= 0):
			this.View.ShowWarnningMessage("请至少选择一行数据!");
			return;
		fidlist="";
		for row in selectedRowsInfo:		
			fidlist=fidlist+str(row.EntryPrimaryKeyValue)+",";
		opResult = OperationResult();
		
		words = fidlist.split(",");
		words2=list(set(words));		
		iok=0;
		
		obj0Arr=JSONArray();	
		root=JSONObject();	
		strArr=JSONArray();
		
		root.Put("NeedUpDateFields",strArr);
		root.Put("IsDeleteEntry","false");	
		flagcheck=0;	
		for fid in words2:
					
				
			objArr=JSONArray();	
			obj0=JSONObject();			
			
			sql="exec xxxx_GET_GlassPickUpBill "+fid;
			listvalue="";
			dbs = DBServiceHelper.ExecuteDynamicObject(this.Context, sql, None);
			for i in range (len(dbs)):
				db = dbs[0];	
				obj0.Put("FID",0);				
				obj1=JSONObject();
				obj1.Put("FNumber","SCLLD01_SYS");
				obj0.Put("FBillType",obj1);			
				obj0.Put("F_UNW_Text_ca9",db['FSALEORDERNO']);
				obj0.Put("F_SRMB_Text_qtr",db['FMOBILLNO']);			
				obj1=JSONObject();
				obj1.Put("FNumber",db['dept']);
				obj0.Put("FWorkShopId",obj1);
			iok=0;
			for i in range (len(dbs)):
				db = dbs[i];	
				obj=JSONObject();
				
				obj.Put("FEntryID",0);
				obj1=JSONObject();
				obj2=JSONObject();
				obj1.Put("FNumber",db['mofnumber']);
				obj.Put("FParentMaterialId",obj1);
				
				obj.Put("FMoBillNo",db['FMOBILLNO']);
				obj.Put("FMoEntryId",db['FMOENTRYID']);
				
				obj1=JSONObject();			
				obj1.Put("FNumber",db['fnumber']);
				obj.Put("FMaterialId",obj1);
				
				obj1=JSONObject();			
				obj1.Put("FNumber",db['dw']);
				obj.Put("FUnitID",obj1);
				
				obj.Put("FAppQty",db['truecount']);
				obj.Put("FActualQty",db['truecount']);
				
				obj1=JSONObject();			
				obj1.Put("FNumber","01");
				obj.Put("FStockId",obj1);
				
				obj.Put("FSrcBillNo",db['FBILLNO']);
				obj.Put("FEntrySrcEnteryId",db['fentryid']);
				obj.Put("FPPBomBillNo",db['FBILLNO']);
				obj.Put("FPPBomEntryId",db['fentryid']);
				obj.Put("FBaseStockActualQty",db['truecount']);
				obj.Put("FBaseActualQty",db['truecount']);
				
				obj1=JSONObject();			
				obj1.Put("FNumber","100");
				obj.Put("FOwnerId",obj1);
				obj1=JSONObject();			
				obj1.Put("FNumber","100");
				obj.Put("FParentOwnerId",obj1);
				
				obj1=JSONObject();			
				obj1.Put("FNumber",db['dept']);
				obj.Put("FEntryWorkShopId",obj1);
				obj1=JSONObject();			
				obj1.Put("FNumber",db['dw']);
				obj.Put("FBaseUnitId",obj1);
				
				obj1=JSONObject();			
				obj1.Put("FNumber",db['dw']);
				obj.Put("FStockUnitId",obj1);
				
				if db['fdatavalue']=="包装组":
					obj1=JSONObject();			
					obj1.Put("FNumber","01");
					obj.Put("F_SRMB_Assistant",obj1);
				else:
					obj1=JSONObject();			
					obj1.Put("FNumber","02");
					obj.Put("F_SRMB_Assistant",obj1);		
								
				
				objArr.Add(obj);	
				flagcheck=1;			
				iok=iok+1;		
				obj0.Put("FEntity",objArr);	
			if iok>0:	
				obj0Arr.Add(obj0);				
			
			
			
			
		root.Put("Model",obj0Arr);	
		root.Put("BatchCount",1);	
		root.Put("IsVerifyBaseDataField","false");	
		root.Put("IsAutoAdjustField","false");
		root.Put("IgnoreInterationFlag","false");
		root.Put("IsControlPrecision","false");
		root.Put("ValidateRepeatJson","false");
		
		
		
		if flagcheck==1:			
			saveR=client.BatchSave("PRD_PickMtrl",dynamicobjecttojson(root));
			result_dict = str(saveR)
			count1 = result_dict.find("true");
			count2 = result_dict.find("false");
			if count1>0:
				operate2 = OperateResult(Name = "执行结果"  ,Message = saveR   ,SuccessStatus = True);		
				opResult.OperateResult.Add(operate2);
			if count2>0:
				operate2 = OperateResult(Name = "执行结果"  ,Message = saveR   ,SuccessStatus = False);		
				opResult.OperateResult.Add(operate2);
		
		#this.View.Refresh();
		if flagcheck==0:
			operate2 = OperateResult(Name = "执行结果"  ,Message = "没有符合条件的玻璃数据"   ,SuccessStatus = False);		
			opResult.OperateResult.Add(operate2);
		this.View.ShowOperateResult(opResult.OperateResult)
posted @ 2026-06-30 08:50  虚拟过客之IT老男人  阅读(1)  评论(0)    收藏  举报