电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

销售订单新变更单与审核的销售订单Python干预网控试例

来源:金蝶云社区作者:金蝶2024-09-163

销售订单新变更单与审核的销售订单Python干预网控试例

    本文以版本PT-146926 [8.0.0.20220922]为背景书写,销售订单审核后,默认是除了表头备注字段外,其它所有字段都不能编辑,如果要编辑则可通过销售订单新变更单来完成(通版认为审核后的销售订单不会在编辑界面上修改,只会通过变更单来变相实现修改),因此如果订单正在由账号A变更,那么另一用户B打开销售订单时不会提示有诸如'销售订单正在变更中'的提示,这种控制符合大多数客户的需求。但是有客户提单反馈在销售订单二开的某些字段配置了审核后可编辑,部门A下的操作员会在销售订单审核后编辑某些二开字段,而部门B的人会通过销售订单新订单变更进行变更,部门A和部门B的人可能会修改同一字段,这种情况下就可能存在冲突,此时客户肯定希望能有相关提示信息。本文将演示如何用Python插件二开处理此需求。  

    首先,打开BOS IDE,扩展销售订单,在表单插件中注册一个Python表单插件,如下图1-1所示:

image.webp

图1-1


    Python脚本代码如下:(注:请使用附件中的代码,不要直接在论坛上复制以下脚本)

# -*- coding: utf-8 -*-
#销售订单单据插件试例

import clr
clr.AddReference('System')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.App')

from Kingdee.BOS.Core import *
from System import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System.Collections.Generic import *
from Kingdee.BOS.App.Data import * 

def AfterBindData(e):
    docStatus = Convert.ToString(this.View.Model.GetValue("FDocumentStatus"));
    if docStatus == 'C':
        id = Convert.ToInt64(this.View.Model.GetPKValue());
        strSQL = "SELECT USR.FNAME FROM T_BAS_NETWORKCTRLRECORDS CTL INNER JOIN T_SEC_USER USR ON CTL.FUSERID = USR.FUSERID WHERE CTL.FINTERID = {0} AND CTL.FNETCTRLID = 'TBLISTORDERCHANGE' AND USR.FUSERID <> {1} ";
        strSQL = strSQL + " UNION SELECT USR.FNAME FROM T_SAL_XORDER O INNER JOIN T_SAL_XORDERFIN OFIN ON O.FID = OFIN.FID INNER JOIN T_SEC_USER USR ON O.FCREATORID = USR.FUSERID WHERE O.FPKIDX = {0} AND USR.FUSERID <> {1} AND OFIN.FISACTIVE = 'A' AND O.FCANCELSTATUS = 'A'";
        strSQL = String.format(strSQL,  id, this.Context.UserId);
        name = DBUtils.ExecuteScalar[String](this.Context, strSQL, String.Empty);     
        if name is not None and name != '':
            this.View.ShowWarnningMessage(name + " 正在变更单据,请勿修改!");

def BeforeDoOperation(e):
    opName = e.Operation.FormOperation.Operation.ToUpperInvariant();
    if opName == "ORDERCHANGE":
        docStatus = Convert.ToString(this.View.Model.GetValue("FDocumentStatus"));
        if docStatus == 'C': 
            id = Convert.ToInt64(this.View.Model.GetPKValue());
            strSQL = "SELECT USR.FNAME FROM T_BAS_NETWORKCTRLRECORDS CTL INNER JOIN T_SEC_USER USR ON CTL.FUSERID = USR.FUSERID WHERE CTL.FINTERID = {0} AND CTL.FNETCTRLID = '9b5297218b5f41bcaeab09e57949ea6e' AND USR.FUSERID <> {1}";
            strSQL = String.format(strSQL,  id, this.Context.UserId);
            name = DBUtils.ExecuteScalar[String](this.Context, strSQL, String.Empty);
            if name is not None and name != '':
                this.View.ShowWarnningMessage("单据已被用户 " + name + " 打开,请勿变更!");
                e.Cancel = True;


    上文在AfterBindData方法中的Sql脚本通过UNION语句从网控记录表和销售订单新变更单表中查询数据,这里作个简单说明,如果有另一用户点变更操作跳转进销售订单新变更编辑界面,但没有保存此时

销售订单新变更单与审核的销售订单Python干预网控试例

本文以版本PT-146926 [8.0.0.20220922]为背景书写,销售订单审核后,默认是除了表头备注字段外,其它所有字段都不能编辑,如果要编辑...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信