Openerp 如何配置RML中的分页符列数?
我想知道如何通过列数而不是行数来配置分页符。 例如,我想在每一页5列。 我怎么能意识到这一点Openerp 如何配置RML中的分页符列数?,openerp,page-break,rml,Openerp,Page Break,Rml,我想知道如何通过列数而不是行数来配置分页符。 例如,我想在每一页5列。 我怎么能意识到这一点 <blockTable colwidths="150,100,100,100,100,100" style="Table1"> <tr> <td> <para style="P8">NOM EMPLOYÉ</para> </td> <td> <para style="P
<blockTable colwidths="150,100,100,100,100,100" style="Table1">
<tr>
<td>
<para style="P8">NOM EMPLOYÉ</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end), 'o', 'td') ]]</para>
<para style="P7">[[ o['name'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">Matricule</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end), 'p', 'td') ]]</para>
<para style="P7">[[ p['matricule'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">HEURES SUPPLEÉMENTAIRES 100%</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end), 'a', 'td') ]]</para>
<para style="P7">[[ a['hours_overtime_100'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">ABSENCE</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end), 'b', 'td') ]]</para>
<para style="P7">[[ b['seetek_absence_day'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">TOTAL BRUT</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end), 'c', 'td') ]]</para>
<para style="P7">[[ c['total_brut'] ]]</para>
</td>
</tr>
</blockTable>
姓名
[[repeatIn(获取员工行(例如,公司id,例如,日期开始,例如,日期结束),'o','td')]
[[o['name']]
矩阵
[[repeatIn(获取员工行(例如,公司id,例如,日期开始,例如,日期结束),'p','td')]
[[p['矩阵']]
高级补充教育100%
[[repeatIn(获取员工行(例如,公司id,例如,日期开始,例如,日期结束),'a','td')]
[[a['hours\u加班费\u 100']]
缺席
[[repeatIn(获取员工行(例如,公司id,例如,日期开始,例如,日期结束),'b','td')]
[[b['seetek_缺勤日]]
完全野蛮
[[repeatIn(获取员工行(例如,公司id,例如,日期开始,例如,日期结束),'c','td')]
[[c['total_brut']]
为什么不试试这样的方法:
<section>
<para>
[[ repeatIn(get_employee_slices(example.company_id,
example.date_start,
example.date_end,
5),
"slice") ]]
</para>
<blockTable colwidths="150,100,100,100,100,100" style="Table1">
<tr>
<td>
<para style="P8">NOM EMPLOYÉ</para>
</td>
<td>
<para style="P7">
[[ repeatIn(get_employee_lines(example.company_id,
example.date_start,
example.date_end,
slice, 5),
'o', 'td') ]]
</para>
<para style="P7">[[ o['name'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">Matricule</para>
</td>
<td>
<para style="P7">
[[ repeatIn(get_employee_lines(example.company_id,
example.date_start,
example.date_end,
slice, 5),
'o', 'td') ]]
</para>
<para style="P7">[[ o['matricule'] ]]</para>
</td>
</tr>
<!-- .... -->
</blockTable>
</section>
def get_employee_lines(self, company, date_start, date_end,
columns, context=None):
payslip_pool = self.pool.get('hr.payslip')
payslip_ids = payslip_pool.search(self.cr, self.uid,
[('date', '>=', date_start),
('date', '<=', date_end),
('company_id', '=', company.id)])
records = payslip_line.read(self.cr, self.uid, payslip_ids,
['id', 'employee_id',
'seetek_worked_day',
'hours_overtime_100',
'seetek_absence_day',
'total_brut',
'retenue_source',
'net_payer'],
context=context)
rows_count = int(len(records) / columns) + \
(len(records) % columns > 0 and 1 or 0)
result = [list()] * rows_count
for i in xrange(rows_count):
for j in xrange(columns):
if len(records) <= 0:
break
result[i].append(records.pop())
return result
这是我的密码:
def get_employee_slices(self, company_id, date_start, date_end, var, context=None):
res_list=[]
i = 0
obj2 = company_id.id
payslip_line = self.pool.get('hr.payslip')
obj_ids = payslip_line.search(self.cr, self.uid, [('date_from', '=', date_start), ('date_to', '=', date_end), ('company_id', '=', obj2)])
for res in payslip_line.read(self.cr, self.uid, obj_ids, ['id', 'employee_id','seetek_worked_day','hours_overtime_100','seetek_absence_day','total_brut','retenue_source','net_payer'], context=False):
print res['employee_id'][1]
obj = {}
obj['name'] = res['employee_id'][1]
res_list.append(obj)
taille = len (res_list)
while i < taille:
print i
i = i +1
return i
def get_employee_切片(self、company_id、date_start、date_end、var、context=None):
res_list=[]
i=0
obj2=公司id.id
工资条=self.pool.get('hr.payslip')
obj_id=payslip_line.search(self.cr,self.uid,[('date_from','=',date_start),('date_to','=',date_end),('company_id','=','obj2)])
对于工资单行中的res,请阅读(self.cr、self.uid、obj_id、['id'、'employee_id'、'seetek_worked_day'、'hours_加班100'、'seetek_缺勤日'、'total_brut'、'retenue_source'、'net_payer'、context=False):
打印资源['employee_id'][1]
obj={}
obj['name']=res['employee_id'][1]
资源列表追加(obj)
taille=len(资源列表)
而我认为:
打印i
i=i+1
返回i
和RML:
<section>
<para>
[[ repeatIn(get_employee_slices(example.company_id,
example.date_start,
example.date_end,
5),
'slice') ]]
</para>
<blockTable colwidths="150,100,100,100,100,100" style="Table1">
<tr>
<td>
<para style="P8">NOM EMPLOYÉ</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end, slice, 5), 'o', 'td') ]]</para>
<para style="P7">[[ o['name'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">Matricule</para>
</td>
<td>
<para style="P7">[[ repeatIn(get_employee_lines(example.company_id,example.date_start,example.date_end), 'p', 'td') ]]</para>
<para style="P7">[[ p['matricule'] ]]</para>
</td>
</tr>
[[repeatIn(获取员工切片)(例如.company\u id,
例如:开始日期,
例如:日期(完),
5),
“切片”)]]
姓名
[[repeatIn(获取员工行(例如。公司id,例如。日期开始,例如。日期结束,切片,5),'o','td')]
[[o['name']]
矩阵
[[repeatIn(获取员工行(例如,公司id,例如,日期开始,例如,日期结束),'p','td')]
[[p['矩阵']]
当然,还有更好的解决方案。您可以修改现有的get\u employee\u行
,以这样的方式返回一个二维数组,每行中都包含所需数量的值,而不是先调用一个方法,然后再调用N次另一个方法返回部分员工
您修改的方法应该如下所示:
<section>
<para>
[[ repeatIn(get_employee_slices(example.company_id,
example.date_start,
example.date_end,
5),
"slice") ]]
</para>
<blockTable colwidths="150,100,100,100,100,100" style="Table1">
<tr>
<td>
<para style="P8">NOM EMPLOYÉ</para>
</td>
<td>
<para style="P7">
[[ repeatIn(get_employee_lines(example.company_id,
example.date_start,
example.date_end,
slice, 5),
'o', 'td') ]]
</para>
<para style="P7">[[ o['name'] ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P8">Matricule</para>
</td>
<td>
<para style="P7">
[[ repeatIn(get_employee_lines(example.company_id,
example.date_start,
example.date_end,
slice, 5),
'o', 'td') ]]
</para>
<para style="P7">[[ o['matricule'] ]]</para>
</td>
</tr>
<!-- .... -->
</blockTable>
</section>
def get_employee_lines(self, company, date_start, date_end,
columns, context=None):
payslip_pool = self.pool.get('hr.payslip')
payslip_ids = payslip_pool.search(self.cr, self.uid,
[('date', '>=', date_start),
('date', '<=', date_end),
('company_id', '=', company.id)])
records = payslip_line.read(self.cr, self.uid, payslip_ids,
['id', 'employee_id',
'seetek_worked_day',
'hours_overtime_100',
'seetek_absence_day',
'total_brut',
'retenue_source',
'net_payer'],
context=context)
rows_count = int(len(records) / columns) + \
(len(records) % columns > 0 and 1 or 0)
result = [list()] * rows_count
for i in xrange(rows_count):
for j in xrange(columns):
if len(records) <= 0:
break
result[i].append(records.pop())
return result
def get_employee_行(自我、公司、开始日期、结束日期、,
列,上下文=无):
工资单\u pool=self.pool.get('hr.payslip')
工资单\u id=payslip\u pool.search(self.cr、self.uid、,
[('date','>=',date_start),
(‘date’,‘我不确定我是否理解你的问题。通常是你定义了在一个页面中放置什么。因此,如果你想要一个有5列的表,只需要放置一个有5列的表。你的意思是你有一个未知数量的列,你想用它们填充连续的页面吗?你能给我们一个更精确的例子吗?我有一个循环,所以数字列的数量将取决于循环的结果。我无法定义为什么我要在每页中定义的列的数量。我将找到五列或X列,使用这种方法,我不会丢失信息,因为它们将在页面之外。那么,你认为@Andrei BoyanovIs对行有什么相同的看法?你有一个动态数字o我想也是f行?在这种情况下,第2页上会有什么?我认为解决方案是根据列数将表划分为多个表。但是如果一页上的行数超过一页上的行数,则很难做到这一点。不,我有15行,但列数不固定。我想要5列每一页,以确保我不会丢失任何内容。我的朋友,这个想法非常清楚。非常感谢,但我不知道如何在报告的代码中创建get_employee_切片。它位于.rml文件附近的某个.py文件中。这是包含get_employee_行()的同一个文件。或者您可能会发现实现此方法的逻辑有困难吗?请告诉我是否存在这种情况。我的朋友,我尝试过此方法,但我得到了一个错误:除了:(u“name'slice'未定义”),(,NameError(“name'slice'未定义”),),)尝试调试为什么它无法识别方法调用get\u employee\u行中的新“slice”变量(例如.company\u id,例如.date\u start,例如.date\u end,slice,5)
。我看不出原因…尝试在下一次调用此方法时使用相同的方法-对于矩阵行…并且不要将部分问题作为答案-网站管理员对此不会满意:)