大家好,我叫大伟,首先,今天初八,是大多少小伙伴们开工的日子,在这里祝大家开工大吉,来福来财,事事顺心如意!!很多小伙伴后台私心更新太慢,看到之后激起了我更新的动力,话不多说,咱们继续倒腾金蝶二开插件案列分享,大部分都是非常实用而且能够提升工作效率和增强体验感的小功能。
在日常业务中,财务需要知道每个产品的毛利率,并且需要显示业务单据明细中,目前的标准功能是没有的,则就需要二开了,其实很简单,上一期也介绍了调用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 打开应收单列表,勾选需要获取的明细毛利率,当然不勾选则获取半年内毛利率,如下图:
增加一个毛利率字段,将计算结果放到该字段(将SETF_VJJQ_RATE替换为自己的数据库字段)
按钮标识:需要修改成自己的标识名称,否则无法触发(将按钮标识UZBE_GETDATE标标识替换称自己的)。
- 如果是多个菜单按钮执行某些操作逻辑,一定要添加判断语句(使用if elif结构),只处理你需要监听的菜单项
复制脚本注意缩进,严格遵守PYTHON缩进规则,否则保存会报错
如果这篇文章对你有帮助,欢迎点赞、收藏、转发!有任何问题也欢迎在评论区留言交流!