NET-10- 其他-金蝶开发


前言

v……v

参考链接

知识地图二次开发案例演示协同开发云插件实操C#Python插件详解帮助手册实时监控
数据字典工单系统 临时许可申请BOS说明金蝶 --管理中心第一次默认是888888
字段过滤系统体系概述


NET反编译工具:ILSpydnSpy|、VS2022安装.Net Framework4.0方法
结构说明: DynamicObjec1DynamicObject2
报表:报表1报表2报表3报表4报表5报表6最重要的
多Bom:多Bom1多Bom2sql账表双击
其他:BOM史上最全BOM详细讲解PLM中BOM和物料关联关系查询

理论:

plm 物料=>物料库 ;bom=>设计bom库;erp 物料=>物料列表;bom=>物料清单列表
下推:是向下游推送信息,将信息从自己这里推出去产生单据;选单是自己向上游讨要数据。
反写:根据下游单据,回写上游单据的某些字段值
功能技巧点:

1. 组织物料需求进行分配:自动分配;
2. 列表列下拖可以暂时消除该列;
3. 查看列表下查,上查;*全流程跟踪查看更加方便;
4. 过滤框可以对比字段过滤;
5. 批改用python更加简单,字段授权就好;
6. bos里面加个新页签,选所属拆分表就好,一个输入框可以在数据库相加对应的字段;
7.bos里面添加的字段,添加后又删除,数据库没有删除该字段;
8.基础资料,和基础资料属性,可以相应带出(设置引用);

常用表:

//金蝶常用表
项目主档:项目子档:物料
T_BAS_PREBDONE  BGJ_t_EquipmentSchedule
T_BAS_PREBDTWO  BGJ_t_EquipmentScheduleC
T_BD_MATERIAL   T_BD_MATERIAL_L 物料,物料多语言
销售出库、采购入库、退料订单、销售订单、生产订单、生产入库单、
生产用料、采购订单、采购申请、单据类型,生产领料
T_SAL_OUTSTOCK  T_SAL_OUTSTOCKENTRY 
T_STK_INSTOCK   T_STK_INSTOCKENTRY 
T_PUR_MRB       T_PUR_MRBENTRY 退料
T_SAL_ORDER     T_SAL_ORDERENTRY  
T_PRD_MO        T_PRD_MOEntry 
T_PRD_INSTOCK               
T_PRD_PPBOM                 
t_pur_poorder                
T_PUR_REQUISITION    
T_BAS_BILLTYPE
T_PRD_PICKMTRL
-----
组织、应付单、供应商、辅助资料类型(规格型号)、电池明细
单据头关联凭证表(VH表)   
T_ORG_ORGANIZATIONS_L 、T_AP_PAYBILL 、V_FIN_CONTACTTYPE、V_FIN_CONTACTTYPE_L、T_BAS_ASSISTANTDATAENTRY_L T_BAS_ASSISTANTDATA、SFUR_t_Cust_Entry100023
//PLM:
物料库、任务表、为对象关系标准对象扩展表、为PDM关系扩展表、相关对象
T_PLM_PDM_BASE  、T_PLM_PDM_BASE_T、t_plm_pdm_base_r 、t_plm_cfg_relation 、T_PLM_PDM_BASE_m、T_PLM_CFG_RELATEDOBJECT  
//可供联想的表:
 T_BF_TABLEDEFINE、T_BF_INSTANCEENTRY、T_BF_INSTANCESNAP

金蝶代码

C#

一、表单插件:
方法:
BarItemClick、AfterBarItemClick、BeforeSave、AfterSave、EntryBarItemClick
public override void AfterBarItemClick(BOS.Core.DynamicForm.PlugIn.Args.AfterBarItemClickEventArgs e)
//    if(e.BarItemKey.Equals("tbCeShi"))

取值、赋值、刷新//取备注的值 FNote 标识  给单据头,备注赋值,你好
//刷新字段 前台刷新,不和服务器交互
//刷新 整个页面刷新,要和服务器交互,把后台数据库数据刷新过来
//添加一个多选基础资料字段//定义数组,多个客户
//获取单据体的字段值

this.View.ShowMessage(this.View.Model.GetValue("FNote").ToString());
this.View.Model.SetValue("FNote", "你好");
this.View.UpdateView("FNote");this.View.UpdateView("FNote1");this.View.UpdateView();
 this.View.Refresh();
var entryEntity = this.View.BusinessInfo.GetEntryEntity("FEntity");
var entryRows = this.View.Model.GetEntityDataObject(entryEntity);
var FMATERIALID = entryRows[0]["MaterialID_Id"].ToString();
//给数组赋值
//给单据体物料FMaterialId编码,第0行,赋值
//给单据体物料内码ID,第1行,赋值
//单据体第一行,值更新
//扩展使用,第0行,给销售数量赋值100
//扩展使用,第0行,给含税单价赋值88.88
//值更新,数量
//获取单据标题 this.View.GetFormTitle()
//获取单据内码,并转换成字符串.ToString() fid
object[] custs = new object[] { "300638", "322070", "454978" };
this.View.Model.SetValue("F_YDIE_CustS", custs);
this.View.Model.SetItemValueByNumber("FMaterialId", "003", 0);
this.View.Model.SetItemValueByID("FMaterialId", "310992", 1);
this.View.InvokeFieldUpdateService("FMaterialId", 0);
this.View.Model.SetValue("FQty",100,0);
this.View.Model.SetValue("FTaxPrice", 88.88, 0);
this.View.InvokeFieldUpdateService("FQty", 0);
string FormTitle = this.View.GetFormTitle();
string FormTitle = this.View.Model.DataObject["Id"].ToString();
string FormTitle = this.View.Model.GetPKValue().ToString();
//获取焦点,备注
//点击按钮,备注字段锁定,变成灰色
//扩展使用,单据体,备注,行锁定字段
//隐藏备注字段
//锁定,保存按钮
//隐藏,保存按钮
//如果等于客户
this.View.GetControl("FNote").SetFocus();
this.View.GetControl("FNote").Enabled = false;
this.View.GetFieldEditor("FEntryNote",0).Enabled = false;
this.View.GetControl("FNote").Visible = false;
this.View.GetMainBarItem("tbSplitSave").Enabled = false;
this.View.GetMainBarItem("tbSplitSave").Visible = false;
if(e.Field.Key =="FCustId")
LocaleValue title = new LocaleValue("采购入库查询");
this.View.SetFormTitle(title);
//单据体:
this.View.InvokeFormOperation("Save");//保存操作
this.View.Model.DeleteEntryData("FSaleOrderEntry");//删除单据体信息
this.View.UpdateView("FSaleOrderEntry");//刷新,单据体界面
this.View.Model.DeleteEntryRow("FSaleOrderEntry", 0);//逐行,删除单据体分录,0代表第1行
this.View.Model.CreateNewEntryRow("FSaleOrderEntry");//新增行
this.View.Model.CopyEntryRow("FSaleOrderEntry", 0, 1, false);//: 0代表第1行;  1代表复制到第2行; false代表不携带源单关系
 this.View.Model.GetEntryPKValue("FSaleOrderEntry", 0);//获取单据体第1到3行内码,方便后续从数据库操作
 this.View.Model.GetEntryPKValue("FSaleOrderEntry", 1);
 this.View.Model.GetEntryPKValue("FSaleOrderEntry", 2);
//赋值this.View.Model.SetValue();获取行的内码,赋值给新增的字段F_YDIE_EntryID
this.View.Model.SetValue("F_YDIE_EntryID", this.View.Model.GetEntryPKValue("FSaleOrderEntry", 0),0);
this.View.Model.SetValue("F_YDIE_EntryID", this.View.Model.GetEntryPKValue("FSaleOrderEntry", 1),1);        
this.View.Model.SetValue("F_YDIE_EntryID", this.View.Model.GetEntryPKValue("FSaleOrderEntry", 2),2);
this.View.Model.SetValue("FNote", this.View.Model.GetEntryRowCount("FSaleOrderEntry"));//获取单据体,行数

-信息框:
this.View.ShowMessage("你好");
this.View.ShowErrMessage("严重错误");
//MessageBoxOptions.YesNo、MessageBoxOptions.YesNoCancel
this.View.ShowMessage("错误提示,是否继续?",MessageBoxOptions.YesNoCancel,//通过result接收值
                new Action<MessageBoxResult>((result) =>
                {
                    if (result == MessageBoxResult.Yes)
                        this.View.Model.SetValue("FNote", "您选择--是");
                    else if (result == MessageBoxResult.No)
                        this.View.Model.SetValue("FNote", "您选择--否");
                    else if (result == MessageBoxResult.Cancel)
                        this.View.Model.SetValue("FNote", "您选择--取消"););
 //警告
 this.View.ShowWarnningMessage("不能对其操作,请确认",  (result) =>  this.View.Close(); );
//处理结果信息提示框
IOperationResult opResult = new OperationResult();         
opResult.OperateResult.Add(new OperateResult()
{
    Name = "信息提示",
    Message = "成功",
    SuccessStatus = true
});
opResult.OperateResult.Add(new OperateResult()
{
    Name = "信息提示",
    //失败状态,提示
    Message = "失败",
    SuccessStatus = false
});
this.View.ShowOperateResult(opResult.OperateResult);
////校验,如果填写了备注,才能使用"选单"按钮 、当备注为空
if(Convert.ToString(this.View.Model.GetValue("FNote"))=="")
{
    e.Cancel = true;
    this.View.ShowMessage("请填写备注信息");
    return;
}
//询问式,对话框、//提示信息:是、否   https://vip.kingdee.com/article/65887832967054080?productLineId=1
this.View.ShowMessage("备注信息没有填写,是否继续保存?",
MessageBoxOptions.YesNo,
new Action<MessageBoxResult>((result) =>
{
if (result == MessageBoxResult.No)
e.Cancel = true;
}));
if (result == MessageBoxResult.Yes)
    this.View.InvokeFormOperation("Save");
//保存后,触发
base.AfterSave(e);// if(e.OperationResult.IsSuccess)
                    
// DataChanged 数据变化时
base.DataChanged(e);// 
//如果等于客户
if(e.Field.Key =="FCustId")
{
    this.View.Model.SetValue("FNote", "客户变化后赋值到备注");
    this.View.Model.SetValue("FNote1", "客户变化后赋值到备注1");
    this.View.UpdateView("FNote");
    this.View.UpdateView("FNote1");
    //给A字段FCustIdNew,赋新值e.NewValue,更新前的值
    this.View.Model.SetValue("FCustIdNew",e.NewValue);
    //给B字段FCustIdOld,赋旧值e.OldValue,更新后的值
    this.View.Model.SetValue("FCustIdOld", e.OldValue);
}
//如果等于物料
if (e.Field.Key == "FMaterialId")
{
//给项目名称,赋值
//e.Row 区别是哪一行,+动态变化
this.View.Model.SetValue("F_YDIE_ProjectName", "项目名称" +e.Row.ToString(), e.Row);
}
base.BeforeF7Select(e);=> if(e.FieldKey.Equals("FCustId"))
{
//过滤条件,限定,只能选择某些客户
e.ListFilterParameter.Filter = "FNumber ='003'";
}

14
public override void AfterBindData(EventArgs e)
this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW)//ADDNEW、EDIT、VIEW、DISASSEMBLY新增、编辑、查看、卸载
//https://vip.kingdee.com/article/66819190752943360?productLineId=1  下推时参考

base.CustomEvents(e);=>//第一个判断,如果是条码
//           if(e.Key.Equals("F_YDIE_TM"))
///捕获,回车                if(e.EventName == "EnterKeyPressed")

//
17.Context属性
this.View.Model.SetValue("F_YDIE_Text", Convert.ToString(this.Context.CurrentOrganizationInfo.ID));
this.View.Model.SetValue("F_YDIE_Text1", Convert.ToString(this.Context.CurrentOrganizationInfo.Name));
this.View.Model.SetValue("F_YDIE_Text2", Convert.ToString(this.Context.CurrentUserTimeZone));
this.View.Model.SetValue("F_YDIE_Text3", Convert.ToString(this.Context.DatabaseType));
this.View.Model.SetValue("F_YDIE_Text4", Convert.ToString(this.Context.IsMultiOrg));
this.View.Model.SetValue("F_YDIE_Text11", Convert.ToString(this.Context.UserId));
this.View.Model.SetValue("F_YDIE_Text31", Convert.ToString(this.Context.UserName));
this.View.Model.SetValue("F_YDIE_Text41", Convert.ToString(this.Context.DBId));
this.View.Model.SetValue("F_YDIE_Text21", Convert.ToString(this.Context.UserEmail));
this.View.Model.SetValue("F_YDIE_Text5", Convert.ToString(this.Context.UserPhone));
// this.View.UpdateView();

18. ListShow 选单
//定义一个字段,新建一个listShowParameter实例  
//FormId你要调用那个单据的列表。通过打开未扩展的销售订单,找到唯一标识
//IsLookUp弹出的列表界面是否有“返回数据”按钮
//全部显示,默认全部显示 BaseList、List
//是否显示复选框。默认是true,如果false就是不显示     
ListShowParameter listShowParameter = new ListShowParameter();
listShowParameter.FormId = "SAL_SaleOrder";
listShowParameter.IsLookUp = true;
this.View.ShowForm(listShowParameter);
listShowParameter.ListType = Convert.ToInt32(BOSEnums.Enu_ListType.List);
listShowParameter.MultiSelect = false;
listShowParameter.CustomParams.Add("FBillNo", Convert.ToString(this.View.Model.GetValue("FBillNo")));//传递参数
FBillNo = this.View.OpenParameter.GetCustomParameter("FBillNo").ToString();//接受参数
this.View.ShowForm(listShowParameter,delegate(FormResult result)
{
    //读取返回值
    object returnData = result.ReturnData;
    //判断是否是RowCollection
    if(returnData is ListSelectedRowCollection)
    {
        //如果是,执行,转换格式
ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
        //如果不是空值,说明有返回值
        if(listSelectedRowCollection !=null)
        {
            //获取值.0代表第一行值
DynamicObjectDataRow datarow = (DynamicObjectDataRow)listSelectedRowCollection[0].DataRow;
this.View.Model.SetValue("F_YDIE_Text6", datarow.DynamicObject["FID"].ToString());
this.View.Model.SetValue("F_YDIE_Text61", datarow.DynamicObject["FBillNo"].ToString());
this.View.Model.SetValue("F_YDIE_Text62", datarow.DynamicObject["FDate"].ToString());
        }
    }
});

19. 打开外部链接页面:
第一种方式:
JSONObject webobj = new JSONObject();
webobj["source"] = @"http://www.baidu.com";webobj["height"] = 600;webobj["width"] = 910;
//是否新窗口打开
webobj["isweb"] = true;webobj["title"] = "百度";
this.View.AddAction("ShowKDWebbrowseForm", webobj);
第二种方式:
this.View.GetControl("F_Jac_Link").SetCustomPropertyValue("百度", "http://www.baidu.com?key=kingdee");
this.View.GetControl("F_Jac_Link").SetCustomPropertyValue("QQ", "http://www.qq.com?key=kingdee");
第三种方式:可以处理模版:
WebSite/TemplateFiles/demo.xlsx
this.View.GetControl("F_Jac_Link").SetCustomPropertyValue("文件模版下载", "http://localhost:1700/k3cloiud/TemplateFiles/demo.xlsx");

    
二、列表插件
1. 获取所选行的主键:
//选择的行,获取所有信息,放在listcoll里面
//获取所选行的主键,赋值给一个数组listKey单据头FID内码
//获取所选行的主键,赋值给一个数组listKey单据体FID内码
ListSelectedRowCollection listcoll=  this.ListView.SelectedRowsInfo;             
string[] listKey = listcoll.GetPrimaryKeyValues();
string[] listKey = listcoll.GetEntryPrimaryKeyValues();
//获取行选择信息
//定义字段,赋值
//通过循环,读取数据
this.ListModel.GetData(listcoll);
DynamicObjectCollection dycoll = this.ListModel.GetData(listcoll);
for(int i =0;i<dycoll.Count;i++)
{
    info = info + "," + dycoll[i]["FBillNo"];
    info = info + "," + dycoll[i]["FDate"];
}


四、操作服务插件
操作服务插件的7事件:
1.OnPrepareOperationServiceOption操作初始化时,确认操作执行参数
2.OnPreparePropertys 数据加载前,确保需要的属性被加载  
3.OnAddValidators操作执行前,加载操作校验器 
4.BeforeExecuteOperationTransaction 操作执行前,事务开始前事件 
5.BeginOperationTransaction操作执行前,事务开始后事件
6.EndOperationTransaction操作执行后,事务结束前
7.AfterExecuteOperationTransaction操作执行后,事务结束后
反审核
一、采购订单下推生成下游单据收料通知单后,收料通知单后保存状态,反审核采购订单,自动删除下游单据;
二、如果下游单据收料通知单已经审核,则采购订单不允许反审核,

# 控件
https://vip.kingdee.com/school/topic/317780091726323968?channel_level=%E9%87%91%E8%9D%B6%E4%BA%91%E7%A4%BE%E5%8C%BA%7C%E6%90%9C%E7%B4%A2%7C%E7%BB%BC%E5%90%88&productLineId=39 //控件模型介绍
# 学习:
https://vip.kingdee.com/school/learnPath/315173083001044736?productLineId=39&isKnowledge=2
获取单据体数据包:
方式一:
Entity entity = this.View.BusinessInfo.GetEntity("FEntityScanCode");
DynamicObjectCollection rowObjs = this.View.Model.GetEntityDataObject(entity);
DynamicObject EntryRow = rowObjs[i] as DynamicObject;
方式二:
DynamicObject obj = this.View.Model.DataObject as DynamicObject;
Entity entity = this.View.BusinessInfo.GetEntity("FTreeEntity");
DynamicObjectCollection entityrows = entity.DynamicProperty.GetValue(obj) as DynamicObjectCollection;
DynamicObject EntryRow = entityrows[i] as DynamicObject;                  
    
       
//sql语句常用:
1. 查看管理中心版本
select FVersion as 版本,* from T_bos_installedpackage where FPKGID='K3Cloud_DC_VERSION'
2. 重置数据中心管理员密码为6个8,注意选择执行的数据库为对应的业务数据中心数据库
update t_sec_user set fpassword='9EF0664B011C3DC6305C8B213378BACC2451FAEA', fmemo='8d2fea58-cda1-4035-9024-56cc6df8957c' where fuserid=16394

//开发理论:
1.表单插件: AbstractBillPlugIn 
2.列表插件:AbstractListPlugIn
3.动态表单插件: AbstractDynamicFormPlugIn
4.服务插件:AbstractOperationServicePlugIn
表单构建插件:AbstractDynamicWebFormBuilderPlugIn
过滤插件:    AbstractListFilterPlugIn
元数据插件:AbstractDynamicFormMetaServicePlugIn
表单服务插件:AbstractAppBusinessService
账表表单插件:AbstractSysReportPlugIn
单据转换插件: AbstractConvertPlugIn
反写插件


//列表数据量过大:优化考虑
1. 列表每页显示行数过多(大多设置10000)导致
2. 列表首次进入不查询数据
3. 服务器的配置
4. 软件调整重点在尽可能地减少列数方向出发,尽量把列数减少到40列以下
通过合并列,把完全只读的多个列,尤其是数字列合并为一个文本列,这样可以减少一半以上的列;
5. 数据库设置索引

//报错:
金蝶给的建议:
根据报错的日志。
C:/Program Files (x86)/Kingdee/K3Cloud/ManageSite/App_Data/Packages/Install/a5c02939-231e-4080-b150-7350deb8e639/_2023_04_28_13_55_431.0.0.0.kdpkg”的访问被拒绝
C:/Windows/Temp
C:/Users/Administrator/AppData/Local
1.这个三个文件夹授权everyone用户完全控制的权限
2.关闭杀毒软件(比如火绒、360杀毒等)后可正常安装补丁。
3. 用管理员身份运行
正确的解决方案:
C:/Program Files (x86)/Kingdee/K3Cloud/ManageSite/App_Data/Packages/Install/a5c02939-231e-4080-b150-7350deb8e639/2023_04_28_13_55_431.0.0.0.kdpkg”
这个路径下的2023_04_28_13_55_431.0.0.0.kdpkg包,换成我们现在的补丁包2.1.1.32.2.kdpkg,导入时  勾选 允许重复导入,允许重复执行  

//可用量
1. 预留关系表头:T_PLN_RESERVELINK,字段FRESERVETYPE:1:弱预留 3:强预留
2. 可用量是否可以设置为 "库存量-强预留", 而不是"库存量-强预留-弱预留"? 
1. T_PLN_RESERVELINK(预留表头)
需求来源类型[td]FDEMANDFORMID[td]记录发生预留的需求单据信息
需求来源内码[td]FDEMANDINTERID[td]记录发生预留的需求单据信息
2. T_PLN_RESERVELINKENTRY(预留表体)
供给类型 FSUPPLYFORMID=》需求单据信息
供给单内码 FSUPPLYINTERID=》即时库存的内码GUID预留类型 FLINKTYPE =》0:手工产生 1:单据转换产生 2:MRP/MPS产生 4:锁库产生
强预留:预留类型为强预留时,被预留对象不可被其他单据预留或领用。弱预留:预留类型为弱预留,被预留对象可以被其他单据领用或被优先级更高的需求单据预留。
上面就是差异,主要体现在预留的强度上,说白了就是强预留类似特供的,供需关系被定死了,弱预留是可以按照优先级进行重新分配供需关系的。
select top 10 pln.FRESERVETYPE,plnE.FBASEQTY ,plnE.FSUPPLYFORMID,plnE.FSUPPLYINTERID,mat.FNUMBER,plnE.FLINKTYPE,* from T_PLN_RESERVELINK pln ,T_PLN_RESERVELINKENTRY plnE , T_BD_MATERIAL mat
where pln.fid=plnE.fid 
and mat.FMATERIALID=plnE.FMATERIALID
and plnE.FSUPPLYFORMID ='STK_Inventory'
and mat.FNUMBER='111040100022'

select top 10 inv.fbaseqty,mat.FNUMBER,* from T_STK_INVENTORY inv, T_BD_MATERIAL mat
where mat.FMATERIALID=inv.FMATERIALID
and mat.FNUMBER='111040100022'

Python

# 金蝶python代码参考
#1.小demo
import clr
clr.AddReference('mscorlib')
from System import *
def BarItemClick(e):
    if e.BarItemKey=="tbTest":        
        userName = this.Context.UserName;
        msg = userName + ",您好!";
        this.View.ShowMessage(msg);
#2.SQL拼接
import clr
clr.AddReference('mscorlib')
clr.AddReference('Kingdee.BOS.App')
from System import *
from Kingdee.BOS.App.Data import *
def BarItemClick(e):
    if e.BarItemKey=="tbExecute":        
        # 修改当前登录用户的描述
        userId = this.Context.UserId.ToString();
        # 字符串拼接方式1(直接加号拼接)
        sql = "UPDATE T_SEC_USER SET FDESCRIPTION=N'哈哈' WHERE FUSERID="+userId;
        # 字符串拼接方式2(Python语法)
        #sql = "UPDATE T_SEC_USER SET FDESCRIPTION=N'{0}' WHERE FUSERID={1}".format("哈哈",userId);
        # 字符串拼接方式3(Python语法)
        #sql = str.Format("UPDATE T_SEC_USER SET FDESCRIPTION=N'{0}' WHERE FUSERID={1}","哈哈",userId);
        # 字符串拼接方式4(C#语法,需引用mscorlib)
        #sql = String.Format("UPDATE T_SEC_USER SET FDESCRIPTION=N'{0}' WHERE FUSERID={1}","哈哈",userId);
        # 多行文本
        #sql = """/*dialect*/
        #UPDATE T_SEC_USER 
        #SET FDESCRIPTION=N'哈哈哈' 
        #WHERE FUSERID="""+this.Context.UserId.ToString();
        # 执行SQL
        count = DBUtils.Execute(this.Context,sql);
        msg =  String.Format("更新成功,SQL:{0},受影响行数:{1}",sql,count);
        this.View.ShowMessage(msg);
# 抛异常
sql = "SELECT FNAME FROM 1T_SEC_USER WHERE FUSERID="+this.Context.UserId.ToString();
raise Exception("问题SQL:"+sql);
# Lambda表达式
import clr
clr.AddReference('mscorlib')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Util import *
def BarItemClick(e):
    if (e.BarItemKey == "Test"):
        this.View.ShowMessage("是否继续?", MessageBoxOptions.YesNo, lambda result:DoSth(result));
def DoSth(result):
    if (result == MessageBoxResult.Yes):
        this.Model.SetValue("F_Jac_Text", "是");
    else:
        this.Model.SetValue("F_Jac_Text", "否");
#审核代码不让批改
import clr
clr.AddReference('Kingdee.BOS') 
clr.AddReference('Kingdee.BOS.Core') 
from Kingdee.BOS.Core import * 
from Kingdee.BOS.Core.Bill import * 
from Kingdee.BOS.Core.Bill.PlugIn import *
from Kingdee.BOS.Core.Util import *
def BarItemClick(e): 
    if e.BarItemKey=="WUBG_BatchChange": 
        if this.ListView.CurrentSelectedRowInfo==None: 
            this.View.ShowErrMessage("请选择数据行") 
            return 
        selectInfos = this.ListView.SelectedRowsInfo;
        statusField = this.ListView.BillBusinessInfo.GetBillStatusField();
        statusName = statusField.FieldName;        
        for info in selectInfos:
    	    status = info.DataRow[statusName];
            if(status=="C"):
                this.View.ShowErrMessage("已审核的基础资料不能批改!");
    		    return

        param = BillShowParameter() 
        param.FormId = FormIdConst.BD_BulkEdit 
        this.View.ShowForm(param)
#批改
import clr
clr.AddReference('Kingdee.BOS') 
clr.AddReference('Kingdee.BOS.Core') 
from Kingdee.BOS.Core import * 
from Kingdee.BOS.Core.Bill import * 
from Kingdee.BOS.Core.Bill.PlugIn import *
def BarItemClick(e): 
    if e.BarItemKey=="ora_tbBulkEdit": 
        if this.ListView.CurrentSelectedRowInfo==None: 
            this.View.ShowErrMessage("请选择数据行") 
            return 
        param = BillShowParameter() #DynamicFormShowParameter();
        param.FormId = FormIdConst.BD_BulkEdit 
        this.View.ShowForm(param)

金蝶要掌握技能

金蝶:

  1. 熟悉SqlServer、oracle数据库,具备数据库性能调优技能;
  2. 从事有关金蝶接口,插件或产品功能开发经验。
posted @ 2023-08-10 13:52  cactus9  阅读(290)  评论(0编辑  收藏  举报