异常重复库存数据分析方法
金蝶云社区-横横竖横点
横横竖横点
17人赞赏了该文章 1342次浏览 未经作者许可,禁止转载编辑于2018年05月15日 11:25:04

异常重复库存数据分析方法,用于分析更新库存时唯一索引重复数据和校对、盘点备份时merge into报数据不唯一错误问题

1、附件只是异常数据查询语句,修复语句需要根据数据情况自行编写
2、结存临时明细只会保存即时库存校对操作时读取的上期关账日期以后的库存单据数据,或者保存关账操作时上期关账日期至本次关账日期之间的库存单据数据
3、结存临时明细表数据直接来自单据数据表,基础资料保存的是单据上记录的ID,没有转换为masterid
4、也可以根据库存跟新日志表t_stk_inventorylog来查询看系统中都使用了哪些库存单据


/*********************   数据规则要求  ***********************


1、要求同一物料在各组织下的基本单位、库存单位、辅助单位必须保持一致

2、要求物料和即时库存表中的基本单位、库存单位、辅助单位必须保持一致

3、要求物料和库存余额表中的基本单位、辅助单位必须保持一致

4、要求物料和    库存单据   表中的基本单位、库存辅助单位必须保持一致,需要注意库存单据的基本单位、库存辅单位完成

修复后仍然可能会出现后续从非库存单据下推到库存单据携带错误单位数据的问题,如有可能尽量把非库存单据上的基本

单位也一并修复,如无法修复则需要再后续持续修复库存单据和即时库存数据,直到非库存单据关闭为止


**********************  问题数据处理方法 **************************

1、反关账到库存余额表中没有单位不一致的数据为止

2、同步物料表修复错误单据上的基本单位、库存辅单位,需要注意是否要重算对应数量

3、同步物料表修复即时库存表里的基本单位、库存单位和辅助单位,如果同步时出现重复数据,需要删除重复部分数据再做同步

4、重新校对即时库存

5、清除零库存

6、重新关账


修复脚本:在修复完物料数据后直接关联目标表和物料表同步对应单位数据,包括即时库存表、库存余额表和各库存单据表

注意:统一了物料的库存单位之后需要同步物料上冗余保存的库存单位换算分子和库存单位换算分母


***************************************************************/


/********************  问题数据查询脚本  ************************/


--查询同一物料在不同组织下基本单位不一致的数据

select t2.fbaseunitid,t1.* from T_BD_MATERIAL t1 inner join t_bd_materialbase t2 on t1.fmaterialid = t2.fmaterialid where 

t1.fmasterid in (select t3.fmasterid from (

select distinct t1.fmasterid,t2.fbaseunitid from t_bd_material t1 inner join t_bd_materialbase t2

on t1.FMATERIALID = t2.FMATERIALID) t3 group by t3.FMASTERID having count(*) > 1)


--查询同一物料在不同组织下库存单位不一致的数据

select t2.FSTOREUNITID,t1.* from T_BD_MATERIAL t1 inner join T_BD_MATERIALSTOCK t2 on t1.fmaterialid = t2.fmaterialid where 

t1.fmasterid in (select t3.fmasterid from (

select distinct t1.fmasterid,t2.FSTOREUNITID from t_bd_material t1 inner join T_BD_MATERIALSTOCK t2

on t1.FMATERIALID = t2.FMATERIALID) t3 group by t3.FMASTERID having count(*) > 1)


--查询同一物料在不同组织下辅助单位不一致的数据

select t2.FAUXUNITID,t1.* from T_BD_MATERIAL t1 inner join T_BD_MATERIALSTOCK t2 on t1.fmaterialid = t2.fmaterialid where 

t1.fmasterid in (select t3.fmasterid from (

select distinct t1.fmasterid,t2.FAUXUNITID from t_bd_material t1 inner join T_BD_MATERIALSTOCK t2

on t1.FMATERIALID = t2.FMATERIALID) t3 group by t3.FMASTERID having count(*) > 1)



--查询即时库存表基本单位和物料不一致的数据

select * from T_STK_INVENTORY t1 

inner join T_BD_MATERIALBASE t3 on t1.FMATERIALID = t3.FMATERIALID 

where t1.FBASEUNITID <> t3.FBASEUNITID


--查询即时库存表库存单位和物料不一致的数据

select * from T_STK_INVENTORY t1 inner join T_BD_MATERIALSTOCK t2

on t1.FMATERIALID = t2.FMATERIALID 

where t1.FSTOCKUNITID <> t2.FSTOREUNITID


--查询即时库存表辅助单位和物料不一致的数据

select * from T_STK_INVENTORY t1 inner join T_BD_MATERIALSTOCK t2

on t1.FMATERIALID = t2.FMATERIALID 

where t1.FSECUNITID <> t2.FAUXUNITID



--查询库存余额基本单位和物料不一致的数据

select * from T_STK_INVbal t1 

inner join T_BD_MATERIALBASE t3 on t1.FMATERIALID = t3.FMATERIALID 

where t1.FBASEUNITID <> t3.FBASEUNITID 


--查询库存余额辅助单位和物料不一致的数据

select * from T_STK_INVbal t1 inner join T_BD_MATERIALSTOCK t2

on t1.FMATERIALID = t2.FMATERIALID 

where t1.FSECUNITID <> t2.FAUXUNITID



--结存临时明细基本和物料不一致的数据   需要做库存关账才能查询最新有效数据,可以据此结果查询都哪些业务单据基本单位数据有问题

 select t1.FFORMID 单据类型,t5.fname 单据类型名称,t1.fbillno 单据编号,t1.fbillid 单据内码,t1.FBASEQTY 基本单位数量,t1.FBASEUNITID 单据基本单位,

t2.FBASEUNITID 物料基本单位, t1.fmaterialid 物料内码,t4.fnumber 物料编码, t1.* 

from T_STK_STKBALOCCUR t1 inner join 

T_BD_MATERIALBASE t2 on t1.FMATERIALID = t2.FMATERIALID 

inner join T_BD_MATERIAL t4 on t1.FMATERIALID = t4.FMATERIALID 

 inner join t_meta_objecttype_L t5 on t1.fformid = t5.fid and t5.flocaleid = 2052

where t1.FBASEUNITID <> t2.FBASEUNITID



--结存临时明细辅助单位和物料不一致的数据   需要做库存关账才能查询最新有效数据,可以据此结果查询都哪些业务单据库存辅单位数据有问题

 select t1.FFORMID 单据类型,t5.fname 单据类型名称,t1.fbillno 单据编号,t1.fbillid 单据内码,t1.FSECUNITID 单据辅助单位,t3.FAUXUNITID 物料辅助单位, 

 t1.fmaterialid 物料内码,t4.fnumber 物料编码, t1.* 

from T_STK_STKBALOCCUR t1  

inner join T_BD_MATERIALSTOCK t3 on t1.FMATERIALID = t3.FMATERIALID 

inner join T_BD_MATERIAL t4 on t1.FMATERIALID = t4.FMATERIALID 

 inner join t_meta_objecttype_L t5 on t1.fformid = t5.fid and t5.flocaleid = 2052

where t1.FSECUNITID <> t3.FAUXUNITID 




查询重复关账记录
select count(*) ,FBALTYPE,FBALDATE,FSTOCKORGID,FOWNERTYPEID,FOWNERID,FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOCID,FMATERIALID,FBOMID,FAUXPROPID,
FMTONO,FPROJECTNO,FSTOCKSTATUSID,FLOT,FPRODUCEDATE,FEXPIRYDATE from T_STK_INVBAL 
group by  FBALTYPE,FBALDATE,FSTOCKORGID,FOWNERTYPEID,FOWNERID,FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOCID,FMATERIALID,FBOMID,FAUXPROPID,
FMTONO,FPROJECTNO,FSTOCKSTATUSID,FLOT,FPRODUCEDATE,FEXPIRYDATE
having count(*) > 1


赞 17