2

私のsale_order.rmlレポートをカスタマイズするために、まだ血なまぐさいOpenOffice Writerを使用しています。

私の販売注文には、配達までの 6 つの異なるリードタイムを持つ 6 つの注文明細があります。6 つの値の最大値を表示する必要があります。

多くの試みの後、私は reduce 関数の使用を断念しました。私はこのようなものを見たことがありません。

そこで、次のようなループをカプセル化する max を使用してみようと思いました。

[[ max(repeatIn(so.order_line.delay,'d')) ]]

私の最大リード タイムは 20 です。

戻る

{'d': 20.0}

少なくとも、私が求めている値が含まれています。しかし; この結果を操作しようとすると、完全に消えてしまいます。私が試してみました:

int(re.findall(r'[0-9]+', max(repeatIn(so.order_line.delay,'d')))[0])

これは、Python ウィンドウからはうまく機能しますが、OpenERP ではまったく何も返しません。

sale_order.py ファイルから re をインポートし、sale_order.pyo に再コンパイルしました。

    import time
    import re
    from datetime import datetime, timedelta
    from report import report_sxw

    class order(report_sxw.rml_parse):
        def __init__(self, cr, uid, name, context=None):
            super(order, self).__init__(cr, uid, name, context=context)
            self.localcontext.update({
                'time': time,
                'datetime': datetime,
                'timedelta': timedelta,
                're': re,
            })

もちろん、サーバーを何度も再起動しました。私のテスト インストールは Windows 上にあります。

Python からは動作させることができますが、OpenOffice Writer からは動作させることができないため、誰かが私が間違っていることを教えてもらえますか?

ご協力いただきありがとうございます!

編集1:

フォーマット

    {'d': 20.0}

pythonによれば、辞書です。まだ Python では、辞書から整数を抽出するには、次のようにすることができます。

    >>> dict={'d': 20.0}
    >>> print(dict['d'])
    20.0

しかし、どうすればこれを OpenERP ライターに転置できますか???

4

1 に答える 1

0

functools をインポートし、sale_order.py ファイルのパラメーター内で reduce 関数を宣言することで、必要な結果を得ることができました。

次に、reduce 関数と max 関数を組み合わせて使用​​しただけで、期待どおりに機能します。

正しい構文は次のとおりです。

    repeatIn(objects,'o')
    reduce(lambda x, y: max(x, y.delay), o.order_line, 0)

他に必要なものはありません。

楽しみ!

于 2013-04-11T15:05:46.757 に答える