最近几天,我在Qweb报告中遇到了一些问题分页符。 我正在尝试将我的Qweb报告打印为Check格式,并将单个Qweb页面分为3个不同部分
第1部分:显示发票清单详细信息
第2部分:银行详细信息和我们将支付给MICR FONT 13B FONT的所有者/租户的金额
第3部分:显示发票清单详细信息
第1节和第3节是通用的,在两个节中显示相同的发票明细,关于第2节的内容将根据 我们将支付给所有者/房客的不同金额。
预期结果:
我有23张发票详细信息附在一张支票中,然后我希望将发票详细信息分叉到不同的位置
sloat 1::在首页显示前10个发票详细信息
sloat 2::将接下来的10张发票明细显示到第二页
sloat 3::将剩余3张发票明细显示到第三页
如果发票总数超过10行,我想将发票详细信息分成不同的分页
我已经尝试了什么?
尝试1::使用计数器变量并通过迭代循环来更新计数器,并在10达到除以0时中断该循环 将此代码应用于内部
<t t-set="count" t-value="count+1" />
<t t-if="count%10== 0">
<div style="page-break-after:auto;"/>
</t>
</t>
尝试2:
<span t-esc="line_index+1"/>
<t t-if="line_index+1%10 ==0">
<div style="page-break-inside:auto !important;">
</t>
答案 0 :(得分:0)
我认为您需要提供更多的上下文和信息,也许问题出在您要暴露的问题之外。
您是否尝试过使用自定义的python报告?
class IncrementReports(models.AbstractModel):
_name = 'report.your_model.your_report_name'
@api.model
def render_html(self, docids, data=None):
report_obj = self.env['report']
report = report_obj._get_report_from_name(
'your_model.your_report_name')
docs = []
objects = self.env[report.model].browse(docids)
for o in objects:
docs.append({...})
docargs = {
'doc_ids': docids,
'doc_model': report.model,
'docs': objects,
'custom_docs': docs,
'datetime': datetime.datetime,
}
return report_obj.render('your_model.your_report_name', docargs)
使用自定义报告,您可以创建一个函数来划分3个信息块,将其发送到de docargs内部的不同变量中,然后遍历它们,而无需检查XML报告中的条件。
我不清楚我的英语水平不够好。
答案 1 :(得分:0)
在尝试了更多尝试之后,我也从头解决了该问题。
如果任何人在未来的发展中会遇到相同的问题
这样他们也可以快速修复它。
def get_invoice_details(self, invoice_ids,cheque):
vals,container,result,val=[],[],[],1
invoice_no=''
for line in invoice_ids:
desc=''
if line.is_vendor:
invoice_no=line.vendor_reference
else:
invoice_no=line.number
pay_amt=line.payment_ids.filtered(lambda m: m.cheque_issued_id.id ==cheque.id).amount or 0.00
for l in line.invoice_line_ids:
desc+=str(l.product_id.default_code)+',' or ''
vals.append({
'date':str(line.date_invoice),
'invoice_no':invoice_no,
'inv_amt':str(line.amount_total),
'description':desc,
'pay_amt':float(pay_amt)
})
invoice_no=''
for l in vals:
if val<=len(vals):
container.append(l)
if val % 9 == 0:
result.append({'section':9,'vals':container})
container=[]
val+=1
if container:
result.append({'section':4,'vals':container})
return result
在这种方法中,我将部分键及其值设置为字典列表的结果 我们使用同一部分使页面完美分页
<t t-foreach="o.get_invoice_details(o.invoice_ids,o)" t-as="line" >
<div class="page">
<div class="col-xs-12">
<table style="width:100%">
<thead>
<tr>
<th>Invoice Date</th>
<th>Invoice # </th>
<th>Invoice Amt</th>
<th>Description </th>
<th style="text-align:right">Payment Amt</th>
</tr>
</thead>
<t t-foreach="line.get('vals')" t-as="inv">
<tbody class="sale_tbody">
<tr>
<td>
<span t-esc="inv.get('date')" />
</td>
<td>
<span t-esc="inv.get('invoice_no')" />
</td>
<td>
<span t-esc="o.decimal_formated_amount(float(inv.get('inv_amt',0.00)))" />
</td>
<td>
<span t-esc="inv.get('description')" />
</td>
<td style="text-align:right">
<span t-esc="o.decimal_formated_amount2(float(inv.get('pay_amt',0.00)))" />
</td>
</tr>
</tbody>
</t>
</table>
</div>
<span t-if="line.get('section') % 9 == 0" style="page-break-after: always;">
</span>
</div>
根据get_invoice_details()方法的业务逻辑 它将以列表形式返回数据,然后我们可以使用相同的数据并将其呈现到XML模板中。
当条件满足XML模板时,Odoo将自动管理分页符 系统将根据源代码自动将页面分为两部分
我希望我的回答可能对您有所帮助:)