作为一名长期从事企业ERP系统实施与数据分析的从业者,我深知基础档案数据在企业信息化管理中的核心地位。金蝶ERP作为国内主流的企业管理软件,其基础档案数据结构复杂但逻辑严密。今天我将分享一套完整的SQL查询语句集,用于提取金蝶系统中的基础档案数据,并详细解析各表字段的业务含义。
基础档案是ERP系统的基石,相当于人体的骨架系统。它定义了企业运营的基本元素和规则,包括客户、供应商、部门、员工、物料等核心业务对象。完整准确的基础档案数据能确保:
在实际项目中,我们经常需要直接访问数据库获取这些基础数据,用于:
客户主表存储了企业所有客户的基本信息和业务属性,是销售、应收等模块的基础。以下是关键字段解析:
sql复制select
t_Organization.FItemID AS 客户内码,
t_Organization.FName AS 客户名称,
t_Organization.FNumber AS 客户代码,
t_Organization.FShortName AS 客户简称,
t_Organization.FAddress AS 地址,
t_Organization.FCity AS 城市,
t_Organization.FProvince AS 省份,
t_Organization.FCountry AS 国家,
t_Organization.FPhone AS 电话号码,
t_Organization.FEmail AS 邮件地址,
t_Organization.FBank AS 开户银行,
t_Organization.FAccount AS 银行账号,
t_Organization.FTaxNum AS 税务登记号,
t_Organization.FCreditLimit AS 信用额度,
t_Organization.FTypeID AS 客户分类,
t_Organization.FDeleted AS 是否禁用
from t_Organization
提示:客户内码(FItemID)是系统自动生成的唯一标识,而客户代码(FNumber)通常由用户自定义,用于日常业务处理。
客户分类更新示例:
sql复制-- 将未分类客户更新为"终端客户"
update t_Organization
set FTypeID = 40033
where FTypeID = 0
部门表定义了企业的组织架构,是费用分摊、成本核算的基础:
sql复制select
t_Department.FItemID AS 部门内码,
t_Department.FNumber AS 部门代码,
t_Department.FName AS 部门名称,
t_Department.FParentID AS 上级部门内码,
t_Department.FManager AS 负责人,
t_Department.FPhone AS 电话,
t_Department.FDProperty AS 属性,
t_Department.FDeleted AS 是否禁用
from t_Department
部门表的树形结构通过FParentID字段实现,值为0表示顶级部门。
职员信息表包含员工基本信息和业务属性:
sql复制select
t_Emp.FItemID AS 职员内码,
t_Emp.FNumber AS 职员代码,
t_Emp.FName AS 姓名,
t_Emp.FGender AS 性别,
t_Emp.FID AS 身份证号码,
t_Emp.FDepartmentID AS 部门内码,
t_Emp.FDuty AS 职务,
t_Emp.FHireDate AS 入职日期,
t_Emp.FLeaveDate AS 离职日期,
t_Emp.FDeleted AS 是否禁用
from t_Emp
物料主表是ERP中最复杂的档案之一,包含采购、销售、库存、生产等多维度属性:
sql复制select
t_ICItem.FItemID AS 产品内码,
t_ICItem.FNumber AS 产品代码,
t_ICItem.FName AS 产品名称,
t_ICItem.FModel AS 规格型号,
t_ICItem.FTypeID AS 产品分类,
t_ICItem.FUnitID AS 单位内码,
t_ICItem.FDefaultLoc AS 缺省库房,
t_ICItem.FHighLimit AS 最高存量,
t_ICItem.FLowLimit AS 最低存量,
t_ICItem.FSecInv AS 安全库存,
t_ICItem.FDeleted AS 是否禁用
from t_ICItem
物料关键业务属性:
仓库档案定义了企业的库存地点:
sql复制select
t_Stock.FItemID AS 库房内码,
t_Stock.FNumber AS 库房代码,
t_Stock.FName AS 库房名称,
t_Stock.FParentID AS 上级内码,
t_Stock.FProperty AS 库房属性,
t_Stock.FIsStockMgr AS 是否进行仓位管理,
t_Stock.FDeleted AS 是否禁用
from t_Stock
会计科目表是财务核算的核心基础:
sql复制select
t_Account.FAccountID AS 科目内码,
t_Account.FNumber AS 科目代码,
t_Account.FName AS 科目名称,
t_Account.FLevel AS 科目级次,
t_Account.FDetail AS 明细科目,
t_Account.FParentID AS 上级科目内码,
t_Account.FDC AS 借贷方向,
t_Account.FIsCash AS 现金类科目,
t_Account.FIsBank AS 银行类科目,
t_Account.FDeleted AS 是否禁用
from t_Account
注意:科目代码的级次通过小数点分隔,如"1001.01"表示一级科目"现金"下的明细科目。
币别表存储汇率信息:
sql复制select
t_Currency.FCurrencyID AS 币别内码,
t_Currency.FNumber AS 币别代码,
t_Currency.FName AS 币别名称,
t_Currency.FExchangeRate AS 汇率,
t_Currency.FScale AS 小数位数
from t_Currency
结算方式定义收付款方式:
sql复制select
t_Settle.FItemID AS 结算方式内码,
t_Settle.FNumber AS 结算方式代码,
t_Settle.FName AS 结算方式名称,
t_Settle.FAcctID AS 科目ID,
t_Settle.FDeleted AS 是否禁用
from t_Settle
核算项目是金蝶的特色功能,用于扩展基础档案:
sql复制-- 核算项目类别表
select
t_ItemClass.FItemClassID AS 类别内码,
t_ItemClass.FNumber AS 类别代码,
t_ItemClass.FName AS 类别名称,
t_ItemClass.FSQLTableName AS 表名
from t_ItemClass
-- 核算项目主表
select
t_Item.FItemID AS ID号,
t_Item.FNumber AS 编码,
t_Item.FName AS 名称,
t_Item.FFullNumber AS 全编码,
t_ItemClass.FName AS 类别名称
from t_Item
left join t_ItemClass on t_Item.FItemClassID = t_ItemClass.FItemClassID
辅助资料用于定义各类枚举值:
sql复制-- 辅助资料类别
select
t_SubMesType.FTypeID AS 类型内码,
t_SubMesType.FName AS 类型名称
from t_SubMesType
-- 辅助资料值
select
t_SubMessage.FID AS 资料代码,
t_SubMessage.FName AS 资料名称,
t_SubMesType.FName AS 类型名称
from t_SubMessage
left join t_SubMesType on t_SubMessage.FTypeID = t_SubMesType.FTypeID
获取客户完整信息(含辅助字段):
sql复制select
o.FNumber AS 客户代码,
o.FName AS 客户名称,
c1.FName AS 客户分类,
c2.FName AS 行业,
o.FCreditLimit AS 信用额度,
o.FContact AS 联系人,
o.FPhone AS 电话
from t_Organization o
left join t_Item c1 on o.FTypeID = c1.FItemID
left join t_SubMessage c2 on o.FTrade = c2.FInterID
where o.FDeleted = 0
处理历史数据中的编码问题:
sql复制-- 修复部门编码中的空格问题
update t_Department
set FNumber = REPLACE(FNumber, ' ', '')
where FNumber LIKE '% %'
-- 标准化客户名称
update t_Organization
set FName = UPPER(LEFT(FName, 1)) + LOWER(SUBSTRING(FName, 2, LEN(FName)))
where FName COLLATE Chinese_PRC_CS_AS LIKE '[a-z]%'
检查基础数据完整性:
sql复制-- 查找没有分类的客户
select FNumber, FName
from t_Organization
where FTypeID = 0 and FDeleted = 0
-- 检查重复物料编码
select FNumber, COUNT(*) as DupCount
from t_ICItem
where FDeleted = 0
group by FNumber
having COUNT(*) > 1
-- 验证科目借贷平衡
select
a.FNumber, a.FName,
case a.FDC
when 1 then '借'
when -1 then '贷'
end as Direction
from t_Account a
where a.FDC not in (1, -1) and a.FDeleted = 0
为提高基础档案查询效率,建议在以下字段创建索引:
sql复制-- 客户表索引
CREATE INDEX IX_Organization_Number ON t_Organization(FNumber)
CREATE INDEX IX_Organization_Type ON t_Organization(FTypeID)
-- 物料表索引
CREATE INDEX IX_ICItem_Number ON t_ICItem(FNumber)
CREATE INDEX IX_ICItem_Type ON t_ICItem(FTypeID)
对于大型企业,建议定期归档历史数据:
sql复制-- 创建历史客户表
select * into t_Organization_Archive_2023
from t_Organization
where FDeleted = 1
and FModifyTime < '2023-01-01'
-- 删除已归档数据
delete from t_Organization
where FItemID in (
select FItemID from t_Organization_Archive_2023
)
问题现象:导入客户档案时提示"编码重复"
解决方案:
sql复制-- 检查编码冲突
select FNumber from t_Organization
where FNumber in ('C001','C002') -- 替换为实际导入编码
-- 临时禁用唯一约束
ALTER TABLE t_Organization NOCHECK CONSTRAINT UK_Organization_Number
-- 执行导入操作
-- 导入完成后恢复约束
ALTER TABLE t_Organization CHECK CONSTRAINT UK_Organization_Number
问题现象:删除部门时提示"存在下级记录"
解决方案:
sql复制-- 先检查关联数据
select e.FNumber, e.FName
from t_Emp e
where e.FDepartmentID = 123 -- 替换为要删除的部门ID
-- 批量转移员工到其他部门
update t_Emp
set FDepartmentID = 456 -- 新部门ID
where FDepartmentID = 123
问题描述:物料单位错误导致库存不准
修复步骤:
sql复制-- 1. 检查问题数据
select FNumber, FName, FUnitID
from t_ICItem
where FUnitID = 错误单位ID
-- 2. 备份当前库存
select * into t_ICInventory_Bak
from t_ICInventory
where FItemID in (
select FItemID from t_ICItem where FUnitID = 错误单位ID
)
-- 3. 转换库存数量
update t_ICInventory
set FQty = FQty * 换算系数,
FAmount = FAmount * 换算系数
where FItemID in (
select FItemID from t_ICItem where FUnitID = 错误单位ID
)
-- 4. 更新物料主数据
update t_ICItem
set FUnitID = 正确单位ID
where FUnitID = 错误单位ID
在实际ERP系统运维中,基础档案数据的准确性和完整性直接关系到业务运行的稳定性。建议定期执行数据质量检查,建立完善的变更管理流程。对于复杂的数据修复操作,务必先进行完整备份,并在测试环境验证后再在生产环境执行。