收付款单业务日期存在时分秒导致报表显示异常原创
金蝶云社区-你在追梦
你在追梦
30人赞赏了该文章 183次浏览 未经作者许可,禁止转载编辑于2024年06月12日 13:58:36

问题:出纳银行存款日记账、银行存款流水账等、银行存款日记账等报表显示余额异常。

如:下图显示上一笔的余额159840.17-支出9244.14不等于406984.36

图片.png

原因:因为单据业务日期存在长日期,报表显示异常,默认出纳业务单据的业务日期为2024-04-01 00:00:00,时分秒默认为0,报表取值为2024-04-01,当业务日期有时分秒为2024-04-01 00:59:59时会默认大于2024-04-01,取值到2024-04-02,从而导致排序异常,所以需要对单据的业务日期字段的来源取值进行分析。

解决方法

(1)在bos对业务日期转长日期查看或后台数据库查询是否业务日期为长日期:

数据库执行语句:

付款单

select fdate,CONVERT(varchar(10),fdate,121) ,* from t_ap_paybill where fdate <> CONVERT(varchar(10),fdate,121)

收款单

select fdate,CONVERT(varchar(10),fdate,121) ,* from T_AR_RECEIVEBILL where fdate <>

CONVERT(varchar(10),fdate,121)

(2)数据库修复短日期语句(修复前建议排查原因是通过什么途径导致的长日期):

数据库执行语句:

付款单

UPDATE T_AP_PAYBILL SET FDATE=CONVERT(DATETIME,CONCAT(CONCAT(CONCAT(CONVERT(VARCHAR,YEAR(FDATE)),'-'),CONCAT(CONVERT(VARCHAR,MONTH(FDATE)),'-')),CONVERT(VARCHAR,DAY(FDATE))));

收款单

UPDATE T_AR_RECEIVEBILL SET FDATE=CONVERT(DATETIME,CONCAT(CONCAT(CONCAT(CONVERT(VARCHAR,YEAR(FDATE)),'-'),CONCAT(CONVERT(VARCHAR,MONTH(FDATE)),'-')),CONVERT(VARCHAR,DAY(FDATE))));

修复后即可重新查询报表显示是否正常。

注意:对于有映射长日期字段到付款单上,在版本PT-151005  [8.2.0.20231109]在单据的保存按钮有新增插件处理,保存时自动清除时分秒,升级至以上版本也可解决该类问题。插件如下图:

图片.png

对于历史版本没有保存插件,又有映射长日期到业务日期的,不知如何截断时分秒的,可在保存上挂脚本实现,保存注册python如下:

import clr
clr.AddReference('System')
clr.AddReference('mscorlib')

clr.AddReference('Kingdee.BOS')
clr.AddReference('mscorlib')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('System.Core')


from Kingdee.BOS.Util import *
from Kingdee.BOS.Util import ObjectUtils
from System import *
from Kingdee.BOS.App.Data import *
from System.Linq import *
from Kingdee.BOS.Util  import *
from System.Collections.Generic import *
from Kingdee.BOS.Log import *
from Kingdee.BOS import *


def OnPreparePropertys(e):
    e.FieldKeys.Add("FDATE");
    
def BeginOperationTransaction(e):
     for dataEntity in e.DataEntitys:
         date = Convert.ToDateTime(dataEntity["DATE"])
         dataEntity["DATE"]=date.Date

赞 30