自在猫先生 2023-10-12 12:00 采纳率: 62.9%
浏览 11
已结题

Microsoft Dynanics Ax x++ sum求和的问题

这个语言名为 Microsoft Dynamics Ax x++语言,这个语言不是很熟悉,希望得到帮助,有实力的直接sx可远程
为什么代码计算出来的值跟sqll 查询出来的不对
sql sum求和出来的值是 2625 代码计算出来的翻倍了,while循环连续进去了8次进行sum

select SUM( ReqTransCov.QTY) as ' QTY' from ReqTransCov 
join ReqTrans on ReqTrans.RECID=ReqTransCoV.RECEIPTRECID
Join ReqPo on ReqTrans.Refid = ReqPo.RefId AND ReqTrans.REFTYPE=ReqPo.REFTYPE and ReqTrans.planVersion = ReqPo.planVersion 
join reqPlanVersion on ReqTransCov.PlanVersion=reqPlanVersion.RecId 
WHERE ReqTransCov.RECEIPTRECID IN ('68721755025','68721755026',' 68721755027','68721755028')
AND ReqPo.REFTYPE=  reqTrans.REFTYPE  and ReqTrans .ActionType != 9
group by  ReqTransCov.RECID
部分代码如下
while  (queryRunReqPo.next())
        {
            gInventTable = queryRunReqPo.get(tableNum(InventTable));
            //gReqPo   =   queryRunReqPo.get(tableNum(ReqPo));
            //gReqTrans   =   queryRunReqPo.get(tableNum(ReqTrans));
           
            while select  gReqPo where gReqPo.ItemId == gInventTable.ItemId && gReqPo.RefType == ReqRefType::ItemPlannedOrder
                && (gReqPo.ReqDateDlv >= monthStartDate && gReqPo.ReqDateDlv<=monthEndDate)
                join gReqTrans where gReqTrans.RefId == gReqPo.RefId && gReqTrans.RefType == gReqPo.RefType 
                && gReqTrans.PlanVersion == gReqPo.PlanVersion && gReqTrans.ActionType != ActionType::Cancel
                join reqPlanVersion where  gReqPo.PlanVersion==reqPlanVersion.RecId
                join reqPlan where reqPlan.ReqPlanId==reqPlanVersion.ReqPlanId
                join reqPlanSched where reqPlanSched.ReqPlanIdSched==reqPlan.ReqPlanId && reqPlanSched.MRP == NoYes::Yes
            {
                gReportTableTmp.clear();
                gReportTableTmp.PrimaryVendorId = gInventTable.PrimaryVendorId;
                gReportTableTmp.ItemId = gInventTable.ItemId;
                gReportTableTmp.NameAlias = gInventTable.NameAlias;
                gReportTableTmp.ItemContainerQty = TG_InventProjectedReport_Tmp::getQtyPerContainer(gInventTable.ItemId);
                gReportTableTmp.DateDay = gReqPo.ReqDateDlv;//日期
               
                if(reqPlanSched.MRP == NoYes::Yes)
                {
                
                    select sum(QTY) from curReqTransCov
                        group by curReqTransCov.RECID
                        where (curReqTransCov.RECEIPTRECID == any2Int64('68721755025')
                        || curReqTransCov.RECEIPTRECID == any2Int64('68721755026')
                         || curReqTransCov.RECEIPTRECID == any2Int64('68721755027'
                         || curReqTransCov.RECEIPTRECID == any2Int64('68721755028')
                      join curReqTrans
                          where curReqTrans.RECID == curReqTransCov.RECEIPTRECID
                              && curReqTrans.ActionType != 9
                     join curReqPo
                         where curReqTrans.Refid == curReqPo.RefId &&
                               curReqTrans.REFTYPE == curReqPo.REFTYPE &&
                                curReqTrans.planVersion == curReqPo.planVersion
                                  && curReqPo.REFTYPE == 33
                      join curReqPlanVersion
                          where curReqTransCov.PlanVersion == curReqPlanVersion.RecId ;


                    gReportTableTmp.Qty = curReqTransCov.Qty;
                }
               else
                {
                    gReportTableTmp.Qty = gReqTrans.Qty;//SUM
               }
              
                gReportTableTmp.Qty = gReqTrans.Qty;//SUM                       
        }

sql查询结果截图

img


得到报表值 这个QTY就是对应的值 红框中第一个格子就是日期为1号的值以此类推,我现在查询出来的是整个月的,需要把这一个月的值匹配到报表中,我得到正确的sql查询结果是2635,这2625就应合理分配到日期1号和8号的格子中。

img

  • 写回答

12条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-12 12:03
    关注
    获得1.50元问题酬金

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    根据你提供的代码,我注意到在while循环的第二个内部查询中,你使用了group by curReqTransCov.RECID并且该查询返回了一个sum值。然后你又为gReportTableTmp.Qty赋值了curReqTransCov.Qty。但是在之后,你又为gReportTableTmp.Qty赋值了gReqTrans.Qty,因此导致gReportTableTmp.Qty的值变成了gReqTrans.Qty

    我推测你可能需要在第二个查询的select sum(QTY) from curReqTransCov语句之后添加一个into语句来将求和的值保存到一个变量中,然后将这个变量赋值给gReportTableTmp.Qty。这样可以确保代码计算出来的和与SQL查询的和一致。

    下面是可能的更正代码,供参考:

    ...
    int64 sumQty;
    
    select sum(QTY) from curReqTransCov
        group by curReqTransCov.RECID
        where (curReqTransCov.RECEIPTRECID == any2Int64('68721755025')
            || curReqTransCov.RECEIPTRECID == any2Int64('68721755026')
            || curReqTransCov.RECEIPTRECID == any2Int64('68721755027')
            || curReqTransCov.RECEIPTRECID == any2Int64('68721755028'))
        join curReqTrans
            where curReqTrans.RECID == curReqTransCov.RECEIPTRECID
                && curReqTrans.ActionType != 9
        join curReqPo
            where curReqTrans.Refid == curReqPo.RefId &&
                curReqTrans.REFTYPE == curReqPo.REFTYPE &&
                curReqTrans.planVersion == curReqPo.planVersion
                    && curReqPo.REFTYPE == 33
        join curReqPlanVersion
            where curReqTransCov.PlanVersion == curReqPlanVersion.RecId
        into sumQty; // 保存sum值到变量sumQty
    
    gReportTableTmp.Qty = sumQty; // 使用sumQty作为gReportTableTmp.Qty的值
    ...
    

    请注意,根据你的具体需求,可能还需要进一步调整代码。此外,在使用类似于while循环嵌套的结构时,确保对查询结果的处理和变量的赋值逻辑是正确的非常重要。你可以根据我提供的更正代码进行调整和测试,以确保所需的结果正确无误。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 修改了问题 10月12日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 在rhel8中安装qemu-kvm时遇到“cannot initialize crypto:unable to initialize gcrypt“报错”
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 paddle库安装时报错提示需要安装common、dual等库,安装了上面的库以后还是显示报错未安装,要怎么办呀?
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀