【套打】修改套打数据行中分组的输出顺序原创
金蝶云社区-_Tmp
_Tmp
19人赞赏了该文章 3,252次浏览 未经作者许可,禁止转载编辑于2019年12月24日 20:13:58
summary-icon摘要由AI智能服务提供

文本主要讨论了套打排序设置的多样性,并提到一种特殊情况:默认分组排序为升序,但当前系统不支持直接改为降序。为解决此问题,介绍了一种使用Python插件排序的方法,包括如何在特定套打模板和数据源中通过Python代码实现数据的倒序排序,并详细解释了代码段中各部分的含义和用途。

套打的排序设置配置比较多,包括套打设置器套打模板上的数据表格的排序字段,运行时套打设置中的高级设置,套打分组管理的分组自带排序,大部分情况可以通过这几种配置去调整数据行的输出顺序。

QQ图片20191224193808.png

QQ图片20191224193812.png


套打用的比较多的小伙伴,如果留心发现,会注意到套打的分组设置是默认升序的。

QQ图片20191224194011.png

那么能否通过这些设置去调整分组的排序改为降序呢。

暂时是没有支持,不过我们还有一种很强大的排序方法——插件排序能够实现这个功能,如果逻辑简单直接能够通过python插件实现(如果需要在列表上生效则挂设在列表插件中,同理于表单)。

下面上效果图和代码:

QQ图片20191224195822.png

QQ图片20191224195908.png

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的用法这里就仅简单介绍一下,有兴趣的可以研究下。


如果在套打数据行输出排序有什么特殊的用法时,不妨按照以上的例子去尝试一下吧。


图标赞 19
19人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!