文本介绍了在特定软件版本后,支持从销售单据编辑界面跳转到'获取电子面单'并自动填充数据,但快递单号不立即显示在单据上,需通过二开按钮刷新。文章提供了在销售出库单物流跟踪页签添加刷新按钮,并通过Python插件实现刷新功能的步骤。同时指出在尝试使用SynDataFromDB方法刷新数据时遇到的问题,并分享了解决方案和注意事项。
在星空版本 PT-146899 [7.7.0.202112] 之后,支持从销售订单,发货通知单,销售出库单,销售退货单(下文以销售单据引用这四种单据)单据编辑界面直接跳转到'获取电子面单'并自动填充相关单据数据到'获取电子面单'界面上,但是当在'获取电子面单'界面申请完快递100电子面单后,快递单号不会立即显现在销售单据上,除非重新打开销售单据 ,快递单号是在后台保存进销售单据上的物流跟踪页签对应的数据库表中的。如果想通过二开按钮刷新物流单号数据,本文可作为一个参考,下面简单介绍步骤。
首先,在销售出库单物流跟踪页签中添加一个按钮,按钮标识为tbButtonRefreshCarryBillNos,如下图1-1所示:
图1-1
在表单插件中注册一个Python插件,如下图1-2所示:
图1-2
上图1-2中的Python代码如下:(注意从论坛上直接复制可能会出现空格转换出错,建议手工输入python脚本或者使用附件)
# -*- coding: utf-8 -*-
#销售出库单表单插件
import clr
clr.AddReference('System')
clr.AddReference('mscorlib')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
from System import *
from System.Collections.Generic import List
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import BarItemClickEventArgs
def EntryBarItemClick(e):
if e.BarItemKey == "tbButtonRefreshCarryBillNos":
this.View.Refresh();
保存上文Python插件后,当通过销售出库单物流跟踪页签中的'获取电子面单'按钮跳转到'获取电子面单'界面后,如果在'获取电子面单'界面成功申请了快递100电子面单,则可以在销售出库单上点击二开的 '刷新物流单号' 按钮进行物流单号的刷新,下图1-3演示了点击按钮后加载出三条物流单号。
图1-3
写在最后:
本人在操作此Python插件时,曾尝试通过this.View.Model.SynDataFromDB方法去刷新,但是发现没有用,这个方法代替不上上文中的this.View.Refresh方法,SynDataFromDB只是当分录行存在时才能刷新而Refresh方法可以在单据体从数据库中加载新行进来,原来有问题的代码如下图2-1所示:
图2-1
在上图2-1中,我注释了from Kingdee.BOS.Core import *。如果不注释,会发现原来的代码会报 expected str, got type 的错。猜测是因为在EntryBarItemClick方法中使用了List[str](),这个类对应了C#中的泛型列表 List<String>。而from Kingdee.BOS.Core import * 可能导入了 Kingdee.BOS.Core.List命名空间,里面的List命名空间片段与类List可能出现IronPython解析冲突,一般来讲要么直接import 用到的所有类,要么不要使用与命名空间片段有冲突的类。
Empty.zip(0.43KB)
推荐阅读