1

OpenERP HR Expenseモジュールでは、カスタマイズが必要です。2つのフィールドを追加しました。1つはCompany(x_adv)から取得した事前のフィールドで、もう1つはdue amount(x_dueamt)です。どこで何をコードを書くべきか。

たとえば、従業員AはプロジェクトX 500 INRのために会社から前払いしましたが、彼の総経費は1000INRです。ここで、支払額500インドルピーを自動的に計算します(x_dueamtは読み取り専用です)。

私たちを助けてください....事前に感謝します...

4

1 に答える 1

0

これは、次の 2 つの方法で実現できます。

(1) on_change メソッドをadvance taken from company&に記述できるTotal expenseため、これら 2 つのフィールドに変更があった場合に、金額を計算し、due amountフィールドに対して計算した値を返すことができます。

ここに例があります、

<field name="x_adv" on_change="onchange_amount(x_adv,total_expense)"/>
<field name="total_expense" on_change="onchange_amount(x_adv,total_expense)"/>
<field name="due_amount"/>

.py ファイルで onchange_amount 関数に書き込むと、この関数はx_adv&に変更があったときに呼び出されtotal_expenseます。

def onchange_amount(self, cr, uid, ids, x_adv, total_amount, context={}):
    // Your calculation
    value = {'due_amount': calculate_value}
    return {'value': value}

これは問題なく動作しますが、結果のフィールド (ここでは due_amount) が読み取り専用の場合、クライアントやデータベースにも表示されない場合、少し問題が発生します。したがって、問題を特定する 2 番目の方法があります。

(2) due_mount をフィールド関数にする。

def _calculate_due_amount(self, cr, uid, ids, field_name, arg, context=None):
    res = {}
    if context is None:
        context = {}
    for current_ids in self.browse(cr, uid, ids, context=context)[0]
        // Your calculation
        res[current_ids] = calculated_amount
    return res



'due_amount': fields.function(_calculate_due_amount, string='Due Amount', help="Due amount of employee.",
                              store={
                                     'your_object': (lambda self, cr, uid, ids, c={}: ids, ['x_adv', 'total_expense'], 10)
                                    }),

これは、問題を解決するための最適な方法の 1 つです。関数フィールドによって、データベースに値を保存でき、フィールドを読み取り専用にすることもできます。これがうまくいくことを願っています。

于 2013-05-09T05:18:07.387 に答える