收付款单业务日期存在时分秒导致报表显示异常
问题:出纳银行存款日记账、银行存款流水账等、银行存款日记账等报表显示余额异常。
如:下图显示上一笔的余额159840.17-支出9244.14不等于406984.36
原因:因为单据业务日期存在长日期,报表显示异常,默认出纳业务单据的业务日期为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]在单据的保存按钮有新增插件处理,保存时自动清除时分秒,升级至以上版本也可解决该类问题。插件如下图:
对于历史版本没有保存插件,又有映射长日期到业务日期的,不知如何截断时分秒的,可在保存上挂脚本实现,保存注册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
收付款单业务日期存在时分秒导致报表显示异常
本文2024-09-16 18:53:28发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-25048.html