科目余额表SQL取数方法详解原创
金蝶云社区-战斗的凯文
战斗的凯文
66人赞赏了该文章 1,539次浏览 未经作者许可,禁止转载编辑于2024年03月18日 16:23:58

    当需要展示具体的核算维度时,首先需要知道该维度对应的取数表表名及相关关键字段名,本文分别以基础资料供应商和辅助资料国家为列,查询方式如下:

--查询基础资料核算维度对应的表名,列标识(字段名)及主键字段名
SELECT P.FID,PL.FNAME,P.FFLEXNUMBER,P.FVALUESOURCE FFORMID,C.FTABLENAME,C.FPKFIELDNAME
FROM T_BD_FLEXITEMPROPERTY P
JOIN T_META_LOOKUPCLASS C ON C.FFORMID=P.FVALUESOURCE
LEFT JOIN T_BD_FLEXITEMPROPERTY_L PL ON PL.FID=P.FID AND PL.FLOCALEID=2052
WHERE FNAME='供应商' AND P.FVALUETYPE='0'  --0表示基础资料
--辅助资料核算维度全部保存在同一个表中,查询方式如下:
SELECT P.FID,PL.FNAME,P.FFLEXNUMBER,P.FVALUESOURCE FFORMID,'T_BAS_ASSISTANTDATAENTRY' FTABLENAME, 'FENTRYID' FPKFIELDNAME
FROM T_BD_FLEXITEMPROPERTY P
LEFT JOIN T_BD_FLEXITEMPROPERTY_L PL ON PL.FID=P.FID AND PL.FLOCALEID=2052
WHERE P.FVALUETYPE='1'  --1表示辅助资料


    科目余额表中数据可以直接从T_GL_BALANCE表中查询到,具体SQL如下:

--科目余额表取数,包含核算维度
SELECT AB.FNUMBER 账簿编码,ABL.FNAME 账簿名称,B.FYEAR 年,B.FPERIOD 期,A.FNUMBER 科目编码,AL.FNAME 科目名称,
CL.FNAME 币别,S.FNUMBER 供应商编码,SL.FNAME 供应商名称,
B.FBEGINBALANCEFOR 期初原币,B.FBEGINBALANCE 期初本位币,
B.FDEBITFOR 借方原币,B.FDEBIT 借方本位币,
B.FCREDITFOR 贷方原币,B.FCREDIT 贷方本位币,
B.FYTDDEBITFOR 本年累计借方原币,B.FYTDDEBIT 本年累计借方本位币,
B.FYTDCREDITFOR 本年累计贷方原币,B.FYTDCREDIT 本年累计贷方本位币,
B.FENDBALANCEFOR 期末原币,B.FENDBALANCE 期末本位币
FROM T_GL_BALANCE B 
JOIN T_BD_ACCOUNTBOOK AB ON AB.FBOOKID=B.FACCOUNTBOOKID
LEFT JOIN T_BD_ACCOUNTBOOK_L ABL ON ABL.FBOOKID=B.FACCOUNTBOOKID AND ABL.FLOCALEID=2052
JOIN T_BD_ACCOUNT A ON A.FACCTID=B.FACCOUNTID
LEFT JOIN T_BD_ACCOUNT_L AL ON AL.FACCTID=B.FACCOUNTID AND AL.FLOCALEID=2052
JOIN T_BD_CURRENCY C ON C.FCURRENCYID=B.FCURRENCYID
LEFT JOIN T_BD_CURRENCY_L CL ON CL.FCURRENCYID=B.FCURRENCYID AND CL.FLOCALEID=2052
JOIN T_BD_FLEXITEMDETAILV DV ON DV.FID=B.FDETAILID  --核算维度组合ID
JOIN T_BD_SUPPLIER S ON S.FSUPPLIERID=DV.FFLEX4  --供应商维度,注意关联用到的表名及两边的关联字段
LEFT JOIN T_BD_SUPPLIER_L SL ON SL.FSUPPLIERID=S.FSUPPLIERID AND SL.FLOCALEID=2052
WHERE AB.FNUMBER='102' AND A.FNUMBER='2202.02' AND CL.FNAME='人民币'
ORDER BY AB.FNUMBER,A.FNUMBER,CL.FNAME

    辅助资料的查询也类似,主要关联方法如下:

JOIN T_BAS_ASSISTANTDATAENTRY AD ON AD.FENTRYID=DV.FF100015 --国家维度对应的标识列
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L ADL ON ADL.FENTRYID=AD.FENTRYID AND ADL.FLOCALEID=2052

image.png

    通常情况下,用户的需求可能会有更多要求,如

    1,查询的账簿有调整期,且希望查询出带调整期数据的余额,那么就应该从调整期余额表中取数,具体方法是把上面脚本中的T_GL_BALANCE表替换成T_GL_BALANCEADJUST

    2,查询同时满足多个核算维度的的数据,可以现金关联一个维度相关的表,如客户,可以加上后两行:

JOIN T_BD_FLEXITEMDETAILV DV ON DV.FID=B.FDETAILID  --核算维度组合ID
JOIN T_BD_SUPPLIER S ON S.FSUPPLIERID=DV.FFLEX4  --供应商维度
LEFT JOIN T_BD_SUPPLIER_L SL ON SL.FSUPPLIERID=S.FSUPPLIERID AND SL.FLOCALEID=2052
JOIN T_BD_CUSTOMER T ON T.FCUSTID=DV.FFLEX6  --客户维度
LEFT JOIN T_BD_CUSTOMER_L TL ON TL.FCUSTID=T.FCUSTID AND TL.FLOCALEID=2052

    查询结果如下图:

image.png

    3,由于余额表中保存的是已过账凭证的余额数据,如果想包含未过账凭证的余额数据,就必须先进行虚拟过账,得到过账后的临时余额表,然后用这个临时余额表替换上面SQL中的余额表。关于虚拟过账的方法,请参考我的另两篇文章:

【二开指导】如何取科目余额数据 (kingdee.com)

总账凭证虚拟过账参数说明 (kingdee.com)

    4,如果你对核算维度组合ID(FDETAILID)字段的解析感兴趣,还可以参考以下文章:

 根据凭证上的核算维度信息取具体的编码名称 (kingdee.com)

赞 66