根据凭证上的核算维度信息取具体的编码名称
经常遇到有人希望根据凭证上的核算维度信息,取到具体的维度值。如凭证上某科目挂了【部门】和【城市】两个核算维度,具体是部门“采购部”和客户“长安”,而实际上该凭证只记录了由这两个维度值共同组合而成的一个ID值,无法直接得到“采购部”和“长安”,那么,到底要如何得到这两个值呢,下面的知识很重要。
凭证上记录核算维度组合信息的字段的是凭证分录表(T_GL_VOUCHERENTRY)中的FDETAILID字段,它通过外键关联的是T_BD_FLEXITEMDETAILV表的主键FID。
T_BD_FLEXITEMDETAILV表是整个核算维度体系的核心。它的列是动态生成的除了FID、FOPCODE和FCALCOL三列。这些动态列对应着相应的核算维度,如FFLEX4表示“供应商”,它的值就是【供应商】表中的某个具体记录的FMASTERID或FPKID的值。也就是说,通过FFLEX4的值,可以找到供应商的编码、名称等全部信息。
但如何知道每一列代码哪个核算维度呢?这就要看T_BD_FLEXITEMPROPERTY表啦,该表是系统中所有核算维度的列表,其中的FFLEXNUMBER字段记录了该维度在T_BD_FLEXITEMDETAILV表中的字段列。每增加一个核算维度,T_BD_FLEXITEMPROPERTY表就会增加一行,维度审核通过后,会自动在T_BD_FLEXITEMDETAILV表中生成相应的数据列。我们知道,核算维度的来源分为基础资料和辅助资料,在T_BD_FLEXITEMDETAILV表中,字段FVALUETYPE的值0代表基础资料,1代表辅助资料,二者最大的区别在于取数方式不同。这一点很重要。
一,基础资料取数:
如何知道具体核算维度(如【客户】)最终的表呢?这就要通过T_META_LOOKUPCLASS表啦。该表中FFORMID与T_BD_FLEXITEMPROPERTY表的FVALUESOURCE字段关联,即通过【客户】的FVALUESOURCE值“BD_CUSTOMER”可以在T_META_LOOKUPCLASS表中找到对应的记录,包含对应的表名,主键字段,MASTERID字段,主键字段类型等待关键信息。根据这些信息,就可以直接查询啦。
二,辅助资料取数:
辅助资料取数相对简单直接,可以直接在T_BAS_ASSISTANTDATAENTRY表中根据维度具体的ID值查询。
按上面的例子,我们要取科目上挂的部门】和【城市】两个核算维度的具体数据,方法为:
1,在T_GL_VOUCHERENTRY表中查询到该科目所在的分录行,得FDETAILID字段值,假设为54321,。
2,在T_BD_FLEXITEMDETAILV表中,根据FID=54321,查询到该核算维度组合ID对应的具体维度及其值。
3,在T_BD_FLEXITEMPROPERTY表(必要时可以关联该表的多语言表——表名后加“_L”),找出部门和城市这两个维度在T_BD_FLEXITEMDETAILV表中的字段名和维度类型,如查得部门的字段名为FFLEX5,类型为基础资料,城市的字段名为FF00001,类型为辅助资料。
4,对应的,我们可以在T_BD_FLEXITEMDETAILV表中看到,该维度仅这两个字段有值,其余字段均为0或空。假设:FFLEX5的值为100001,FF00001的值为“005056942d569a3f11e3dff547a44956”(一般情况下,基础资料的ID为数值型,辅助资料的ID为GUID字符串),这就告诉我们,部门ID为100001,城市ID为“5cb035ec1cb9af”。下一步就是得到相应的表。
5,查询“采购部”信息:由于【部门】是基础资料,因此,在T_BD_FLEXITEMPROPERTY表,找到部门FVALUESOURCE值“BD_Department”,在T_META_LOOKUPCLASS表中,通过FFORMID="BD_Department",找到记录,可以看到FTABLENAME为“T_BD_DEPARTMENT”,FMASTERFIELDNAME为“FMASTERID”,根据这两项,我们可以拼成SQL查询语句:
select * from T_BD_DEPARTMENT where FMASTERID=100001
从而查询“采购部”在部门表中的所有信息。
6,查询“长安”信息,由于【城市】是辅助资料,因此可以直接查询T_BAS_ASSISTANTDATAENTRY表:
select * from T_BAS_ASSISTANTDATAENTRY where FMASTERID='005056942d569a3f11e3dff547a44956'
7,如果表得到中文名称,还需要关联相应表的多语言表,如部门的多语言表为:T_BD_DEPARTMENT_L,辅助资料的多语言表为:T_BAS_ASSISTANTDATAENTRY_L。
通过上面的方式,可以从凭证中显示的核算维度,从通过数据库查询,得到具体维度的数据。下面的模型,清晰的反应了上述表之间的关联关系,初学者可以对照阅读,便于理解。
非常完整
根据凭证上的核算维度信息取具体的编码名称
本文2024-09-16 17:30:58发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-16211.html