Бухгалтерский отчет Odoo, возвращающий ошибку IndexError: индекс списка вне диапазона

#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 в строке добавления исправило это. Мне это даже не понадобилось.