2

我指的是以前的 SO Coldfusion Calculate Sum Total (Loop? ),它被标记为正确答案,但代码对我不起作用。

我正在尝试从多个领域创建一个总计。但我收到的错误是“未定义变量 xxx”。这是因为我试图从循环中为所有记录附加值

<cfoutput>
<cfquery name="ActivityReceipts" dbtype="query">
    SELECT
          activity,
          qty_approved,
          location,
          payment_amount, 
          shipping_cost,
          handling_cost 
   FROM   rc.RC1
   WHERE  id_number = '#Receipts.id_number#'
</cfquery>

<cfloop query="ActivityReceipts">
<tr>
<td style="text-align:left;">#ActivityReceipts.activity#</td>
<td style="text-align:left;">#ActivityReceipts.qty_approved#</td>
<td style="text-align:left;">#ActivityReceipts.location#</td>
<td style="text-align: right; padding-right: 80px;">#ActivityReceipts.payment_amount#</td>
</tr>

<cfset grandTotal =  grandTotal + ( #ActivityReceipts.payment_amount# + #ActivityReceipts.handling_cost# + #ActivityReceipts.Shipping_cost# ) />

</cfloop>


<td>#grandTotal#</td>
</cfoutput>

请注意,如果我将 grandTotal 变量设置行更改为

<cfset grandTotal =  ( #ActivityReceipts.payment_amount# + #ActivityReceipts.handling_cost# + #ActivityReceipts.Shipping_cost# ) />

它不会导致错误,但它也只对最后一行求和,而不是对所有行求和。

4

5 回答 5

5

您需要在循环之前为总 var 设置默认值...

<cfset grandTotal = 0>

此外,如果您不打算输出或引用 var,则不需要加上井号。

<cfset grandTotal =  grandTotal + ( ActivityReceipts.payment_amount + ActivityReceipts.handling_cost + ActivityReceipts.Shipping_cost ) />
于 2013-04-19T19:43:26.847 回答
4

你必须grandTotal像这样初始化:

<cfset grandTotal = 0>
<cfloop query="ActivityReceipts">
    <tr>
        <td style="text-align:left;">#ActivityReceipts.activity#</td>
        <td style="text-align:left;">#ActivityReceipts.qty_approved#</td>
        <td style="text-align:left;">#ActivityReceipts.location#</td>
        <td style="text-align: right; padding-right: 80px;">
            #ActivityReceipts.payment_amount#
       </td>
   </tr>

   <cfset grandTotal =  grandTotal + ( ActivityReceipts.payment_amount 
                                       + ActivityReceipts.handling_cost 
                                       + ActivityReceipts.Shipping_cost 
                                   ) />
</cfloop>
于 2013-04-19T19:43:48.373 回答
3

这是一种没有循环的方法。

grandTotal = ArraySum(ActivityReceipts["payment_amount"])
+ ArraySum(ActivityReceipts["handling_cost"])
+ ArraySum(ActivityReceipts["Shipping_cost"]);
于 2013-04-19T19:50:28.843 回答
2

您必须先定义和初始化变量grandTotal,然后才能执行类似<cfset grandTotal = grandTotal + .... 只需执行以下操作:

  ...
</cfquery>

<cfset grandTotal= 0>

<cfloop query="ActivityReceipts">
  ...
于 2013-04-19T19:41:43.207 回答
2

<cfset grandtotal=0>从循环之前开始。由于您在循环中引用它,并且它没有被初始化,所以您会变得不确定。

于 2013-04-19T19:42:00.910 回答