我有两个对象,'文章'和'mvt',我试图创建的模块背后的逻辑是文章是由名称和价格定义的,但数量是通过一组交易或' mouvements',每个mouvement都有很多2个文章,一个日期和一个qte,最后一个字段可以是正面或负面(正面意味着我们添加了新文章,负面相反),所以这里是我以前的代码这个,我是openErp的新手。
class article(osv.osv):
_name = 'cm.article'
def _get_qte(self, cr, uid, ids, fld_name, arg, context=None):
result = {}
mvtObject=self.pool.get('cm.mvt')
mvtids=mvtObject.search(cr,uid,[])
sum = 0
for id in mvtids:
mvt_line=mvtObject.browse(cr,uid,id,context)
if mvt_line.article.id == ids[0]:
sum = sum + mvt_line.qte
result[sum] = sum
return result
_columns = {
'name': fields.char(size=32, string='Nom', required=True),
'pu':fields.float(required="True",string='Prix Unitaire'),
'qte': fields.function(_get_qte,type='integer',obj="cm.article",method=True,string='Quantity'),
}
article()
class mvt(osv.osv):
_name = 'cm.mvt'
_columns = {
'article' : fields.many2one('cm.article', 'name'),
'date' : fields.datetime(string="Date Mouvement"),
'qte':fields.integer(String="Quantity")
}
_defaults = {'date' : fields.date.context_today}
mvt()
提前谢谢。
答案 0 :(得分:1)
我们做了一些非常相似的事情并且运作得很好。
请注意,在大量事务之后,代码将变慢,因为每次打开表单时都必须重新计算。您必须编写一个“清除”向导,该向导将汇总超过三年的交易。这一切都取决于交易数量和当地立法。
要访问每笔交易的动作,请在文章模型的列中添加以下行:
compile 'io.branch.sdk.android:library:1.14.2'
我还建议你在mvt类中添加一个描述字段:
'art_movements':fields.one2many('cm.history', 'article', 'Movements'),
要查看所有数据,您将使用如下所示的xml:
'name':fields.char('Short movement description'),
我的猜测是问题的原因起源于函数字段,因为两个表之间没有链接。上面的代码应该修复它,但你的函数字段不正确,见下文(你必须验证代码,因为我没有测试它,但原理是正确的。)
<record model="ir.ui.view" id="view_articles_form">
<field name="cm.article">Articles.form</field>
<field name="model">cm.article</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string = "Articles" version="7.0" create="false" edit="false">
<sheet>
<group>
<field name="name" readonly="True"/>
<field name="pu" readonly="True" />
<field name="qty" readonly="True"/>
</group>
<field name="art_movements">
<tree string="History" default_order="date">
<field name="name"/>
<field name="date"/>
<field name="qte"/>
</tree>
</field>
</sheet>
</form>
</field>
</record>
请注意,如果art_movements中没有记录,则会返回零值。