分享_单据明细报表增加一列显示现存量_使用经验
学习.交流
专业源于专注
www. onlyit. cn   
学习交流 文件下载 手册资料 交流QQ群

    

 3  1/1   1  
作者
内容
wbjjzhu  [个人空间]


注册  2012-08-22
发贴数  116
精华贴  1
原创贴  2
来自  
状态  正常

级别  会员
#1»发布于2026-09-14 22:44

应网友的求助,在销售订单的明细报表里,增加一列显示对应产品的现存量明细。 
 
在解决问题的过程中发现,在报表加载前用字典一次性加载现存量表edt_res的res_id,num两列数据。可以避免在报表更新每行数据时反复读取edt_res表,提高了一些效率。



附件(登录后才可下载):2609142244_11.txt  说明: 原文件:ONLYIT_报表脚本 销售报表显示现存量20260914.txt   大小:694 Byte

        


qf2016  [个人空间]
QQ名  meng 113779009


注册  2016-01-17
发贴数  3065
精华数  0
原创贴  0
来自  
状态  正常

级别  版主
#2»发布于2026-09-15 09:22

很不错的想法,简单实用


        


fwj3861  [个人空间]
QQ名  越南-叶子(121305301)


注册  2010-09-09
发贴数  646
精华贴  10
原创贴  20
来自  越南
状态  正常

级别  贵宾
#3»发布于2026-09-15 15:23

这一招在网页版用不上--但不是因为它不好,而是因为网页版根本没有它要解决的那个问题。 
 
我问AI,AI回答: 
为什么桌面那边非得用字典 
 
看那段脚本的形状就明白了:change_row_id / show_row_ext 是一行触发一次的回调,每显示一行就要拿 res_id 去查一次库存。不做字典,100 行明细就是 100 次查库(典型的 N+1)。dt_define 把这 100 次压成 1 次--这是在补一个被回调式表格逼出来的漏洞。 
 
网页版的形状完全不同:服务端一条 SELECT 把整批数据拼好,一次性回给浏览器,浏览器只管画。加一列库存 = 在那条 SELECT 里多 LEFT JOIN 一个聚合子查询,一次往返,还是在库里算完的。N+1 压根不存在,自然也不需要字典去救它。 
 
所以「网页版取库存更高效」这个说法成立,但原因不是网页技术更快,是两边的取数形状不一样:桌面是逐行回调,网页是整批一次查。同样的道理反过来也成立--如果哪天网页版的服务端代码里出现了「每行再去查一次」,那它就跟桌面一样慢,字典那一招照样得用。这个帖子的思路是对的,只是在网页版里该待的位置不是表格,是服务端那些逐行取属性的地方。 
 
帖子里真正值钱的不是字典,是这两句口径 
 
① edt_res 是现存量表,res_id + num。 这一条网页版早就在用了(套料出库扣库存、负库存报表都在读它),不用重新认。 
 
② 他写了 edt_id = '20'--限定了仓库。这一句不能照抄,但必须照做。 一个产品在多个仓有多行,直接 JOIN 会把明细行翻倍:每个数字看着都对,行数悄悄多了,合计跟着错--这是最难发现的一类错。网页版要写成先聚合再 JOIN: 
LEFT JOIN (SELECT res_id, SUM(num) AS inv FROM dbo.edt_res WITH(NOLOCK) 
           WHERE ISNULL(edt_id,'') NOT IN (…) GROUP BY res_id) iv ON iv.res_id = …


        于 2026-09-15 15:23 被 fwj3861 修改




官方认证第三方服务团队 (越南-叶子) QQ:121305301 TEL:+84869350626
承接越南北部-河内周边省份-OIT部署和维护服务(24小时上门或远程服务)
服务介绍:http://www.onlyit.cn/onlyit_service.html


 3  1/1   1  

登录后方可发贴


[ 电话: 0571-85462761 王先生 QQ: 124520435 加入软件QQ群 - 杭州 - 浙ICP备19051128号-1 网安 33010402003225 ]