适用场景:
金蝶k3cloud物料表(数据库对应表:t_bd_material)缺少成本字段,这对于日常进行销售单据毛利预估造成一定困难,为了解决这一问题需要在物料表中,通过BOS开发平台进行自定义添加,但添加后字段如何实现随每次成本结算进行更新成了新的课题。由于k3中成本一般在<存货收发汇总>中体现,但是该表为账表类型,为前端计算体现。因此,常规解决方式进行存储过程编写平均成本运算逻辑,并将结果定期进行刷新,一般企业寻找二开进行。我们换一种思维假设在<存货收发汇总>自定义插件通过点击按钮将该表体现成本反写物料表(t_bd_material)指定字段不就可以了吗?不多说直接上插件代码:

import clr
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference("Kingdee.BOS.ServiceHelper")
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DependencyRules import *
from Kingdee.BOS.Core.Bill import *
import Kingdee.BOS.Orm.DataEntity
import Kingdee.BOS.Core.Metadata.EntityElement
from Kingdee.BOS.Core.Metadata.FieldElement import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.Bill.PlugIn import *
from Kingdee.BOS.Core.Bill.PlugIn.Args import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.KDThread import *
from System import *
###########################以上是必要模块引入##############################
##声明全局变量,便于后期多函数引用
global relist
##全局变量初始化
relist=[]
##调用进度条将开启子线程,子线程中出现了代码异常,会执行此方法,显示错误信息
def showRslt(asynResult):if (asynResult <> None and asynResult.Exception <>None):this.View.ShowErrMessage(asynResult.Exception.Message);
##当进度条达到100%时,自动显示完成信息
def showFinishMsg(formResult):this.View.ShowMessage("数据更新完成!");
##执行主函数并向进度条进行赋值,此处主函数为updte t_bd_material中的f_paez_amount字段,条件为fmasterid
def setData():#引用全局变量值进行循环刷新物料主档信息tcount=len(relist)recount=0for re in relist:masterid=re[0].ToString()price=re[1].ToString()sql="/*dialect*/ set nocount on  update t_bd_material set f_paez_amount='"+price+"' where fmasterid='"+masterid+"' select case when @@rowcount>0 then 1 else 0 end"result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)[0][0]recount+=result#进度条直接收int值,因此进行四舍五入后取整pvalue=int(round(recount*100/tcount,0))if pvalue >=10:billObj = this.Model.DataObjectthis.View.Session["ProcessRateValue"] = pvalue;
#加载进度条函数,k3插件固定方法实现
def ShowProgressBar():#定义进度条参数progressFormParameter = DynamicFormShowParameter();#给进度条参数赋值,包含显示位置、Formid、标题文字、允许更新进度条value等,标准话东西只修改标题(progressFormParameter.Caption)即可.progressFormParameter.PageId = Guid.NewGuid().ToString();progressFormParameter.FormId = "BOS_ReportProgressMsg";progressFormParameter.OpenStyle.ShowType = ShowType.Modal;progressFormParameter.Caption = "正在更新物料主档数据...";progressFormParameter.HiddenCloseButton = True;progressFormParameter.CustomParams.Add("UseTruePro", "true");this.View.ShowForm(progressFormParameter,Action[FormResult](showFinishMsg));MainWorker.QuequeTask(Action(setData),Action[AsynResult](showRslt));
#自定义按钮功能及预处理数据筛选
def BarItemClick(e):
#此处需要调用全局变量,并将结果传递给全局变量global relist#按钮标识大写处理key=e.BarItemKey.ToUpperInvariant();if(key=="test01".ToUpperInvariant()):#获取当前账表模块属性reportModel=this.Model;#获取当前账表所有行数,分页不影响rowCount=reportModel.GetRowCount();#当账表无数据时,用return 直接结束函数,返回提示信息if rowCount==0:return this.View.ShowMessage("无可刷新数据!")#获取当前账表所有数据返回dataTable数据格式,分页不影响;dataTable解析方式:dataTable[row][colnum_name]mytab=reportModel.GetData(0,rowCount)lists=[]#循环筛选可更新的物料信息,成本取值逻辑,当出库成本不为空,且不等于0时,作为预更新成本值,否则取结存成本作为预更新成本值;当预更新成本值大于0时作为最终更新,否则不更新for row in range(0,rowCount):#逐行读取数据,并获取合计行的值mid=mytab.Rows[row]['FMATERIALBASEID'];当mid等于0时,该行为合计数值所在位置if mid==0:#由于合计行物料内码为0,因此取合计行上一行物料内码值baseid=mytab.Rows[row-1]['FMATERIALBASEID'];#分别提取合计行的出库成本单价和结存库存成本cp=mytab.Rows[row]['FSENDPRICE'];kp=mytab.Rows[row]['FENDPRICE'];#预更新成本值,取值逻辑if len(str(cp))==0 or cp==0:p=kpelse:p=cp#最终预更新确认,并存入基础列表if p>0:lists.append([baseid,p])#判断基础列表有无数据if len(lists)==0:return this.View.ShowMessage("无可刷新数据!")#如基础列表有数据,将基础列表赋值给全局变量relistrelist=lists#调用python lambda方法创建提示信息框。this.View.ShowMessage("本次将更新"+str(len(relist))+"个物料的平均成本,是否继续?", MessageBoxOptions.YesNo,lambda result:updateprice(result))
def updateprice(result):global progressValue,progressBarif (result == MessageBoxResult.Yes):ShowProgressBar()

k3cloud中的设置:
通过BOS在<存货收发汇总>注册插件,添加按钮实现点击功能。


效果演示:



金蝶K3cloud python插件之更新物料列表自定义字段(成本更新)相关推荐

  1. python wx模块下choice列表框值怎么更新_wx python

    一.静态文本控件 wx.StaticText(parent, id, label, pos=wx.DefaultPosition,    size=wx.DefaultSize, style=0, n ...

  2. Python爱好者社区历史文章列表(每周append更新一次)

    2月22日更新:   0.Python从零开始系列连载: Python从零开始系列连载(1)--安装环境 Python从零开始系列连载(2)--jupyter的常用操作 Python从零开始系列连载( ...

  3. Exchange server 2003迁移到2010后,手动更新地址列表,提示OAB Versions无效

    Exchange server 2003迁移公共文件夹到2010后,当我们手动更新地址列表时,提示OAB Versions无效,这个不影响邮件收发,但是在客户端会出现OAB不能下载,有时候点击发送和接 ...

  4. sudo apt-get update更新软件列表

    apt-get属于apt工具包中的内容,apt的全称为Advanced Package Tool,高级包工具.属于debian系linux发行版的一大核心内容apt-get的主要功能与获取安装软件包相 ...

  5. python wordpress自定义字段获取_WordPress 自定义字段(Custom Fields)详细介绍和使用...

    什么是 WordPress 自定义字段 Custom Fields 我们在使用 WordPress 撰写日志或者页面的时候,都会在编辑框下面看到自定义字段(Custom Fields),那么什么是自定 ...

  6. 字段定义_SAP 物料主数据增强自定义字段

    物料主数据自定义字段增强1.  SE11 创建自定义表 ZPARTAPPEND2. SPRO--后勤-常规--物料主数据 -- 配置物料主记录 --  创建定制子屏幕的程序3. SE80 -- 输入函 ...

  7. K3Cloud BOS设计 Python 插件 弹出列表

    K3Cloud BOS设计 Python 插件 弹出列表并筛选 C#插件参照 下载 添加文本控件 表单插件 1.Python 插件脚本 1. 写窗体回调函数 2. 封装弹出窗体函数 3. 重写Befo ...

  8. 金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#)

    金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#) 最近在做金蝶相关的技术支持,记录一下插件开发步骤.使用C#开发 需求:实现表单点击保存,自动进行提交审核 1.打开VS,新建项目,选择类库 ...

  9. c4d python 插件_更新C4D地面对齐插件Cinema 4D Plugin Drop To Floor R20 1.1 支持R14-C4D R20...

    原标题:更新C4D地面对齐插件Cinema 4D Plugin Drop To Floor R20 1.1 支持R14-C4D R20 C4D插件介绍 C4D地面对齐插件Cinema 4D Plugi ...

最新文章

  1. python3 pycharm 断点调试 报错 greenlet.error: cannot switch to a different thread
  2. Find Minimum in Rotated Sorted Array II
  3. Dubbo 3.0 前瞻之对接 Kubernetes 原生服务
  4. 2016. 增量元素之间的最大差值
  5. 2016年度 JavaScript 展望(下)
  6. 如果程序跑着跑着就崩溃了,查看内存
  7. k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
  8. MTK 驱动(78)----MTK 平台查看eMMC和DDR的工作频率
  9. for循环中++i 和 i++ 的区别
  10. python免费全套教程400集视频-阿里巴巴大佬打造400集Python视频教程视频拿去,学完万物皆可爬...
  11. 数据库SQL语句 | 快速上手 | 面试复习
  12. w10查看端口_win10系统使用dos命令查看端口的解决教程
  13. 偶尔出现 指定 网络名不再可用 错误提示 MS-SQL Server 基础类(尤其是在文件下载时)...
  14. 辛弃疾 菩萨蛮·书江西造口壁
  15. 保密协议与竞业限制协议,在劳动法上有什么相关规定吗?
  16. python绘图黄金螺旋_教案-for循环应用之“黄金螺旋-信息技术高中
  17. 仅1cm厚!华硕发布全球最薄13.3英寸笔记本
  18. require.js的简单使用
  19. 简易计算机在线使用方法,jQuery实现简单在线计算器方法
  20. 【愚公系列】2022年08月 微信小程序-左划删除效果实现

热门文章

  1. 国家认证--软件评测师考试要求
  2. 解析URL得到IP地址
  3. 安装Neo4j图型数据库
  4. 十天学会php第五天
  5. Function和function
  6. 求两个日期间相差多少年,多少月,多少天
  7. redisTemplate执行lua脚本
  8. codeblocks下载及安装包括程序示例
  9. 使用python自动提交调查问卷
  10. qt plugin metadata file does not exist解决方案