python插件开发-BOM保存前新增物料

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

python插件开发-BOM保存前新增物料

公司业务部门提出需求,希望一些特殊物料依据一定的规则在保存BOM时,能自动增加到单据体中,

下面是利用python编写的插件,插件注册在菜单插件中,特殊物料按照一定的规则通过SQL存储过程获取。

import clr
clr.AddReference("mscorlib")
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.ServiceHelper')

from Kingdee.BOS 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.Args import *
from Kingdee.BOS.Core.Metadata import *
from Kingdee.BOS.Core.Validation import *
from Kingdee.BOS.Log import Logger
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.Bill.PlugIn import *
from Kingdee.BOS.Core.Bill.PlugIn.Args import *
from Kingdee.BOS.App.Data import *

def BeforeDoOperation(e):
    opCode=e.Operation.FormOperation.Operation.ToUpperInvariant();#触发操作代码大写,例如保存:SAVE
    if(opCode=="SAVE"):        
        fmodel = this.View.Model.GetValue("F_BLNS_Text")                        #获取表头规格型号
        FMATERIALID = this.View.Model.GetValue("FMATERIALID",0)         #获取表头物料ID
        FDESCRIPTION = this.View.Model.GetValue("FDESCRIPTION",0)      #获取备注内容
        FFNUMBER = FMATERIALID["Number"]
        FNAME = FMATERIALID["Name"]
        FNAME = str(FNAME)                                                                          #此处一定要转为str
        FDESCRIPTION = str(FDESCRIPTION)
        FNAME = FNAME.rstrip()  #清除字符串后的空格                                    
        FDESCRIPTION = FDESCRIPTION.rstrip()  #清除字符串后的空格

        #只有符合条件的BOM才新增物料
        if FFNUMBER[0:3] == 'QGC' and FNAME == "改造机器" and FDESCRIPTION != "系统自动生成":        
            #执行MSSQL存储过程,获取物料编码
            sql = """/*dialect*/exec ZRL_ZJ_QueryMaterial  '{0}' """.format(fmodel)
            result = DBUtils.ExecuteDataSet(this.Context, sql)

            #操作盒贴纸
            if result and result.Tables.Count > 0 and result.Tables[0].Rows.Count > 0:                            
                    data = result.Tables[0].Rows

                    # 用于存放两个fnumber数值的列表
                    fnumber_list = []

                    for row in data:
                        # 通过列名访问特定字段的值
                        fnumber = str(row['fnumber'])
                        fnumber_list.append(fnumber)

                        # 单据体最后新增一个空白行,并更新编码、备注信息  
                        this.View.Model.CreateNewEntryRow("FTreeEntity");#为单据体新增一行 
                        row = this.View.Model.GetEntryCurrentRowIndex("FTreeEntity");#获取单据体当前焦点行号                                
                        this.View.Model.SetItemValueByNumber("FMATERIALIDCHILD",fnumber,row-1)  #更新物料编码                                      
                        this.View.Model.SetValue("FEFFECTDATE",'1998/8/8',row-1)  #更新生效日期    
                        this.View.Model.SetValue("FMEMO",'系统生成',row-1)  #更新备注  
                        this.View.UpdateView("FMATERIALIDCHILD");#刷新字段 

                    this.View.Model.SetValue("FDESCRIPTION","系统自动生成",0)    #更新表头数据源    
                    this.View.ShowWarnningMessage("特殊物料[" + (','.join(fnumber_list)) + "]已插入BOM子项,请留意!")  
        else:
            this.View.ShowWarnningMessage("请勿重复插入特殊物料!")


python插件开发-BOM保存前新增物料

公司业务部门提出需求,希望一些特殊物料依据一定的规则在保存BOM时,能自动增加到单据体中,下面是利用python编写的插件,插件注册在菜单...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息