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

ループの前に総計変数のデフォルトを設定する必要があります...

<cfset grandTotal = 0>

また、変数を出力または引用しない場合は、ポンド記号を付ける必要はありません。

<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 に答える
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 に答える