本文介绍了物料辅助属性的动态管理,包括其添加、物料启用、值设置及在单据上的录入过程。辅助属性是根据用户业务需求动态生成的,各客户维度不同。通过后台表格的变化(如T_BD_FLEXAUXPROPERTY等)记录属性信息,并使用SQL查询辅助属性的详细信息及在单据上的使用情况。
物料的辅助属性,是弹性域,即是根据最终用户的实际业务需要,动态生成的,各个客户的辅助属性维度并不相同。
为了支持其动态性,相关表格设计比较灵活,初接触,理解起来比较困难。
本帖,从用户启用辅助属性入手,介绍其后台物理表格的变化,从而介绍辅助属性相关表格。
第一步:在辅助属性列表添加新的辅助属性维度
图一:辅助属性列表
图二:查看已经添加的辅助属性维度,可见其值来源
保存并审核辅助属性之后,会影响如下两个表格:
1. T_BD_FLEXAUXPROPERTY : 在此表中存储刚刚创建的辅助属性及其名称,值来源等描述信息;
2. T_BD_FLEXSITEMDETAILV : 在此表中,增加一个字段,用于存储的辅助属性业务数据;
可以使用如下SQL语句,查看到已经添加的辅助属性,以及其值来源:
select t0.FID as '辅助内码',
t0.FNumber as '编码',
t0_l.FName as '名称',
t0.FFlexNumber as '字段名',
t0.FValueType as '值类型', -- 1:= 辅助资料
t0.FValueSource as '值来源' -- 如值类型是辅助资料,此处存辅助资料类型
from T_BD_FLEXAUXPROPERTY t0
inner join T_BD_FLEXAUXPROPERTY_L t0_l
on (t0.fid = t0_l.fid and t0_l.flocaleId = 2052)
图三:SQL查询结果
图四:T_BD_FLEXSITEMDETAILV表查询
第二步:物料启用辅助属性
在物料维护界面,可以看到已经添加的辅助属性维度,勾选启用
图五:物料启用辅助属性
物料辅助属性启动后,会在表T_BD_MaterialAuxPty记录物料的各辅助属性维度启用状况。
可以使用如下SQL语句,查看指定物料启用的辅助属性维度:
select tm0.FMaterialId as '物料内码'
,tm0.FNumber as '物料编码'
,tm0_l.FName as '物料名称'
,tm1.FAuxPropertyId as '辅助属性内码'
,tm1.FIsEnable as '是否启用'
,ta0.FNumber as '辅助属性编码'
,ta0_l.FName as '辅助属性名称'
,ta0.FFlexNumber as '辅助属性字段名'
,ta0.FValueType as '辅助属性值类型'
,ta0.FValueSource as '辅助属性值来源'
,ts0.FNumber as '辅助资料编码'
,ts0_l.FName as '辅助资料名称'
from T_BD_Material tm0
left join t_BD_Material_L tm0_l
on (tm0.FMATERIALID = tm0_l.FMATERIALID and tm0_l.FLOCALEID = 2052)
left join T_BD_MaterialAuxPty tm1
on (tm0.FMATERIALID = tm1.FMATERIALID)
left join T_BD_FLEXAUXPROPERTY ta0
on (tm1.FAuxPropertyId = ta0.FID)
left join T_BD_FLEXAUXPROPERTY_L ta0_l
on (ta0.fid = ta0_l.fid and ta0_l.flocaleId = 2052)
left join t_BAS_AssistantData ts0
on (ta0.FValueSource = ts0.FId)
left join t_Bas_AssistantData_L ts0_l
on (ts0.FID = ts0_l.FID and ts0_l.FLocaleId = 2052)
where tm0.FMaterialId = 100201
第三步:在物料上,对辅助属性值进行设置
物料启用了辅助属性维度后,可以对各维度的值进行设置
保存后,会把值设置信息存在:
1. T_BD_AUXPTYVALUE : 物料辅助属性可选值主表,使用FMaterialId与物料关联,FMATERIALAUXPROPERTYID 与辅助属性维度关联
2. T_BD_AUXPTYVALUEENTITY : 物料辅助属性可选值从表。 使用 FAUXPTYID 记录辅助资料内码;
可以使用如下SQL语句,查询物料辅助属性各维度设置的可选值:
select tm0.FMaterialId as '物料内码'
,tm0.FNumber as '物料编码'
,tm0_l.FName as '物料名称'
,tm1.FAuxPropertyId as '辅助属性内码'
,tm1.FIsEnable as '是否启用'
,ta0.FNumber as '辅助属性编码'
,ta0_l.FName as '辅助属性名称'
,ta0.FFlexNumber as '辅助属性字段名'
,ta0.FValueType as '辅助属性值类型'
,ta0.FValueSource as '辅助属性值来源'
,ts0.FNumber as '辅助资料编码'
,ts0_l.FName as '辅助资料名称'
,ts1.FNUMBER as '可用的辅助属性值-编码'
,ts1_l.FDATAVALUE as '可用的辅助属性值-名称'
from T_BD_Material tm0
left join t_BD_Material_L tm0_l
on (tm0.FMATERIALID = tm0_l.FMATERIALID and tm0_l.FLOCALEID = 2052)
left join T_BD_MaterialAuxPty tm1
on (tm0.FMATERIALID = tm1.FMATERIALID)
left join T_BD_FLEXAUXPROPERTY ta0
on (tm1.FAuxPropertyId = ta0.FID)
left join T_BD_FLEXAUXPROPERTY_L ta0_l
on (ta0.fid = ta0_l.fid and ta0_l.flocaleId = 2052)
left join t_BAS_AssistantData ts0
on (ta0.FValueSource = ts0.FId)
left join t_Bas_AssistantData_L ts0_l
on (ts0.FID = ts0_l.FID and ts0_l.FLocaleId = 2052)
left join T_BD_AUXPTYVALUE tv0 on (tm0.FMATERIALID = tv0.FMATERIALID and tm1.FAUXPROPERTYID = tv0.FMATERIALAUXPROPERTYID)
left join T_BD_AUXPTYVALUEENTITY tv1 on (tv0.FAUXPTYVALUEID = tv1.FAUXPTYVALUEID)
left join T_BAS_ASSISTANTDATAENTRY ts1 on (tv1.FAUXPTYID = ts1.FENTRYID)
left join T_BAS_ASSISTANTDATAENTRY_L ts1_L on (ts1.FENTRYID = ts1_l.FENTRYID and ts1_l.FLOCALEID = 2052)
where tm0.FMaterialId = 120668
查询结果:
第四步:在单据上录入物料及辅助属性
在单据上录入物料之后,如果物料启用了辅助属性,则会放开辅助属性编辑框,供用户录入。
辅助属性字段值,会存储到表格 T_BD_FLEXSITEMDETAILV 中。
图七:在采购订单上录入物料、辅助属性
使用如下SQL语句,可以查看单据录入的辅助属性值
select po.FID '采购订单内码'
,po.FBillNo '采购订单编码'
,po1.FMaterialId '明细物料内码'
,mat.FNumber '物料编码'
,mat_l.FName '物料名称'
,aux.FF100001 '等级内码'
,tFF100001.FNumber '等级编码'
,tFF100001_l.FDataValue '等级名称'
,aux.FF100002 '产地内码'
,tFF100002.FNumber '产地编码'
,tFF100002_l.FDataValue '产地名称'
from T_PUR_POOrder po
left join t_PUR_POOrderEntry po1
on (po.FID = po1.FID)
left join T_BD_Material mat
on (po1.FMaterialId = mat.FMaterialId)
left join t_BD_Material_L mat_l
on (mat.FMATERIALID = mat_l.FMATERIALID and mat_l.FLOCALEID = 2052)
left join T_BD_FLEXSITEMDETAILV aux
on po1.FAuxPropId = aux.FID
left join T_BAS_AssistantDataEntry tFF100001
on aux.FF100001 = tFF100001.FENTRYID
left join T_BAS_AssistantDataEntry_l tFF100001_l
on (tFF100001.FENTRYID = tFF100001_l.FENTRYID and tFF100001_l.FLocaleId = 2052)
left join T_BAS_AssistantDataEntry tFF100002
on aux.FF100001 = tFF100002.FENTRYID
left join T_BAS_AssistantDataEntry_l tFF100002_l
on (tFF100002.FENTRYID = tFF100002_l.FENTRYID and tFF100002_l.FLocaleId = 2052)
推荐阅读