文本主要讨论了套打排序设置的多样性,并提到一种特殊情况:默认分组排序为升序,但当前系统不支持直接改为降序。为解决此问题,介绍了一种使用Python插件排序的方法,包括如何在特定套打模板和数据源中通过Python代码实现数据的倒序排序,并详细解释了代码段中各部分的含义和用途。
套打的排序设置配置比较多,包括套打设置器套打模板上的数据表格的排序字段,运行时套打设置中的高级设置,套打分组管理的分组自带排序,大部分情况可以通过这几种配置去调整数据行的输出顺序。
套打用的比较多的小伙伴,如果留心发现,会注意到套打的分组设置是默认升序的。
那么能否通过这些设置去调整分组的排序改为降序呢。
暂时是没有支持,不过我们还有一种很强大的排序方法——插件排序能够实现这个功能,如果逻辑简单直接能够通过python插件实现(如果需要在列表上生效则挂设在列表插件中,同理于表单)。
下面上效果图和代码:
from System import *
def OnPrepareNotePrintData(e):
if e.NotePrintTplId.Equals("107c8554-7790-4c72-81f3-7291534771c3"):
if e.DataSourceId.Equals("FPOOrderEntry",StringComparison.OrdinalIgnoreCase):
tempList = sorted(e.DataObjects,key =lambda x:(x["FMaterialId_FNumber"]),reverse=True);
for index in range(len(tempList)):
e.DataObjects[index] = tempList[index];
讲一下这几行代码的意思
<1>第一个标红处“107c8554-7790-4c72-81f3-7291534771c3”,这个是套打模板的标识,可以在套打模板的属性栏看到,如果你当前插件只想在这个套打模板生效,则应该加入这个判断
<2>第二个标红处"FPOOrderEntry",这个就是对应的需要修改的数据表格的数据源标识,这里我举例的是采购订单的明细信息,因此它的标识就是FPOOrderEntry。
<3>第三、四标红处为使用排序,排序字段为物料编码FMaterialId_FNumber(这里明确一点,正常的物料编码应该为FMaterialId.FNumber,但是套打进行了转义,如果需要对基础资料下的字段时,应当使用下划线替代点,当然,如果你仅为普通字段如采购数量FQty这种就不会有这类问题,同时这里的这个标识必须为数据表格上存在的字段,如果需要使用这个字段排序但是不打印这个字段则尝试使用0宽度列隐藏该字段,这个章节后续开帖子讲),倒序排序则需要启用选项reverse=True。
这里再补充一点,排序字段可以支持多字段排序比如
tempList = sorted(e.DataObjects,key =lambda x:(x["FSTAFFS"],x["FPAYGROUP"]));
这个就是可以支持先按照FSTAFFS升序后按照FPAYGROUP升序,关于python的用法这里就仅简单介绍一下,有兴趣的可以研究下。
如果在套打数据行输出排序有什么特殊的用法时,不妨按照以上的例子去尝试一下吧。
推荐阅读