#使用技巧#Python插件实现单据批改-万能终极版原创
金蝶云社区-CQ周玉立
CQ周玉立
206人赞赏了该文章 1896次浏览 未经作者许可,禁止转载编辑于2024年05月28日 17:34:13
封面

一、业务背景

        关于对单据批改的需求,前面分享了:

        单据头字段的批改就不多说了,调用的是标准的批改功能,但是标准的批改有可能满足不了一些个性化的需求,例如,批改单据体字段等等...

        自定义的批改可以参考进阶版的文章讲解来自己二开实现,但是大家可能没有二开资源,或者自己开发起来还是觉得比较吃力,而且往往涉及到多个字段的批改,如果自己二开的,似乎不太灵活,只能对固定的字段进行批改

       但是标准的批改功能,有个好处是,只要支持批改的字段,可以自己择字段后,系统会动态创建对应的字段控件来输入批改字段值,这个功能,大大提高了批改字段的灵活性。例如,下图,物料批改:

标准批改演示.gif

标准的批改功能还有个美中不足的地方是,批改字段,不能触发字段相关的值更新和实体服务规则,这样对于修改字段值后会引起“连锁反应”的场景就不太好处理。 

经过对标准批改功能的研究,本次案例,我们就基于标准的批改功能来实现一个“万能批改”功能,并且可以实现:

        √ 修改字段支持触发值更新和实体服务规则。

        √ 不仅支持单据头字段的批改,还支持单据体字段的批改

        √ 支持维度关联字段的批改:辅助属性、仓位...等。

        √ 支持多选基础资料/辅助字段的批改。

        √ 批改可以选择的字段,可以自定义设置。

        支持设置单据状态自动过滤,例如,已审核单据不允许批改

首先,看下实现效果,一睹为快!


万能批改演示.gif

二、关键实现步骤

  • 新建一个普通动态表单,标识:BPW_BulkEditFldInput,名称:单据批改字段

        本案例采用动态表单嵌套的方式在实现动态展示不同字段的控件,动态表单中的内容其实比较简单:

        ①添加一个单选下拉列表字段F_BPW_FldCombo不需要绑定枚举类型(代码会动态构建)!

           下拉字段一定要勾选【即时触发值更新】,别忘了这一步,很重要!否则不能正常切换字段!

        ②添加一个面板控件:F_BPW_Panel,用于动态显示不同字段输入控件,面板拖动合适大小,以便能正常显示。

            实际是嵌套标准动态表单(BD_ChangeFieldContent)

        添加2个按钮:确定(F_BPW_OKBtn)、取消(F_BPW_CancelBtn)

        ④在表单插件中注册Python脚本

image.png

注册Python脚本时,复制代码后,按照下图说明修改对应的标识,其他代码不用修改,就可以使用,非常简单了!

image.png

  • 需要批改的单据,配置万能批改功能

        本案例只需要在需要批改的单据,添加自定义列表菜单,并在列表插件中,注册Python脚本即可。

        ①在BOS中打开需要批改的单据,如需扩展,需要先扩展,然后,添加一个列表菜单:BPW_tbBukEdit

image.png


        ②在列表插件中注册Python脚本

image.png

注册Python脚本时,按照下图说明修改代码,其他部分代码,如无个性化需求,可暂不修改!

image.png

三、应用小结

  • 批改维度关联字段时,需要手动录入一个上级基础资料字段,要保证批改的数据行对应基础资料字段启用的维度属性一致!

    例如,批改辅助属性,勾选的数据行中,所有物料必须启用相同维度的辅助属性,且手动录入的上级资料启用的维度也一致!

  • 批改字段录入界面,字段的可见性和锁定性与单据字段设置保持一致,如果字段在单据上是隐藏的或者锁定的,那批改时,该字段动态创建的控件也会隐藏或锁定,无法正常进行批改值的录入。

  • 如需控制批改功能权限,可在单据上增加自定义空操作,空操作绑定自定义的权限项,然后在列表菜单的点击事件中调用该空操作,Python插件代码中将AfterBarItemClick事件,改成AfterDoOperation事件,该事件用法参考我这篇文章:单据列表插件

  • 前面截图中也提到,目前案例设置可批改的字段标识是在列表插件代码中,通过全局变量来完成的,如果想做成前台可配置的,可自行基于案例代码二开完成,批改字段标识集合建议保持使用Python里面的列表对象,否则,需要修改代码会更多!

  • 该批改功能,最终会调用单据保存操作,受保存校验的控制,手动打开单据能修改,保存成功,批改才能成功。

  • 应注意不该批改的字段,不要随意去设置批改,尤其是已审核单据,自行把握好批改的范畴,例如,已有上下游单据的物料、影响库存和成本的数量及单价等等,如批改导致发生数据错误,自行承担后果!


=============================正文结束=====================================

↓  ↓  ↓  ↓  ↓  ↓         Python插件案例代码已经上传附件,大家按需下载!



发布于 金蝶云星空BOS开发交流圈 社群

赞 206