Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openerp 如何配置RML中的分页符列数?_Openerp_Page Break_Rml - Fatal编程技术网

Openerp 如何配置RML中的分页符列数?

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

我想知道如何通过列数而不是行数来配置分页符。 例如,我想在每一页5列。 我怎么能意识到这一点

 <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)
。我看不出原因…尝试在下一次调用此方法时使用相同的方法-对于矩阵行…并且不要将部分问题作为答案-网站管理员对此不会满意:)