#python #python-3.x #odoo #odoo-12
#python #python-3.x #odoo #odoo-12
Вопрос:
Я разрабатываю пользовательский бухгалтерский отчет на Odoo Enterprise. Я впервые пытаюсь создать такой отчет, поэтому у меня много сомнений, которые я не решил в Интернете.
Основываясь на собственных отчетах, я пришел к этому до сих пор:
class BudgetaryPositionCompanyReport(models.AbstractModel):
_name = "budgetary.position.report"
_inherit = "account.report"
filter_date = {'date_from': '', 'date_to': '', 'filter': 'this_month'}
filter_unfold_all = False
def _get_columns_name(self, options):
return [{'name': _('Budget Item')}, {'name': _('Column1')}, {'name': _('Column2')}, {'name': _('%')}]
@api.model
def _get_lines(self, options, line_id=None):
context = dict(self._context or {})
date_from = context.get('date_from')
date_to = context.get('date_to')
lines = []
sql_parents = """
SELECT abp.name "name", sum(cbl.planned_amount) planned_amount, sum(cbl.r_practical_amount) r_practical_amount, sum(cbl.r_percentage) r_percentage
FROM crossovered_budget_lines cbl
JOIN account_budget_post abp ON (cbl.general_budget_id = abp.id)
GROUP BY abp.id;
"""
self.env.cr.execute(sql_parents)
results_parents = self.env.cr.dictfetchall()
for parent in results_parents:
lines.append({
'id': parent.get('id'),
'name': parent.get('name'),
'level': 1,
'unfoldable': True,
'unfolded': True,
'colspan': 4,
'columns': [
{'name': parent.get('name') and parent.get('name')},
{'name': parent.get('planned_amount') and self.format_value(parent.get('planned_amount'))},
{'name': parent.get('r_practical_amount') and self.format_value(parent.get('r_practical_amount'))},
{'name': parent.get('r_percentage') and self.format_value(parent.get('r_percentage'))}
],
})
print(lines)
return lines
def _get_report_name(self):
return _('Budgetary Positions (per company)')
def _get_templates(self):
templates = super(BudgetaryPositionCompanyReport, self)._get_templates()
return templates
Проблема в том, что когда я пытаюсь получить доступ к этому отчету, я получаю следующее:
Error to render compiling AST
IndexError: list index out of range
Template: account_reports.line_template
Path: /templates/t/t/tr/t[2]/td
Node: <td t-att-class="'o_account_report_line ' (column.get('class', lines.get('columns_header')[-1][column_index line.get('colspan', 1)].get('class', '')) (line.get('unfoldable') and ' o_foldable_total' or '')) ('' if hierarchies_enabled else ' o_account_report_line_indent')" t-att-style="column.get('style', lines.get('columns_header')[-1][column_index line.get('colspan', 1)].get('style', ''))">
<span class="o_account_report_column_value" t-att-title="column.get('title')">
<t t-esc="column.get('name')"/>
</span>
</td>
Я что-то упустил?
Комментарии:
1. Odoo сообщает, что в списке нет данных с индексом номер 2……. Отладка, в которой вы использовали индексацию списка, потому что некоторые из них не получают значения
2. На данный момент запрос возвращает 1 запись. Список тоже возвращает один, я сделал print и получил: [{‘id’: 1, ‘name’: ‘TEST’, ‘level’: 1, ‘unfoldable’: True, ‘unfolded’: True, ‘colspan’: 4, ‘columns’: [{‘name’: ‘TEST’}, {‘name’: ‘CLP 1.900.500’}, {‘name’: 0.0}, {‘name’: 0.0}]}]
3.
column_index line.get('colspan', 1)
Элемент не существует вlines.get('columns_header')[-1]
списке.4. удаление ключа colspan в строке добавления исправило это. Мне это даже не понадобилось.