1993-2019金蝶国际软件集团有限公司金蝶中国客户成功部出品主讲人:林天杰时间:2020年06月金蝶云·星空数据结构探究生产制造提纲1.生产制造后台数据数据表的命名规范和特点生产制造主要业务的相关表介绍2.生产制造模块常见数据问题3.数据处理注意事项数据表的命名规范和特点1.表的命名格式以模块区分,例如物料清单主要是T_ENG_XXX,生产订单相关的T_PRD_XXX,委外订单相关的就是T_SUB_XXX,字段的命名也是以【F+英文简称】为主,尽量做到望文生义。2.多语言表存在于_L表中,单据之间上查下查的数据,主要保存在t_BF_InstanceEntry表3.可在BOS中查到绝大多数常用字段对应的后台数据表和字段。4.以下网址能查到很大一部分生产制造表结构字段https://open.kingdee.com/K3Cloud/PDM/SCM.htm工程数据介绍物料清单的数据表。工程数据-物料清单主要表结构物料清单单据头和子项明细--T_ENG_BOM、T_ENG_BOMCHILD;阶梯用量--T_ENG_BOMCHILDLOTBASEDQTY物料控制--T_ENG_BOMCHILD_A;物料清单联副产品--T_ENG_BOMCOBY物料分组--T_ENG_BOMGROUP工程数据-物料清单分配类型的物料清单,在分配后表明细数据通过FMASTERID关联,如以下两个表:T_ENG_BOM,T_ENG_BOMCHILD--生产管理-生产订单/生产用料清单主要表结构SELECT*FROMT_PRD_MOA--生产订单单据头JOINT_PRD_MOENTRYBONA.FID=B.FID--生产订单明细信息JOINT_PRD_MOENTRY_ACONB.FENTRYID=C.FENTRYID--明细分表(记录各种数量的相关字段以及开工下达日期)JOINT_PRD_MOENTRY_QDONB.FENTRYID=D.FENTRYID--明细分表(记录未入库或退库数量以及领料套数)JOINT_PRD_MOENTRY_LKEONB.FENTRYID=E.FENTRYID--记录源单信息--------------------------------------------------select*fromT_PRD_PPBOMa--用料清单单据头joinT_PRD_PPBOMENTRYbona.fid=b.fid--用料清单表体明细页签joinT_PRD_PPBOMENTRY_cconb.fentryid=c.fentryid--物料控制页签joinT_PRD_PPBOMENTRY_Qdonb.fentryid=d.fentryid--各种数量字段相关的数量joinT_PRD_PPBOMENTRY_lkeonb.fentryid=e.fentryid--记录源单反写信息生产管理-生产订单/生产用料清单注意!在星空里数量字段通常都是有多单位的数量,在前台能看到的一般是业务单位的数量,但是要修改的时候,记得一定要连基本单位的数量也要一起处理比如用料清单的已领数量,还有基本单位的已领数量。(在库存单据,甚至还有库存单位的基本数量,在计算扣减库存的时候用的。)委外管理-委外订单/委外用料清单主要表结构SELECT*FROMT_SUB_REQORDERA--委外订单单据头JOINT_SUB_REQORDERENTRYBONA.FID=B.FID--委外订单明细信息JOINT_SUB_REQORDERENTRY_ACONB.FENTRYID=C.FENTRYID--明细分表(记录数量的相关字段上游单据的单号内码)--------------------------------------------------select*fromT_SUB_PPBOMa--用料清单单据头joinT_SUB_PPBOMENTRYbona.fid=b.fid--用料清单表体明细页签joinT_SUB_PPBOMENTRY_cconb.fentryid=c.fentryid--物料控制页签joinT_SUB_PPBOMENTRY_Qdonb.fentryid=d.fentryid--各种数量字段相关的数量joinT_SUB_PPBOMENTRY_lkeonb.fentryid=e.fentryid--记录源单反写信息T_SUB_REQORDER--单据头+entry--明细表+A/B/C/D/E/Q/L/lk--加上字母组成明细拆分表-A,Q一般都是各种数量字段的分表-LK固定是跟反写规则以及上游源单据信息有关-L多语言表,查具体中文名称时可用。-C对业务单据一般是核算表,保存的核算的单价金额也存在例外:物料清单明细:T_ENG_BOMCHILD+A/L生产领料单明细:T_PRD_PICKMTRLDATA+A/C/CE/LK下游单据比如生产管理的生产汇报,生产入库,对应用料清单下游的领退补单据的表名可以通过查数据字典或者登陆BOS去查.星空的数据表命名规范:工程数据--数据问题案例分享:1.问题:物料清单无法同步生产用料清单排查方法:https://vip.kingdee.com/article/45360这里讨论里面的第3种情况:物料清单同步更新用料清单,同步之后提示抛出同步成功,而用料清单上没有任何变化?这种情况说明用料清单存在了错误数据,此时需要放开用料清单的BOM展开路径和BOM分录内码,检查用料清单上面BOM展开路径是否有重复(如果子项非跳层件下面的子项,BOM展开路径是直接等于BOM分录内码的,如果子项是跳层件下的子项,BOM展开路径是跳层件所处BOM的分录内码+自身所在BOM里面BOM分录内码)衍生问题:比如物料清单删除某个物料后来又重新新增回来,原来用料清单的那行物料已经领料了。操作同步用料清单,这行物料出现了两行相同的物料处理逻辑。工程数据--数据问题案例分享:2.问题:同步物料的基础信息到BOMselectb.FISSUETYPE物料的发料方式,b.FOVERCONTROLMODE物料超发控制方式,b.FISMINISSUEQTY物料考虑最小发料批量,c.FISSUETYPEBOM的发料方式,c.FOVERCONTROLMODEBOM的发料方式,c.FISMINISSUEQTYBOM的发料方式,*fromT_BD_MATERIALainnerjoinT_BD_MATERIALPRODUCEbona.fmaterialid=b.fmaterialidinnerjoinT_ENG_BOMCHILDconb.fmaterialid=c.fmaterialidwherea.fnumber='CH4416'工程数据--数据问题案例分享:3.问题:物料清单修改保存后分配组织出现了重复行selecta.fid,a.fmasterid,a.fnumber,a.FCREATEORGID,a.FUSEORGID,b.FMASTERID,*fromT_ENG_BOMainnerjoinT_ENG_BOMCHILDbona.fid=b.fidwherea.fnumber='CH4441_V1.0'生产管理--数据问题案例分享:1.问题:用料清单全部领料了为何还显示部分领料?1、领料套数计算公式:已领+补料-报废-良品退料-作业不良-来料不良*分母/分子/(1-物料上的消耗波动/100),然后计算找到最小值就是领料套数了,12月补丁以前生产入库领料查询的领料套数是考虑消耗波动的,新补丁这报表和订单的领料套数是不考虑波动消耗的,只有入库材料领用套数校验和结案控制校验在制材料数量会考虑波动消耗。出现这情况,大部分原因是因为分子与基本单位分子,不对导致,部分是因为基本单位的领料数量与业务单位的领料数量异常对不上,系统在计算领料套数是取基本单位的领退补数量和基本单位的分子分母,计算出基本单位的领料套数后再转换成业务单位的领料套数。参考脚本:selectfreplacegroup项次,sum(FBASEPICKEDQTY)基本单位领料数量,sum(FBASEREPICKEDQTY)基本单位补领数量,sum(FBASESCRAPQTY)基本单位报废数量,sum(FBASEGOODRETURNQTY)基本单位良品退料数量,sum(FBASEINCDEFECTRETURNQTY)基本单位来料不良退料数量,sum(FBASEPRCDEFECTRETURNQTY)基本单位作业不良退料数量,sum(FBASEDENOMINATOR)基本单位分母,sum(a.FBASENUMERATOR)基本单位分子,sum((FBASEPICKEDQTY+FBASEREPICKEDQTY-FBASESCRAPQTY-FBASEGOODRETURNQTY-FBASEINCDEFECTRETURNQTY-FBASEPRCDEFECTRETURNQTY)*FBASEDENOMINATOR/a.FBASENUMERATOR)基本单位领料套数fromT_prd_PPBOMentryainnerjoinT_prd_PPBOMENTRY_Qbona.fentryid=b.fentryidinnerjoinT_PRD_PPBOMcona.fid=c.fidwherec.fbillno='PPBOM00000350'anda.fmustqty<>0groupbyFREPLACEGROUP生产管理--数据问题案例分享:生产管理--数据问题案例分享:根据领料套数公式找到领料最小的那个项次,根据这个项次号找到对应的分录行数据在具体分析原因。参考脚本:select*fromT_PRD_PPBOMainnerjoinT_PRD_PPBOMENTRYbona.fid=b.fid--可以查看分子分母,基本单位分子分母innerjoinT_PRD_PPBOMENTRY_qconb.fentryid=c.fentryid--可以查看领退补数量和基本单位的领退补数量wherea.fbillno='PPBOM00000350'andb.freplacegroup=4生产管理--数据问题案例分享:2.问题:倒冲平台应倒冲数量不对应倒冲数量的公式:(基本单位入库数量*使用比例/100*基本单位分子/基本单位分母)+((基本单位应发-基本单位标准)*基本单位入库数量/基本单位生产数量)然后在根据基本单位换算成业务单位可以根据此公式在数据库找到对应字段值计算看看,一般也是基本单位的字段跟业务单据有异常了。生产入库单主要表:selectb.FREALQTY实收数量,b.FBASEREALQTY基本单位实收数量,*fromT_PRD_INSTOCKa--单据头innerjoinT_PRD_INSTOCKENTRYbona.fid=b.fid--明细表innerjoinT_PRD_INSTOCKENTRY_aconb.fentryid=c.fentryid--明细表的拆分表leftjoinT_PRD_INSTOCKENTRY_Cdonb.fentryid=d.fentryid--生产入库单核算表wherea.fbillno='SCRK00000007'生产管理--数据问题案例分享:3.问题:倒冲提示超出最小发料批量?用料清单中,超发控制方式“最小发料批量”,生产/委外领料单保存,去年6月底的补丁增加的校验,校验公式:领料单保存时,累计数量(当前反写领料选单数加上用领料清单上已有领料选单数)不能大于:向上取整{应发数量/最小发料批量}*最小发料批量-【领料选单数量】+【良品退料数量】+【来料不良退料数量】,否则系统提示:“生产/委外领料单第1%行,超出最小发料批量”排查方式:先将倒冲方式改为“交互式倒冲”,再去手工倒冲,弹出的领料单点保存会提示具体的行数超领了。如下:假设最小发料批量=1,没有退料的情况。最大领料数=7最大领料数=6生产管理--数据问题案例分享:4.问题:领料单没有反写已领数量该怎么修复?领料单根据反写规则设定字段值FBASEACTUALQTY反写累加到用料清单的基本单位已领数量FBASEPICKEDQTY。领料单已经审核了,但是用料清单的已领数量还是为空,要不就是领料单的这个字段值为0,要不就是调用反写规则出现了异常。出现这样的异常该怎么修正?生产管理--数据问题案例分享:第一步,根据领料单的表里用料清单分录内码字段汇总基本单位实发数量:参考脚本:selectFPPBOMENTRYID,--对应用料清单内码sum(FBASEACTUALQTY)FBASEACTUALQTY,--基本单位实发数量sum(FACTUALQTY)FACTUALQTY--业务单位实发数量fromT_PRD_PICKMTRLa--领料单单据头innerjoinT_PRD_PICKMTRLdatabona.fid=b.fid--领料单明细表innerjoinT_PRD_PPBOMENTRY_qconb.FPPBOMENTRYID=c.fentryidinnerjoinT_PRD_PPBOMdonc.fid=c.fidandd.fid=c.fidwherea.FDOCUMENTSTATUS='C'--单据状态字段,C为已审核andd.fbillno='PPBOM00000350'groupbyFPPBOMENTRYID生产管理--数据问题案例分享:第二步,将第一步的结果写进临时表#a,将基本单位实发数量与用料清单的基本单位已领数量比较对应:参考脚本:selecta.fentryid,b.FBASEMUSTQTY,--基本单位应发数量b.FBASESELPICKEDQTY,--基本单位领料选单数量b.FSELPICKEDQTY,--领料选单数量b.FBASEPICKEDQTY,--基本单位已领数量b.FPICKEDQTY,--已领数量b.FNOPICKEDQTY,--未领数量b.FBASENOPICKEDQTY,--基本单位未领数量b.FWIPQTY,--在制数量b.FBASEWIPQTY,--基本单位在制数量b.FCONSUMEQTY,--已消耗数量b.FBASECONSUMEQTY,--基本单位已消耗数量c.FBASEACTUALQTY,--领料单基本单位实发数量汇总c.FACTUALQTY--领料单实发数量汇总fromT_PRD_PPBOMentryainnerjoinT_PRD_PPBOMentry_qbonc.fentryid=a.fentryidinnerjoin#acona.fentryid=b.FPPBOMENTRYIDwhereb.FBASEACTUALQTY<>a.FBASEPICKEDQTY--根据领料单基本单位实发数量<>用料清单基本单位已领数量生产管理--数据问题案例分享:第三步,将领料单汇总的基本单位实发数量更新到用料清单的基本单位已领数量参考脚本:updateasetFBASEPICKEDQTY=b.FBASEACTUALQTY,FPICKEDQTY=b.FACTUALQTYfromT_PRD_PPBOMentry_qainnerjoin#abona.fentryid=b.FPPBOMENTRYIDwhereb.FBASEACTUALQTY<>a.FBASEPICKEDQTY第四步,根据最新的已领数量级联更新未领数量和在制数量,计算公式:未领数量=应发数量-已领数量+良品退料+来料不良updateasetb.FNOPICKEDQTY=a.FMUSTQTY-b.FPICKEDQTY+b.FGOODRETURNQTY+b.FINCDEFECTRETURNQTY,b.FBASENOPICKEDQTY=a.FBASEMUSTQTY-b.FBASEPICKEDQTY+b.FBASEGOODRETURNQTY+b.FINCDEFECTRETURNQTYfromT_PRD_PPBOMentryainnerjoinT_PRD_PPBOMentry_qbonc.fentryid=a.fentryidwherec.fentryidin(selectfentryidfrom#a)计算公式:在制数量=已领数量+补领数量-良品退料-来料不良-作业不良-报废数量-已消耗数量updateasetb.FWIPQTY=b.FPICKEDQTY+b.FREPICKEDQTY-b.FGOODRETURNQTY-b.FPRCDEFECTRETURNQTY-b.FINCDEFECTRETURNQTY-b.FSCRAPQTY-b.FCONSUMEQTY,b.FBASEWIPQTY=b.FBASEPICKEDQTY-b.FBASEREPICKEDQTY-b.FBASEGOODRETURNQTY-b.FBASEINCDEFECTRETURNQTY--b.FBASEPRCDEFECTRETURNQTY-b.FBASESCRAPQTY-b.FBASECONSUMEQTYfromT_PRD_PPBOMentryainnerjoinT_PRD_PPBOMentry_qbonc.fentryid=a.fentryidwherec.fentryidin(selectfentryidfrom#a)生产管理--数据问题案例分享:5.问题:反审核提示有下游单据,打开单据显示已清理出现这情况一般都是下游单据删了但关联关系还在,关联表:T_BF_INSTANCENETRY根据上游单据的明细表的分录内码fentryid找到那条关联关系。可以根据FTTABLENAME和FTID字段,去对应表查询下数据是否还在,如果确认不在,根据主键frouteid过滤删除即可解决。上游单据明细表名上游明细表的分录内码FENTRYID下游单据明细表名下游单据明细表分录内码fentryid生产管理--数据问题案例分享:6.问题:各种报表查询报截断字符串或者除以零(运用profiler)比如:生产领料差异汇总表过滤提示“尝试除以零”前台是很难判断,善用sqlserver的profiler跟踪工具。生产管理--数据问题案例分享:提取可疑的sql直接执行查询通常会报同样的错在通过分析sql,排除法,定位到是T_bd_materialstock表的fstoreurnum=0了。在单独过滤查询,确认了是异常数据,修复,报表就可以正常打开了。生产管理--数据问题案例分享:7.问题:计量单位删除提示被物料引用,前台没发现(运用profier)这种情况,也可以通过profier跟踪。在前台执行一次删除后,在跟踪出来的脚本。可以直接快速查找“采购订单”快速定位到可疑脚本生产管理--数据问题案例分享:能查询出数据代表还存在采购单据引用了这个单位,具体的单据在根据表关联去查学习数据结构1、记住“核心数据表”中正常的数据是什么“形状”,或者说正常的数据应遵循什么样的“规则”。这样在查数据的时候,通过浏览数据库表,就有可能一眼发现“异常”的记录。比如:T_PRD_MOENTRY表中fbaseqty为0,正常生产订单有数量的话这个基本单位数量都不可能为0的。这样一看就知道是异常数据了。2、学习数据结构不仅要记住核心数据表各个字段的含义,对数据处理更有帮助的是学习“数据流”。字段是“死”的,而“数据流”是动态的过程。3、学习“数据流”的方法是:新建一个标准帐套,根据反写规则,下推一张单据前,上游单据的字段值是怎样的。在下游单据进行保存,审核等操作后,上游哪些数量字段被累加了。哪些字段被扣减了。数据处理注意事项1、增加数据时,建议主键值与标准的区分开来。如生产订单明细表的主键是100001、100002….,后台新增的可从1开始,这样后续方便辨别,也不会影响表格主键的增长。删除、修改数据前,一定做好表备份,如发生错误可及时恢复数据。2、能不动后台数据解决的问题,就不要通过后台数据解决!3、数据处理前考虑好修改后的影响,重大修改必须先做好测试!4、运用工具。社区有大量课程或帖子,遇到问题可先搜下;通过SQLProfiler工具跟踪看看数据变化,并与标准环境的进行对比分析;通过BOS查看表字段等。1993-2019金蝶国际软件集团有限公司Thanksterimakasih感謝谢谢ありがとうขอบคุ ณ