物料客商编码名称数据存在数据库中,但列表无法显示问题分析过程原创
6人赞赏了该文章
31次浏览
未经作者许可,禁止转载编辑于2024年12月16日 16:34:28
摘要由AI智能服务提供
本文介绍了在系统集成中添加的基础资料可能在列表页无法正常显示的问题,并提出了解决方案。开发者需通过浏览器请求中的traceId查看执行sql,并对比过滤条件。同时提供了物料查询的SQL示例及分析步骤,最后总结了可能导致查询不到的几个原因及适用单据。
有用
反馈
一、需求
根据系统页面添加的数据在列表页一般可以正常显示,但是基础资料有很多客户现场都是通过接口或者集成的方式添加的,这过程中会存在遗漏关系表集成或有些字段没有赋值的情况,需要进行排查分析。
二、解决方案
需要根据浏览器请求中的traceId 到日志中查看执行 sql,然后把sql 放到查询分析器中执行,对比过滤条件。
三、开发者操作步骤
1、以下通过物料为例,打开浏览器F12,输入具体的查询条件(案例为编码,如有问题下图查询为空)点击页面查询,获取到traceId
2、打开monitor,输入上一步骤获取到的traceId,执行查询,分析日志输出的SQL,以下是日志跟物料查询相关的SQL(如日志没有开启SQL打印,可以开启后重现执行获取SQL)。
3、复制SQL 打开查询分析器,调整SQL
4、执行调整后的SQL,此时如果数据错误,页面是查询不出来的,这里查询分析器也查不出来。下面根据例子具体,不同的SQL 分析步骤不一样,但大体相同。
-- 日志SQL SELECT TOP 1000,0 A.fcreateorgid "createorg", C.fenableproduct "enableproduct", C.fmaterialform "materialform", A.fauxptyunit "auxptyunit", A.fnumber "number", C.fmaterialtype "materialtype", A.fenable "enable", C.fenabletrustee "enabletrustee", C.fenableinv "enableinv", A.FId "id", C.fenableinspect "enableinspect", A.FBaseUnit "baseunit", CASE WHEN B.FModel IS NULL THEN A.FModel WHEN B.FModel = '' THEN A.FModel WHEN B.FModel = ' ' THEN A.FModel ELSE B.FModel END "modelnum", A.fctrlstrategy "ctrlstrategy", C.fhazardous "hazardous", C.fenableconsign "enableconsign", C.fenablematerialversion "_F_534707027", C.fenablesale "enablesale", C.fisdisposable "isdisposable", A.fsrccreateorgid "srccreateorg", C.fpiecemanage "piecemanage", C.fenablepur "enablepur", C.fenableoutsource "enableoutsource", C.fenablevmi "enablevmi", CASE WHEN B.fname IS NULL THEN A.fname WHEN B.fname = '' THEN A.fname WHEN B.fname = ' ' THEN A.fname ELSE B.fname END "name", C.fenableasset "enableasset", A.fstatus "status" FROM T_BD_Material A LEFT JOIN T_BD_Material_L B ON B.FId=A.FId AND B.FLocaleId='zh_CN' LEFT JOIN T_BD_Material_S C ON C.FId=A.FId WHERE A.fenable = ? AND A.fnumber like ? AND (A.fctrlstrategy = ? AND A.fstatus = ? OR A.FId in ( ( select fdataid from T_BD_Material_U where fuseorgid = 100000 ))) '1','%item-0009999%','5','C' -- SQL 整理 SELECT TOP 1000,0 A.fcreateorgid "createorg", C.fenableproduct "enableproduct", C.fmaterialform "materialform", A.fauxptyunit "auxptyunit", A.fnumber "number", C.fmaterialtype "materialtype", A.fenable "enable", C.fenabletrustee "enabletrustee", C.fenableinv "enableinv", A.FId "id", C.fenableinspect "enableinspect", A.FBaseUnit "baseunit", CASE WHEN B.FModel IS NULL THEN A.FModel WHEN B.FModel = '' THEN A.FModel WHEN B.FModel = ' ' THEN A.FModel ELSE B.FModel END "modelnum", A.fctrlstrategy "ctrlstrategy", C.fhazardous "hazardous", C.fenableconsign "enableconsign", C.fenablematerialversion "_F_534707027", C.fenablesale "enablesale", C.fisdisposable "isdisposable", A.fsrccreateorgid "srccreateorg", C.fpiecemanage "piecemanage", C.fenablepur "enablepur", C.fenableoutsource "enableoutsource", C.fenablevmi "enablevmi", CASE WHEN B.fname IS NULL THEN A.fname WHEN B.fname = '' THEN A.fname WHEN B.fname = ' ' THEN A.fname ELSE B.fname END "name", C.fenableasset "enableasset", A.fstatus "status" FROM T_BD_Material A LEFT JOIN T_BD_Material_L B ON B.FId=A.FId AND B.FLocaleId='zh_CN' LEFT JOIN T_BD_Material_S C ON C.FId=A.FId WHERE A.fenable = '1' AND A.fnumber like '%item-0009999%' AND (A.fctrlstrategy = '5' AND A.fstatus = 'C' OR A.FId in ( ( select fdataid from T_BD_Material_U where fuseorgid = 100000 ))) -- 4.1、拆分SQL,先执行, SELECT TOP 1000,0 A.fcreateorgid "createorg", C.fenableproduct "enableproduct", C.fmaterialform "materialform", A.fauxptyunit "auxptyunit", A.fnumber "number", C.fmaterialtype "materialtype", A.fenable "enable", C.fenabletrustee "enabletrustee", C.fenableinv "enableinv", A.FId "id", C.fenableinspect "enableinspect", A.FBaseUnit "baseunit", CASE WHEN B.FModel IS NULL THEN A.FModel WHEN B.FModel = '' THEN A.FModel WHEN B.FModel = ' ' THEN A.FModel ELSE B.FModel END "modelnum", A.fctrlstrategy "ctrlstrategy", C.fhazardous "hazardous", C.fenableconsign "enableconsign", C.fenablematerialversion "_F_534707027", C.fenablesale "enablesale", C.fisdisposable "isdisposable", A.fsrccreateorgid "srccreateorg", C.fpiecemanage "piecemanage", C.fenablepur "enablepur", C.fenableoutsource "enableoutsource", C.fenablevmi "enablevmi", CASE WHEN B.fname IS NULL THEN A.fname WHEN B.fname = '' THEN A.fname WHEN B.fname = ' ' THEN A.fname ELSE B.fname END "name", C.fenableasset "enableasset", A.fstatus "status" FROM T_BD_Material A LEFT JOIN T_BD_Material_L B ON B.FId=A.FId AND B.FLocaleId='zh_CN' LEFT JOIN T_BD_Material_S C ON C.FId=A.FId WHERE A.fenable = '1' AND A.fnumber like '%item-0009999%' -- 4.1.1、无数据,检查 fenable 是否正确,结束 -- 4.1.2、有数据, -> 4.2 -- 4.2、检查 fctrlstrategy 和 fstatus 的值是否正确,该数据是否属于全局共享,是则 A.fctrlstrategy = '5', -- 4.3、不是全局共享就需查询使用表 T_BD_Material_U 非全局共享数据,调用保存操作后会自动保存数据,如果数据不对或没有调用保存操作则会没有数据,影响查询。 select * from T_BD_Material_U where fuseorgid = 100000 and fdataid = 存在数据的FID;
总结:一般同步或集成时有可能遗漏以下几个点造成无法查询到:
1、没有调用保存操作,_U 表没有数据;
2、状态不对,包括status 或 enable;
3、编码或名称存在空格;
4、没有保存到物料、客商对应的分类标准中。
四、适用单据
主要使用物料、客户、供应商,其他一些有管控策略功能的基础资料也适用。
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读