总账账龄分析表是总账往来业务分析时重要的参考,但各个企业又有其自身的特色需求,希望能改造或二开类似的账表,但苦于该账表取数和核心逻辑较复杂,很多小伙伴不知道如何下手,经常有二开伙伴咨询相关处理逻辑,下面就剧透一点总账账龄分析表的开发逻辑,希望能够起到抛砖引玉的作用,也希望有这方面需求的同学能够举一反三,理解取数SQL的意义,了解相关表和字段的作用,只有这样才能真正理解并开始相关的二开工作。
1,根据过滤条件从凭证表和往来初始数据表中取数:
--“部门”维度上的账龄取数
SELECT TM.* FROM (
SELECT TM0.FACCOUNTBOOKID,TM0.FACCOUNTID,TM0.FCURRENCYID, FVOUCHERID,
CASE WHEN FAMOUNTFOR>0 THEN FAMOUNTFOR ELSE 0 END FDEBITFOR,
CASE WHEN FAMOUNT>0 THEN FAMOUNT ELSE 0 END FDEBIT,
CASE WHEN FAMOUNTFOR<0 THEN -1*FAMOUNTFOR ELSE 0 END FCREDITFOR,
CASE WHEN FAMOUNT<0 THEN -1*FAMOUNT ELSE 0 END FCREDIT,
FBUSDATE,FBUSNO,FVCHDC ,FFLEX4
FROM (
--从凭证取数
SELECT FACCOUNTBOOKID,FACCOUNTID,FDETAILID,FCURRENCYID,V.FVOUCHERID,
FAMOUNTFOR*FDC FAMOUNTFOR,FAMOUNT*FDC FAMOUNT,ISNULL(FBUSDATE,FDATE) FBUSDATE,FBUSNO,VE.FDC FVCHDC
FROM T_GL_VOUCHER V
JOIN T_GL_VOUCHERENTRY VE ON VE.FVOUCHERID=V.FVOUCHERID
WHERE FACCOUNTBOOKID=101162 AND FDATE<=TO_DATE('2020-11-13') AND FCURRENCYID=1
AND FACCOUNTID IN (4002,4005,4006,4007,4047,4075,4118,4119,4120,279830)
AND FDOCUMENTSTATUS IN('A','B','C','D') AND FINVALID='0' AND FPOSTED='1'
UNION ALL
SELECT FACCOUNTBOOKID,FACCOUNTID,FDETAILID,FCURRENCYID,0 FVOUCHERID,
FBEGINBALANCEFOR,FBEGINBALANCE, FBUSDATE,FBUSNO,0 FVCHDC
FROM T_GL_ACCTAGEBALANCE AG
WHERE FACCOUNTBOOKID=101162 AND FBUSDATE<=TO_DATE('2020-11-13') AND FCURRENCYID=1
AND FACCOUNTID IN (4002,4005,4006,4007,4047,4075,4118,4119,4120,279830)
) TM0
--关联“部门”核算维度,得组合ID
JOIN T_BD_FLEXITEMDETAILV FLEX ON FLEX.FID=TM0.FDETAILID AND (TO_CHAR(FFLEX4) NOT IN ('0',' ') OR FFLEX4 IS NOT NULL)
) TM
JOIN T_BD_ACCOUNTBOOK AB ON AB.FBOOKID=TM.FACCOUNTBOOKID
--关联“部门”表,得到具体部门信息
JOIN (SELECT FMasterId,FSupplierId,FNUMBER FROM t_BD_Supplier WHERE FMasterId=FSupplierId) T_FFLEX4 ON T_FFLEX4.FMasterId=TM.FFLEX4
LEFT JOIN t_BD_Supplier_L L_FFLEX4 ON L_FFLEX4.FSupplierId=T_FFLEX4.FSupplierId AND L_FFLEX4.FLOCALEID=2052
2,对取出的数据做核销,得到明细的核销结果(得到每一笔没有核算完的分录的账龄)并存入临时表:
核算逻辑有点复杂,简单来说就是基于取出来的数据,先按维度科目等信息分组,再对每一组按业务时间等信息分成借贷两组,然后从头开始对这两组依次抵销核减,直到借贷有一边为0为止,剩下的另一边的金额即为该维度下,当前科目的余额,相应的金额的业务日期,即为科目余额的明细账龄。个中细节很多,需要自己把握,这里就不一一展开了。
3,对明细核算结果按账龄区间进行分组统计(得到合并后没有核算完的余额的区间账龄),结果存入统计结果临时表:
按事先划分好的账龄区间,循环一次明细账龄,对落入相应区间的明细账龄进行分组统计。
4,对统计结果按显示要求进行格式化处理:
加载币别,精度,核算维度中文名称,小计等信息以符合显示格式要求。
至此,总账账龄分析表的开发逻辑就简单的讲完了,不知道对您有没有一点点启发,如果有任何的疑问,可以在下面评论区留言,大家一起沟通交流。