Я хочу сделать отчет, показывающий бухгалтерскую книгу, для этого я создал transientmodel и abstractmodel , но я не могу заставить его работать, так как я получаю следующую ошибку:
Файл "/mnt/c/odoo/odoo/models.py", строка 4727, в sure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Ожидаемый синглтон: project_rc.account (1, 2)
Идея системы состоит в том, чтобы показать мне дебет и кредит, которым владеет каждый. Я сделал следующий код, чтобы он работал, но он не работает, как я уже говорил.
py wizard
класс Book (models.TransientModel):
_name='proyecto_rc.libro'
fecha_inicio = fields.Date(string="Fecha inicio", required=True)
fecha_termino = fields.Date(string="Fecha termino", required=True)
cuenta_id = fields.Many2one(comodel_name='proyecto_rc.cuenta', string='Cuenta')
@api.multi
def action_report(self):
"""Metodo que llama la lógica que genera el reporte"""
datas={'ids': self.env.context.get('active_ids', [])}
res = self.read(['fecha_inicio', 'fecha_termino'])
res = res and res[0] or {}
datas['form'] = res
domain=[]
if self.fecha_inicio:
domain=[('create_date','<',self.fecha_inicio)]
fields=['titulo','total_cuenta_debe','total_cuenta_haber']
lmayor_data = self.env['proyecto_rc.cuenta'].search_read(domain,fields)
datas['lmayor_data'] = lmayor_data
return self.env['report'].get_action([], 'proyecto_rc.report_libromayor', data=datas)
py отчет:
класс report_libromayor (модели .AbstractModel):
_name = 'report.proyecto_rc.libromayor'
@api.model
def render_html(self, docids, data=None):
data = data if data is not None else {}
libromayor = self.env['proyecto_rc.cuenta'].browse(data.get('ids', data.get('active_ids')))
docargs = {
'doc_ids': data.get('ids', data.get('active_ids')),
'doc_model': 'proyecto_rc.cuenta',
'docs': libromayor,
'data': dict(
data
),
}
return self.env['report'].render('proyecto_rc.libromayor_template', docargs)
Ошибка не появляется в тебе cГіdigo, в какой-то funciГіn ты перемещаешь его счет id 1, 2, когда только deberГ-схвати его перемещения одной, этого он идет ensure_one, это raise, который старается избегать того, чтобы он проскользнул мимо mГЎs рекордов.
, Так как estГЎs отлаживая, он анализирует и находит, где тебя отпускает raise и помещает ее funciГіn в for, для того, чтобы он это пробежал и делал ее funciГіn один за другим.