列表插件合计行按条件汇总二开处理原创
金蝶云社区-邱育华
邱育华
9人赞赏了该文章 871次浏览 未经作者许可,禁止转载编辑于2022年05月16日 14:05:22

一、【需求问题】

形态转换单在单据中数量合计只显示转换后的合计,但是列表显示转换前+转换后合计,想列表也只显示转换后合计数


二、【功能分析】

形态转换单结构比较特殊,分为转换前和转换后的明细分录,且转换前后数据有对应关系,表单插件中在事件OnEntrySum(EntrySumEventArgs e)做了特殊处理,合计行只统计了"转换后"的数量。

列表插件无法通过配置直接干预合计行,只能通过二开列表插件处理。


具体的二开思路

1、重写FormatCellValue方法,当前列Key值为"转换数量"时,过滤获取"转换后"数值进行累加

2、IsSummaryRow判断是否为汇总行,进行赋值处理

3、重写AfterGetData,AfterBindData方法,数据刷新重新绑定时,清空累加的数值


py脚本:

import clr 
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")

from System import *
from System import StringComparison
from Kingdee.BOS.Core.List.PlugIn import *
from Kingdee.BOS.Core.List.PlugIn.Args import *
from Kingdee.BOS.Util import *

_filterTmpSumQty = 0
_filterSumQty = 0
     
def AfterBindData(e):
    global _filterTmpSumQty,_filterSumQty
    _filterSumQty = 0

def AfterGetData():
    global _filterTmpSumQty,_filterSumQty
    _filterSumQty = _filterTmpSumQty
    _filterTmpSumQty = 0
    
def FormatCellValue(e):
    global _filterTmpSumQty,_filterSumQty
    if e.Header.Key.Equals("FConvertQty", StringComparison.OrdinalIgnoreCase):
        if e.DataRow.ColumnContains("FConvertType"):
            convertType = Convert.ToString(e.DataRow["FConvertType"])
            if convertType == "B":
                _filterTmpSumQty += Convert.ToDecimal(e.DataRow["FConvertQty"])

    if e.IsSummaryRow and e.Header.Key.Equals("FConvertQty", StringComparison.OrdinalIgnoreCase):
        e.FormateValue = Convert.ToString(_filterSumQty)


显示效果:

image.png

image.png


参考:


说明:

1、该方案只处理了当前页的合计,系统默认的处理是汇总所有页的合计,当数据量较大涉及分页显示的话,则插件干预后合计数是当前页的合计

1、列表配置插件,不再统计"转换前"的数量,当条件筛选过滤只显示"转换前"数据时,合计转换数量依然为0,显示会有歧义

2、单据明细中转换前后有关联关系,删除转换前(后),会联动删除对应的转换前(后)数据


赞 9