当前位置:首页>python>金蝶云星空二开python列表插件之调用sql更新修改数据,批量应收单获取毛利率!!

金蝶云星空二开python列表插件之调用sql更新修改数据,批量应收单获取毛利率!!

  • 2026-09-08 22:00:10
金蝶云星空二开python列表插件之调用sql更新修改数据,批量应收单获取毛利率!!

大家好,我叫大伟,首先,今天初八,是大多少小伙伴们开工的日子,在这里祝大家开工大吉,来福来财,事事顺心如意!!很多小伙伴后台私心更新太慢,看到之后激起了我更新的动力,话不多说,咱们继续倒腾金蝶二开插件案列分享,大部分都是非常实用而且能够提升工作效率和增强体验感的小功能。

在日常业务中,财务需要知道每个产品的毛利率,并且需要显示业务单据明细中,目前的标准功能是没有的,则就需要二开了,其实很简单,上一期也介绍了调用sql更新获取数据的应用场景非常广泛且灵活多变,能解决很多很问题,这期接着继续延伸到列表插件。

本次案例以应收单为例,当然你可以放到销售出库单和退货单,这个可以根据实际的业务需求来实现,做这个功能的背景是,应收会计需要知道每个商品的毛利率,来统计相关财务利润报表,展现相关产品的利润指标,交由上级领导或者老板进行查阅。大概思路是,通过按钮事件BarItemClick调用sql语句更新毛利率,支持手工点击获取全部毛利率,或者勾选需要获取毛利率的明细行。接下来废话不多说,直接上干货。

Python插件案例一之列表插件

调用SQL更新修改数据

(批量获取应收单毛利率)

代码如下

import clrclr.AddReference('System.Data')clr.AddReference('Kingdee.BOS')clr.AddReference('Kingdee.BOS.Core') clr.AddReference('Kingdee.BOS.App')from System.Data import *from Kingdee.BOS import *from Kingdee.BOS.App.Data import *from System import*from System.ComponentModel import*from System.Collections.Generic import*from System.Text import*def BarItemClick(e):     if e.BarItemKey=="UZBE_GETDATE":      selectedRowsInfo=this.ListView.SelectedRowsInfo; #获取选中列表数据包    entryIDs=selectedRowsInfo.GetEntryPrimaryKeyValues()#获取选中的单据明细内码ID    udpateCondition="";    if entryIDs is None or entryIDs.Count == 0: #为空是未选中行,则更新半年内        udpateCondition=" t2.FDATE >= DATEADD(MONTH, -6, GETDATE())   AND t2.FDATE <= GETDATE()"; #获取半年内的毛率    else:        EnteryIdList=List[str]();     for entryID in entryIDs:        updateEnteryID="'"+str(entryID)+"'";	EnteryIdList.Add(updateEnteryID);    udpateCondition=(" t1.FENTRYID in ({0}) ").format(str.Join(",",EnteryIdList)); #获取需更新明细内码    updateSql=("""/*dialect*/ UPDATE t_AR_receivableEntry      SETF_VJJQ_RATE=        STR(            ROUND(                CASE                    WHEN (CASEWHEN t2.FCURRENCYID =7THEN t1.FNOTAXAMOUNT ELSE t1.FNOTAXAMOUNTFOR END) <>0                    THEN ((CASEWHEN t2.FCURRENCYID =7THEN t1.FNOTAXAMOUNT ELSE t1.FNOTAXAMOUNTFOR END- t1.FCOSTAMTSUM) *100.0)                          /CASEWHEN t2.FCURRENCYID =7THEN t1.FNOTAXAMOUNT ELSE t1.FNOTAXAMOUNTFOR END                    ELSE0                END,                 2            ), 10, 2        ) + '%'    FROM t_AR_receivableEntry t1     INNER JOIN t_AR_receivable t2 ON t1.fid = t2.fid    WHERE t1.FNOTAXAMOUNTFOR <> 0      AND t1.FCOSTAMTSUM <> 0  AND  {0}  """).format(udpateCondition);    x=DBUtils.Execute(this.Context,updateSql);    this.View.Refresh();#刷新    if x==0or x==None:        this.View.ShowMessage("暂无需要更新的毛利率")    else:        this.View.ShowMessage("本次更新了"+str(x)+"条毛利率")

操作步骤如下

1、打开BOS设计器,找到需要修改的单据,如果单据是只读状态,不要慌!只需在单据上右键点击【扩展】,就能以可编辑模式打开

2、注册Python脚本,进入【表单插件】配置,注册下面的Python脚本代码,填写脚本名称,保存配置

3、保存所有配置,修改单据,展示效果!如下图:

3.1 打开应收单列表,勾选需要获取的明细毛利率,当然不勾选则获取半年内毛利率,如下图:

3.2 点击获取毛利率呈现的结果,如下图:

温馨提示

  1. 增加一个毛利率字段,将计算结果放到该字段(将SETF_VJJQ_RATE替换为自己的数据库字段)

  2. 按钮标识:需要修改成自己的标识名称,否则无法触发(将按钮标识UZBE_GETDATE标标识替换称自己的)。

  3. 如果是多个菜单按钮执行某些操作逻辑,一定要添加判断语句(使用if elif结构),只处理你需要监听的菜单项
  4. 复制脚本注意缩进,严格遵守PYTHON缩进规则,否则保存会报错

如果这篇文章对你有帮助,欢迎点赞、收藏、转发!有任何问题也欢迎在评论区留言交流!

最新文章

随机文章