2016-08-30 2 views
0

以下の私のvalidate line関数は、addをクリックしたときにのみ有効です。したがって、金額が500で、割引を100に設定した場合、追加ボタンを押すと400になるはずです。動作しません。再度回線をクリックすると、割引が2回適用されるように見えます - 金額は300になります。これをどのように解決すればよいですか?NetSuite - OnValidateLineが機能しない

function OnValidateLine(type, name) { 
 
    var count = nlapiGetLineItemCount('expense') 
 
    var total = nlapiGetFieldValue('usertotal') 
 

 
    for (var x = 1; x <= count; x++) { 
 
    var amount = nlapiGetCurrentLineItemValue('expense', 'amount'); 
 
    var discount = nlapiGetCurrentLineItemValue('expense', 'custcolptc_discount'); 
 
    if (discount) { 
 
     nlapiSetCurrentLineItemValue('expense', 'amount', amount - discount) 
 
    } 
 
    return true; 
 
    } 
 
    return true; 
 
}

+0

これをコーディングするのではなく、NetSuiteの一般的な割引アイテムを使用しない理由はありますか?経費明細には適用されませんか? ここで実際に検証が行われているようには見えないので、代わりにこれを 'fieldChanged'に移動することを考えましたか? * Amount *または* Discount *フィールドが変更されると、いつでも更新をトリガーすることができますが、このロジックでさらに多くのシナリオやユースケースが処理されるようです。 – erictgrubaugh

+0

NetSuiteには、請求書のようにベンダー請求書の割引機能がないため、なぜこれをコード化しなければならなかったのですか。私はラインレベルで割引を適用する必要があります。一部のベンダーは割引を提供しているので、これを法案から減らす方法が必要です。私のコードは動作しますが、ワードの2行目からしかありません。 OK - 私はフィールドを試してみよう.Changed。 – MG2016

+0

ちょうどあなたが実際に 'x'や' count'を読むことは決してないことに気付きました。あなたは一行を変更するだけで 'for'ループは必要ありません。 – erictgrubaugh

答えて

2

あなたが実際にあなたのループで何もしていません。

また、この問題については、問題が多々あります。

これは、行の検証イベントではなく、recalcイベントで行う必要があります。

私がこれをやっていたら、私は計算された割引の合計である「合成」経費ラインを管理する傾向があります。誰かが経費明細を変更した場合、現在行っているやり方では、割引が2回適用されることになります。割引ラインを使用する場合は、割引を合計して割引ラインを追加または更新します。

通常、クライアントスクリプトでは、見ている各行のポインタを前進させる必要があります。下の未テストの例では、 'idフィールド?'とにかくアカウントを設定する必要があります:

var totalDiscount = 0; 
var discountExpenseAt = 0; 
for(var i = nlapiGetLineItemCount('expense'); i> 0; i--){ 
    if(nlapiGetLineItemValue('expense', 'id field?', i) == 'discount identifier') { 
discountExpenseAt = i; 
continue; 
} 
    totalDiscount += parseFloat(nlapiGetLineItemValue('expense', 'custcolptc_discount', i)) ||0; 
} 
if(totalDiscount) { 
if(discountExpenseAt){ 
nlapiSelectCurrentLineItem('expense', discountExpenseAt); 
nlapiSetCurrentLineItemValue('expense', 'amount', totalDiscount.toFixed(2)); 
nlapiSetCurrentLineItemValue('expense', 'id field?', 'discount identifier'); 
nlapiCommitCurrentLineItem('expense'); 
} 
+0

ありがとうございます - 私は自分のコードを更新し、私が何もしていなかったことを知らなかったループを削除しました!コードスニペットに感謝します。 – MG2016

関連する問題