存货记账只选择单据类型无返回结果演讲者:史忠2024年6月19日U8支持服务应用部您将从本次分享当中了解哪些内容?1、如何在看似纷繁复杂的存储过程中找到并改造为具有针对性的SQL脚本2、如何在拥有众多字段的语句中快速定位到报错点,可以更高效的排查与解决问题U8支持服务应用部目录案例介绍1分析思路2问题解决3复盘总结4U8支持服务应用部PART1案例介绍U8支持服务应用部案例介绍某用户为华北地区一家比较大的家具经营公司,目前使用U8V160版本,在使用过程中发现如下问题:存货核算的正常单据记账,发现若只按单据类型——其他入库单,其他条件不选的情况下就过滤不到任何单据记录,但是要按这类单据的某个单号过滤就可以筛选出单据并能正常记账,例如按其他入库单单号0000000033、0000000035这样过滤就行,这个问题用户此前联系过代理商,但找了很长时间也没有发现问题原因,因此提交总部让帮忙分析下问题原因,并给出解决方案!U8支持服务应用部案例介绍•先来看看这个比较‘奇特’的现象:若只按单据类型过滤(其他条件都不选),就没有任何返回结果,给人的感觉是没有未记账的其他入库单了U8支持服务应用部案例介绍•但是如果按单据类型+单据号(如33-35号)进行过滤就会有返回未记账单据的记录,感觉比较诡异!U8支持服务应用部案例介绍•首先想到的是否过滤条件中还隐藏着什么不可告人的秘密?•清空下试试U8支持服务应用部案例介绍注意看啊:在所有条件都不选的情况下,虽然返回了很多未记账单据,但看了半天,0000000033、0000000035号的其他入库单死活就没找着!再按单据类型排下序呢,就连类型为其他入库单的也没啦!会不会在下一页呀?甭费劲了就一页!U8支持服务应用部PART2分析思路U8支持服务应用部分析思路打开跟踪跟了一溜够,也没发现在哪回滚,更没直接的select筛选语句,就是执行了下面的这个存储过程,供应链同学看着眼儿熟吧execIA_AccountLoadN'1=1And(cVouTypeIN(N''08''))andcwhcodein(selectcwhcodefromwarehousewherebincost=1)anddvoudate<=N''2015-01-31''And((cWhCodeIN(SelectcWhCodeFromWarehouseWherebInCost=1))orcWhCodeisnull)AndcVouType<>N''32''','','','',''俗话说的好,过滤不到就有它过滤不到的道理:1、不满足相关条件2、后台结果集写入临时表报错3、要不就是。。。。根本就没这记录U8支持服务应用部分析思路在执行这个存储过程时,会调用此前创建的一个叫#IA_data_subsidiary的临时表(篇幅所限脚本有所缩减)注意啊只能在当前窗口中执行后续脚本才可以!(再说一遍:只能在执行创建临时表的这个窗口操作才行)我就知道早晚得出事儿!U8支持服务应用部分析思路俗话说啥来着,要不...要不...要么就是插入临时表报错!这种报错有可能是程序设计时字段长度前后不一致导致,也有可能是用户改动过字段长度导致的。那到底是哪种情况?就让咱们一起去找寻背后的真相吧。。。U8支持服务应用部分析思路有人说我一打开存储过程就蒙圈,因为这里面穿插了一大堆的变量和看不太懂的关联,还有拼接的字符串等等,毕竟咱们不是专业开发,确实是有点儿难度的话又说回来,存储过程也并不像咱们想象中的那么难,只要了解了基本方法,择(zhai)出您想要的东西,把它改造成咱自己能看得懂的脚本,一样能找到问题的关键所在,不信咱就试试。。。U8支持服务应用部分析思路下面是这个存储过程的简化版,咱们只分析对解决问题有用的那部分划重点:一定要多看绿色的,清心养眼U8支持服务应用部分析思路接茬划重点:这回要多看篮框中的部分,要慢慢理解...加深理解...再理解。。U8支持服务应用部分析思路看着是不是很面熟,把上图第二个框中的变量、参数和拼接的字符串重新处理下就是下面这个脚本:简直比太熟悉还熟悉!我自己管这个叫上插下选式脚本U8支持服务应用部分析思路看了上面的存储过程分析,您觉得还难么?其实无论什么样子的存储过程万变皆不离其宗,只要掌握对了方法,能看得懂本质,再花哨的脚本也不过如此。就是费点儿劲把他们翻译成自己能看的懂的‘白话文’而已!当然也得看您是否愿意花点时间了..U8支持服务应用部分析思路这收获确实够意外的!这到底是哪个字段啊?又是哪条记录报的错啊?这谁能看的出来啊?!把整理好的这个脚本执行下,或许还能有意外的收获...U8支持服务应用部分析思路测试方案一测试结果:一般情况下上述方案还是相对可行的,但若多达千行的数据,按该方案测试还是稍有一点不太现实按行测试:尝试将select语句中的结果集按二分法的方式,一次一半,再次一半的一半,分批测试问题记录到底在哪行或按某些条件如单据日期、仓库等分多次进行插入测试,排查问题行在哪儿U8支持服务应用部分析思路测试方案二测试结果:一般情况下上述方案也是比较可行的,但这次列数还是有点多,若按该方案测试有些力不从心的感觉按列测试:将上插下选脚本中的所有列分成部分,然后在上下语句中都先去掉相同的列分别进行插入测试,逐步排查出问题列U8支持服务应用部分析思路测试方案三循环测试:将上面的脚本改造为游标处理,按行遍历循环判断插入时究竟是哪行甚至是哪列报出来的错误或按游标循环测试每插入列值的最大长度与标准长度进行对比,根据两个长度的正差异判断是否异常测试结果:想了想,还是算了吧,这个我不会U8支持服务应用部分析思路惊不惊喜意不意外!U8支持服务应用部分析思路工具界面展示注意啊:检查时千万别选错了库!千万别写错了表!千千万万万万千千别写反了啊!U8支持服务应用部分析思路批量写入报错,历来都是费时费力查找的“痛点问题”,工具可快速高效找到问题关键所在!提升服务效率的同时增加服务满意度!U8支持服务应用部分析思路测试方案四经验测试:在所创建的临时表中,有哪些列可能会出现超长的结果?测试结果:虽然这次没用到,但它给方案五提供了借鉴根据以往经验判断,一般像备注、字符型的自定义项、字符型的自由项等就有可能存在超长的情况不妨先从这些常见的字符型字段着手,然后对比创建临时表时对应字段的长度,看看有无不匹配的selectmax(len(cDefine1)),max(len(cDefine2)),...max(len(cFree1)),max(len(cFree2)),...max(len(cDefine22)),…FromV_IA_rdrecords08nosubinnerjoinIA_ST_UnAccountVouch08ONIA_ST_UnAccountVouch08.IDSUN=nosub.IDand....whereisnull(nosub.cAccounter,N'')=N''and....U8支持服务应用部分析思路测试方案五逆向测试:先把创建临时表脚本中可能超长的列长度放大,如果插入正常,就能反向知道哪些列与标准长度不符!根据经验还是先从备注、字符型的自定义项、字符型的自由项等字段入手,通过二分法,一半一半的来!方法虽然土点儿LOW点儿吧,但简单实用!先看下创建临时表各列的标准长度:U8支持服务应用部分析思路再来个修改版的(截图是创建临时表部分,下面是插入测试,因篇幅所限无法完整展现)注:红框中字符型字段长度自行加大测试过程:先删除临时表,将部分字符型字段长度改大后重新创建临时表,插入测试若还报相同的错,那就接着往下改,重新创建临时表,再插入测试,直到找到报错字段,反正是临时表怎么改都没所谓!这个方法不费事儿,脚本都是现成儿的,拿过来用就行U8支持服务应用部分析思路测试结果:很快就发现是存货自由项10出的问题,临时表该字段标准长度为20位,实际长度为22位注意:除了单据表体的自由项外,还应同步检查存货自由项档案,避免后续再出现问题U8支持服务应用部分析思路可能有人会问,存储过程里面这么多东西,怎么能快速判断出脚本执行到哪儿报的错啊?这里我给大家分享个小技巧您一眼能瞧出是哪儿出的问题么?U8支持服务应用部分析思路第一先把存储过程做个备份啊,这个就不教了。第二是要在ALTER这个存储过程的状态下进行如下操作:看到了么,我在存储过程中只要看到EXEC执行语句,就在前后增加个print‘英文字符’按顺序往下排这样当执行这个存储过程时出现报错,就能知道是在执行其中的哪段脚本出的错了,简单吧U8支持服务应用部分析思路这回看到了吧,报错就出在A和B之间那个位置上的脚本了,返回看下修改后咱再执行试试U8支持服务应用部分析思路别躲了,就是你!最后可别忘了给人家改回来啊(或恢复下脚本备份),您给改的面目全非不也影响人家过日子嘛!不知道的还以为二开了呢U8支持服务应用部PART3问题解决U8支持服务应用部问题解决经与用户及代理商沟通,由于行业的特殊性对家具的质检非常严,因此在使用系统时启用了存货自由项做为对家具质检要求的判断标准,因该标准的质量标识极多,代理商是通过后台直接导入的存货自由项档案,其中一部分长度超过了标准的20位长,代理商为了能让存货自由项顺利导入,修改了存货自由项档案的长度,同时也调整了其他入库单子表cfree10的长度。通过后台查出超长记录仅有几条,且只涉及其他入库单,代理与用户协商后已对存货自由项档案、其他入库单表体超长自由项值及长度做了调整处理。此时单据记账再选单据类型也能正常过滤到相关记录了。U8支持服务应用部疑点追问问题虽然解决了,但明眼人还是会有点疑问的:1、为什么之前只按单据类型(其他入库单)过滤且其他条件都不选,过滤不到任何记录呢?与刚才说的原因有关系么?有关系!因为系统执行批量插入语句时,若其中一条记录插入报错,整批写入就会失败,导致过滤不出任何记录的现象U8支持服务应用部疑点追问问题虽然解决了,但明眼人还是会有点疑问的:2、选择单据类型为其他入库单且输入了具体单号后就可以过滤出来,又是为什么呢?对,只要不带自由项或有自由项但不超长的其他入库单,在过滤条件中加入单号依然是可以过滤出来的咱们打开那张可以过滤到的其他入库单看下自由项10您就明白了。。U8支持服务应用部PART4复盘总结U8支持服务应用部您从今天的分享中Get到了么?1、在看似纷繁复杂的存储过程中,如何找到并改造为自己能看的懂的SQL脚本2、在拥有众多字段的语句中能否快速定位报错点,帮助咱们更高效的排查与解决问题U8支持服务应用部复盘总结问题原因虽不是U8系统问题,也不是操作问题,但这样的情况也并非一家用户独有的。因此在没有判断出具体原因之前,是需要先按U8标准问题进行排查处理的,这个案例在处理过程以及分析思路上是具有一定通用性和可借鉴性。复盘不只是写个PPT就算完事,而是要在复盘过程中有所分析,有所收获,有所提高,使自己对此前认识模糊的、甚至完全不懂的内容通过再学习、再思考得到一次全新的认知或获得更优的解决方案!其实我们每做完一件事情,都应沉下心来思考自己在做这件事情的每一步的过程当中是否存在问题?是否有没想到或遗漏的东西?哪些步骤是否还有可优化的空间或是提升效率的可能?在解决问题的过程中是否走了弯路?有没有可能采用其他方案或方法效果会更好!要对自己所做的一切进行总结与沉淀,为指导后续处理问题积累经验,避免踩坑!我想这应该就是复盘的意义!U8支持服务应用部U8知识获取及下期预告友户通-移动端友户通-用户社区更多U8+产品知识资料、学习视频搜索获取移动端用户社区扫描二维码:关注用友友户通公众号-进入公众号点击自助服务-用户社区课程回放:用友友户通社区-学习-【U8听我说】PC网址:https://success.yonyou.comU8知识资料获取AI智能客服智能客服-AI小成7*24小时随时进行常见问题咨询U8产品端入口:登录软件门户左侧导航点击[智能客服】移动端入口:智能客服扫描二维码:预约下期U8听我说课程名称:第2期-发票管理业务流程及常见问题日期:2024年6月26日(星期三)19:00-20:00讲师:吕娟扫码预约U8支持服务应用部U8支持服务应用部