Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组
    1. 主页
    2. d_yang
    3. 帖子

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    D
    • 资料
    • 关注 0
    • 粉丝 0
    • 主题 14
    • 帖子 64
    • 最佳 0
    • 有争议的 0
    • 群组 0

    d_yang 发布的帖子

    • RE: Oe7.0在windows 上安装,经常会停掉服务!是什么问题?

      我也有一个windows平台下的(apache+mod_python),供大家参考吧。

      # -*- coding: utf-8 -*-<br /><br />import os, sys, time<br />from datetime import datetime<br />import requests, logging<br /><br />logging.captureWarnings(True)<br /><br />def _go():<br />&nbsp; &nbsp; os.system(&quot;sc stop Apache2.4&quot;)<br />&nbsp; &nbsp; os.system(&quot;sc start Apache2.4&quot;)<br />&nbsp; &nbsp; time.sleep(5)<br />&nbsp; &nbsp; print &#039;start Apache2 at %s&#039; % datetime.now()<br /><br />print &#039;Apache2 monitor started...&#039;<br /><br />while True:<br />&nbsp; &nbsp; time.sleep(30)<br />&nbsp; &nbsp; try:<br />&nbsp; &nbsp; &nbsp; &nbsp; print &#039;pinging web server at %s.&#039; % datetime.now()<br />&nbsp; &nbsp; &nbsp; &nbsp; r = requests.get(&#039;https://xxxxxxxxxxx&#039;, verify=False, timeout=5) #place a real url here.<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; if r.status_code != requests.codes.ok:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &#039;server is dead at %s. restart it.&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _go()<br />&nbsp; &nbsp; &nbsp; &nbsp; else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &#039;Nothing new. Go on.&#039;<br />&nbsp; &nbsp; except Exception, e:<br />&nbsp; &nbsp; &nbsp; &nbsp; print &#039;Exception at %s, message is %s&#039; % ( datetime.now(), e.message)<br />&nbsp; &nbsp; &nbsp; &nbsp; print &#039;try to start Apache2.&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; _go()<br /><br />print &#039;Apache2 monitor ended...&#039;
      
      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 源代码安装的OE7.0为什么打印不了pdf报表?

      把werkzeug降低版本,到0.9.6试试

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 【分享】excel表格上传处理与生成下载

      上传的excel文件在内存里就能打开操作。

      <br /><br />for wiz in self.browse(cr,uid,ids):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not wiz.excel: continue<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excel = xlrd.open_workbook(file_contents=base64.decodestring(wiz.excel))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sh = excel.sheet_by_index(0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for rx in range(sh.nrows):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print &#039;processing line &#039;, rx<br />...<br /><br />
      



      如果想生成excel文件并下载(参考下载翻译那个wizard一样,两个state: choose, get, 然后利用binary field,提供给用户下载的连接出来):

      <br /><br />#.....从数据库取数据,计算,blahblah<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; book = xlwt.Workbook(encoding=&#039;utf-8&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; sheet = book.add_sheet(u&#039;统计&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; buf=cStringIO.StringIO()<br />&nbsp; &nbsp; &nbsp; &nbsp; book.save(buf)<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; out=base64.encodestring(buf.getvalue())<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; self.write(cr, uid, ids, {&#039;state&#039;:&#039;get&#039;, &#039;data&#039;:out, &#039;name&#039;:this.name }, context=context)<br /><br /><br />
      
      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: [分享]view xml 中的 button 调用web客户端事件

      我是在wizard执行的最后一步来执行client action的。
      client action return false, wizard不会关闭的。

      可以

      <br /> return {&#039;type&#039;: &#039;ir.actions.act_window_close&#039;};<br />
      


      problem solved.

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: OE界面增删改SQLSERVER数据库数据

      可以的。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: [bug] Editable List脚本异常

      [quote author=ccdos link=topic=14559.msg25138#msg25138 date=1383902560]
      不明觉历
      [/quote]

      😮

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • [bug] Editable List脚本异常

      浏览器: 版本 30.0.1599.101 m / IE 11.0.9600
      OE版本:runbot里7.0最新版 (http://runbot.openerp.com/),但应该存在于所有7.0以后的版本。

      用户 admin
      密码 admin
      [hr]

      重现条件:
      (任何一个含有inline editing单据都会包含)
      模块 Accounting
      编辑 Customer Invoices 下任何一个draft状态的单据。

      1. 添加一个Invoice Line.
      2. 在必填项中填入任意有效内容。
      3. 将鼠标移动至最后一个可输入的输入框。
      4. 按 Tab。

      异常出现。

      <br />Uncaught TypeError: Cannot read property &#039;id&#039; of null<br / [检测到链接无效,已移除] br />
      



      [s]初步分析和Chrome的版本有关。(调试了一下,和cancel_edition方法有关,可能是浏览器事件机制的问题)
      尚未想到解决办法。[/s]

      修复:

      <br />=== modified file &#039;addons/web/static/src/js/view_form.js&#039;<br />--- addons/web/static/src/js/view_form.js	2013-10-10 09:11:25 +0000<br />+++ addons/web/static/src/js/view_form.js	2013-10-30 03:37:56 +0000<br />@@ -3826,7 +3826,6 @@<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  GroupsType: instance.web.form.One2ManyGroups,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ListType: instance.web.form.One2ManyList<br />&nbsp; &nbsp; &nbsp; &nbsp;  }));<br />-&nbsp; &nbsp; &nbsp; &nbsp; this.on(&#039;edit:before&#039;, this, this.proxy(&#039;_before_edit&#039;));<br />&nbsp; &nbsp; &nbsp; &nbsp;  this.on(&#039;edit:after&#039;, this, this.proxy(&#039;_after_edit&#039;));<br />&nbsp; &nbsp; &nbsp; &nbsp;  this.on(&#039;save:before cancel:before&#039;, this, this.proxy(&#039;_before_unedit&#039;));<br /> <br />@@ -3947,11 +3946,11 @@<br />&nbsp; &nbsp; &nbsp; &nbsp;  });<br />&nbsp; &nbsp;  },<br /> <br />-&nbsp; &nbsp; _before_edit: function () {<br />+&nbsp; &nbsp; _after_edit: function () {<br />+&nbsp; &nbsp; &nbsp; &nbsp; // fixbug [检测到链接无效,已移除] move the blurred listener in edit:after<br />&nbsp; &nbsp; &nbsp; &nbsp;  this.__ignore_blur = false;<br />&nbsp; &nbsp; &nbsp; &nbsp;  this.editor.form.on(&#039;blurred&#039;, this, this._on_form_blur);<br />-&nbsp; &nbsp; },<br />-&nbsp; &nbsp; _after_edit: function () {<br />+&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp;  // The form&#039;s blur thing may be jiggered during the edition setup,<br />&nbsp; &nbsp; &nbsp; &nbsp;  // potentially leading to the o2m instasaving the row. Cancel any<br />&nbsp; &nbsp; &nbsp; &nbsp;  // blurring triggered the edition startup here<br /><br />
      



      via https://launchpadlibrarian.net/155367789/openerp-web_bug1182101_one2many_list_cancel_issue.patch

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 根据下拉框选项,显示不同的form 在同一个页面上

      多不同的form?

      发布在 Odoo 新手求助
      D
      d_yang
    • RE: 如何在 search view 指定默认 filter

      magic code.

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: (解决)导入!导入!导入!导入产品数据的过程已经要把我逼疯了!!

      我是看出不做技术的人玩不转OE。

      发布在 Odoo 新手求助
      D
      d_yang
    • Sublime Text 2/3 中可以使用的OpenERP Code Snippet.

      作用:
      写代码省事。

      用于:
      Sublime Text 2/3

      原地址:<br / [检测到链接无效,已移除] br />

      下载:
      [attach=1]

      安装位置:
      [你sublime text 的安装根目录]\Data\Installed Packages<br />
      使用:
      Ctrl+Shift+P调出Command窗口,进击。
      [attach=2]

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: JS的调试问题

      激活开发者模式,可以调试。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 请问如何在openerp中嵌入飞信或者微信功能?

      飞信不了解。
      微信是这样的。你需要一个公众账号。
      提供你自己的url
      (文档:http://mp.weixin.qq.com/wiki/index.php?title=首页)

      有个缺点是,这个接口是应答式的,微信调用你的时候,你才能返回消息。不能主动push消息。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 关于在OpenERP模块中,form表单button显示控制

      赞。
      我居然没想到要去修改。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 基于Lodop的报表打印模块

      [quote author=mrshelly link=topic=7397.msg16915#msg16915 date=1373239851]
      ActiveX 代码不开源的哦?
      会不会存在一些安全漏洞?
      我看API有一些关于硬件操作的东西...
      [/quote]

      未知。
      这个控件用两年了,本想自己写一个,但是这个确实很方便。
      如果不是为了进行硬件操作,activex就省了。 😉

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 基于Lodop的报表打印模块

      [quote author=ccdos link=topic=7397.msg16901#msg16901 date=1373109017]
      又见大作
      [/quote]

      不敢,自己方便,也希望与人方便。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 基于Lodop的报表打印模块

      [quote author=Joshua link=topic=7397.msg16902#msg16902 date=1373109235]
      mako模板能重复表头么?
      [/quote]

      lodop里,addprinttable方法可以把table里面 <theader>标签转为你说的,表头,tfoot标签转换为页脚。
      tbody里,就是明细部分了,自动根据页面高度分页。

      另外lodop还支持一些标签,比如,总页数,当前页数,数字大写转换,统计,等。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 基于Lodop的报表打印模块

      [quote author=dquo link=topic=7397.msg16900#msg16900 date=1373108877]
      ActiveX只支持windows,所以本控件不适用linux,mac osx.
      是不是指客户端只能在WINDOWS上,还是服务器必须在WINDOWS上?
      [/quote]
      sorry, 没说清楚。
      客户端不支持非Windows.

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • RE: 基于Lodop的报表打印模块

      重复表头是?

      是由lodop完成的。页眉页脚。

      发布在 Odoo 开发与实施交流
      D
      d_yang
    • 基于Lodop的报表打印模块

      前段时间写了个小模块,来解决OE中报表打印不方便的问题。
      借鉴了 @buke 兄的 openerp-web-pdf-preview-print 模块的部分代码。

      介绍:
      Lodop是一款优秀的国产打印控件(activeX): [检测到链接无效,已移除]
      ActiveX只支持windows,所以本控件不适用linux,mac osx.

      模块使用mako标签,html的模版。

      我只贴代码,不加附件,这样各位会体会更深。

      模块结构:
      [attach=1]


      openerp.py

      <br />{<br />&nbsp; &nbsp; &quot;name&quot;: &quot;Lodop控件报表&quot;,<br />&nbsp; &nbsp; &quot;category&quot;: &quot;web&quot;,<br />&nbsp; &nbsp; &quot;description&quot;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; Lodop控件模块, 针对于报表。<br />&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;,<br />&nbsp; &nbsp; &quot;version&quot;: &quot;6.0.5.6&quot;,<br />&nbsp; &nbsp; &quot;depends&quot;: &#91;],<br />&nbsp; &nbsp; &quot;js&quot;: [&quot;static/lib/Lodop6.145/*.js&quot;, &quot;static/js/*.js&quot;],<br />&nbsp; &nbsp; &#039;active&#039;:True,<br />&nbsp; &nbsp; &#039;installable&#039;: True,<br />&nbsp; &nbsp; &#039;active&#039;: False,<br />&nbsp; &nbsp; &#039;application&#039;:False,<br />}<br /><br />
      




      服务端的controller(没啥一样的,继续借鉴@buke):

      <br /># -*- coding: utf-8 -*-<br /><br /><br />import openerp.addons.web.http as openerpweb<br />from openerp.addons.web.controllers.main import View<br /><br />import urllib2<br />import simplejson<br />import base64<br />import time<br />import zlib<br />import cPickle<br />import hashlib<br /><br /><br />class LodopReport(View):<br />&nbsp; &nbsp; _cp_path = &quot;/web/lodop/report&quot;<br />&nbsp; &nbsp; POLLING_DELAY = 0.25<br /><br />&nbsp; &nbsp; @openerpweb.jsonrequest<br />&nbsp; &nbsp; def index(self, req, action):<br />&nbsp; &nbsp; &nbsp; &nbsp; action = simplejson.loads(action)<br />&nbsp; &nbsp; &nbsp; &nbsp; report_srv = req.session.proxy(&quot;report&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; context = dict(req.context)<br />&nbsp; &nbsp; &nbsp; &nbsp; context.update(action[&quot;context&quot;])<br />&nbsp; &nbsp; &nbsp; &nbsp; report_data = {}<br />&nbsp; &nbsp; &nbsp; &nbsp; report_ids = context[&quot;active_ids&quot;]<br />&nbsp; &nbsp; &nbsp; &nbsp; if &#039;report_type&#039; in action:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_data&#91;&#039;report_type&#039;] = action&#91;&#039;report_type&#039;]<br />&nbsp; &nbsp; &nbsp; &nbsp; if &#039;datas&#039; in action:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if &#039;ids&#039; in action&#91;&#039;datas&#039;]:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_ids = action&#91;&#039;datas&#039;].pop(&#039;ids&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_data.update(action&#91;&#039;datas&#039;])<br />&nbsp; &nbsp; &nbsp; &nbsp; report_id = report_srv.report(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; req.session._db, req.session._uid, req.session._password,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action[&quot;report_name&quot;], report_ids,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_data, context)<br />&nbsp; &nbsp; &nbsp; &nbsp; report_struct = None<br />&nbsp; &nbsp; &nbsp; &nbsp; while True:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_struct = report_srv.report_get(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; req.session._db, req.session._uid, req.session._password, report_id)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if report_struct[&quot;state&quot;]:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time.sleep(self.POLLING_DELAY)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; report = base64.b64decode(report_struct&#91;&#039;result&#039;])<br />&nbsp; &nbsp; &nbsp; &nbsp; return dict(report = report)<br /><br />
      




      主要部分是js部分:

      <br /><br />openerp.fg_lodop = function(instance) {<br /><br />&nbsp; &nbsp; instance.web.ActionManager = instance.web.ActionManager.extend({<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; init: function (parent, action) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this._super(parent);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //activex的标签放在页面里。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var obj_string = &#039;&lt;object style=&quot;width:0px;height:0px;&quot; id=&quot;LODOP_OB&quot; classid=&quot;clsid:2105C259-1E0C-4534-8141-A753534CB4CA&quot; width=0 height=0&gt;&lt;embed id=&quot;LODOP_EM&quot; type=&quot;application/x-print-lodop&quot; width=0 height=0 pluginspage=&quot;/fg_lodop/static/lib/lodop6.145/install_lodop32.exe&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&#039;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(obj_string).appendTo(&quot;body&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; },<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; ir_actions_report_xml: function(action, options) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var self = this;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance.web.blockUI();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return instance.web.pyeval.eval_domains_and_contexts({<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contexts: [action.context],<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; domains: &#91;]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).then(function(res) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action = _.clone(action);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action.context = res.context;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var os = navigator.platform || &quot;Unknown OS&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; linux = os.indexOf(&quot;Linux&quot;) &gt; -1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mac = os.indexOf(&quot;Mac&quot;) &gt; -1;<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.rpc(&quot;/web/lodop/report&quot;, {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action: JSON.stringify(action)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).done(function(result) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(result.error){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance.web.unblockUI();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.dialog_stop();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance.web.unblockUI();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.dialog_stop();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(linux || mac) { <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //不支持linux, mac, 这点没考虑过。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_window=window.open(&#039;&#039;,&#039;&#039;,&#039;width=600,height=500&#039;);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_window.document.write(result.report);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_window.focus();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //do magic.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 等会解释这个由来。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format_obj = action.attachment.split(&#039;,&#039;);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP=getLodop(document.getElementById(&#039;LODOP&#039;),document.getElementById(&#039;LODOP_EM&#039;));&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP.SET_LICENSES(&quot;&quot;,&quot;xxxxxx&quot;,&quot;&quot;,&quot;&quot;);&nbsp; //不设置授权码照样可以打印。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP.PRINT_INIT(&quot;FG ERP Order&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP.SET_PRINT_PAGESIZE(1, 2300, 1390, &#039;fg_lodop_print_job&#039;); //公司用的各种单据的打印纸都是统一规格,所以写死了。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var tables = $.parseHTML(result.report);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.each( tables, function( i, el ) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(el.nodeName == &quot;TABLE&quot;){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP.ADD_PRINT_TABLE(format_obj[0],format_obj[1],format_obj[2], format_obj[3], el.outerHTML);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP.NEWPAGE();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LODOP.PREVIEW();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br />&nbsp; &nbsp; &nbsp; &nbsp; },<br />&nbsp; &nbsp; });<br /><br /><br />};<br /><br /><br /><br />
      




      安装后,本模块将会替代系统默认的报表动作。

      使用方法:

      <br /><br />&lt;report auto=&quot;False&quot; id=&quot;report_fg_sale_cust_order_html&quot; model=&quot;fg_sale.cust.order&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name=&quot;fg_sale.cust.order.html&quot; rml=&quot;fg_sale/report/cust_order.html&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string=&quot;定制单&quot; report_type=&quot;mako2html&quot; attachment=&quot;0mm,0mm,220mm,98mm&quot;/&gt;<br /><br />
      



      因为需要确定打印的范围,所以借用了attachment这个属性----实在是不想修改系统的rng文件了。
      * 这就是刚才代码 “format_obj = action.attachment.split(',');” 这一行的原因。


      mako的html模版大概是这样的:


      <br /># -*- coding: utf-8 -*-<br />&nbsp; &nbsp; 		% for o in objects:<br />&nbsp; &nbsp; 		&nbsp; &nbsp; % if o.state == &#039;review&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;table border=&quot;0&quot; cellspacing=&quot;2&quot; cellpadding=&quot;2&quot; bordercolor=&quot;#000000&quot; style=&quot;font-size:14px;width:850px;&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;thead&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;8&quot; align=&quot;center&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span style=&quot;font-size:18px;font-weight:bold;&quot;&gt;定制清单&nbsp; &lt;/span&gt; ${ o.name }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;1&quot;&nbsp; height=&quot;18&quot;&gt;客户名称: <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ${ o.partner_id.name }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&nbsp; height=&quot;18&quot;&gt;要求到货日期: ${ o.date_arrival_req or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;4&quot; height=&quot;18&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 交货日期: ${ o.date_delivery or &#039;&#039; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % if o.contact or o.phone or o.delivery_addr:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;1&quot;&gt;联系人: ${ o.contact or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&gt;联系电话: ${ o.phone or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&gt;交货地址: ${ o.delivery_addr or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % endif<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;1&quot;&gt;已付金额: ${ o.amount_paid or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&gt;付款方式: ${ o.amount_paid_method or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&gt;发票: <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % if o.invoice_type == &#039;common&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 普通发票<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % elif o.invoice_type == &#039;va&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 增值发票<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 暂不开票<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % endif<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;1&quot;&gt;定制版面:&nbsp; ${ o.client }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&gt;运费承担方: ${ o.delivery_fee or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;3&quot;&gt;送货方式: ${ o.delivery_method or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr height=&quot;18&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 	&nbsp; &nbsp;  &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;品名&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 	&nbsp; &nbsp;  &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;数量(只)&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;开票价&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;版费&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;已发货&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;小计&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; align=&quot;center&quot;&gt;附注&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/thead&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tbody&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % for line in o.order_line:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; &gt;${ line.product_id.name }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td width=&quot;10%&quot; height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot;&gt;${ line.product_uom_qty }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td width=&quot;10%&quot; height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; &gt;${ line.unit_price }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td width=&quot;10%&quot; height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot;&gt;${ line.cust_price }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td width=&quot;10%&quot; height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot;&gt;${ line.delivered and &#039;是&#039; or &#039;否&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td width=&quot;10%&quot; height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot;&gt;${ line.subtotal_amount }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td width=&quot;20%&quot; height=&quot;18&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot;&gt;${ line.note or &#039;&#039; }&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % endfor<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tbody&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tfoot&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;1&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;text-align:right;&quot; tdata=&quot;allSum&quot; format=&quot;#,##0.00&quot; tindex=&quot;6&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 共计: #<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;4&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; tdata=&quot;allSum&quot; format=&quot;UpperMoney&quot; tindex=&quot;6&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;2&quot; style=&quot;BORDER-COLLAPSE: collapse; BORDER:groove 1px;&quot; tdata=&quot;subSum&quot; format=&quot;#,##0.00&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 本页小计: #<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;2&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 开单人: ${ o&#91;&#039;user_id&#039;]&#91;&#039;name&#039;] } &amp;nbsp;&amp;nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 开单日期:${ o.date_order } <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;4&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 业务部确认: ${ o&#91;&#039;confirmer_id&#039;]&#91;&#039;name&#039;] }&amp;nbsp;&amp;nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 业务经办人:${ o.employee_id.name }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td colspan=&quot;1&quot; style=&quot;font-size:14px;height:18px;text-align:right;&quot;&gt;第&lt;span tdata=&quot;pageNO&quot; format=&quot;#&quot;&gt;#&lt;/span&gt;页-共&lt;span tdata=&quot;pageCount&quot; format=&quot;#&quot;&gt;#&lt;/span&gt;页&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tfoot&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; % endif<br />&nbsp; &nbsp; &nbsp; % endfor<br />
      




      注意:
      1. 模版只包含table标签,支持多table(多单打印)。
      2. lodop的使用方法请参看其文档。


      大功告成。

      献丑了。如需改进,有问题请 @杨振宇_



      发布在 Odoo 开发与实施交流
      D
      d_yang