总账账龄分析表开发逻辑陋解原创
金蝶云社区-战斗的凯文
战斗的凯文
5人赞赏了该文章 1,236次浏览 未经作者许可,禁止转载编辑于2020年11月13日 10:13:53

        总账账龄分析表是总账往来业务分析时重要的参考,但各个企业又有其自身的特色需求,希望能改造或二开类似的账表,但苦于该账表取数和核心逻辑较复杂,很多小伙伴不知道如何下手,经常有二开伙伴咨询相关处理逻辑,下面就剧透一点总账账龄分析表的开发逻辑,希望能够起到抛砖引玉的作用,也希望有这方面需求的同学能够举一反三,理解取数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,对统计结果按显示要求进行格式化处理:


加载币别,精度,核算维度中文名称,小计等信息以符合显示格式要求。


至此,总账账龄分析表的开发逻辑就简单的讲完了,不知道对您有没有一点点启发,如果有任何的疑问,可以在下面评论区留言,大家一起沟通交流。


赞 5