Odoo 中文社区

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

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

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

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

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

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

    T
    • 资料
    • 关注 0
    • 粉丝 0
    • 主题 7
    • 帖子 15
    • 最佳 0
    • 有争议的 0
    • 群组 0

    tomp

    @tomp

    0
    声望
    489
    资料浏览
    15
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    tomp 取消关注 关注

    tomp 发布的最新帖子

    • RE: OpenERP的MRP运算的核心对象--Procurement Order

      校长才是英雄,神龙见首不见尾,真是经典教程!仰慕~

      发布在 Odoo 新手求助
      T
      tomp
    • RE: Openerp压力测试:多线程直连OE Server NET-RPC/XML-RPC端口测试

      沙发~~~辛苦!

      发布在 Odoo 系统测试
      T
      tomp
    • 表单打印详细步骤求助高手!

      如题,感觉不尽!

      发布在 Odoo 开发与实施交流
      T
      tomp
    • 表单打印问题

            表单打印老是出现错误:(<type 'exceptions.KeyError'>, KeyError('report.rpt_after_sale_repair',), <traceback object at 0x02F544E0>)
            附上源文件:
          --ini--.py
         

      # -*- coding: utf-8 -*-<br />import rpt_after_sale_repair
      


         
         
            rpt_after_sale_repair.py
           

      # -*- coding: utf-8 -*-<br /><br /><br />import time<br />from report import report_sxw<br /><br />class rpt_after_sale_repair(report_sxw.rml_parse):<br />&nbsp; &nbsp; def __init__(self, cr, uid, name, context=None):<br />&nbsp; &nbsp; &nbsp; &nbsp; super(rpt_after_sale_repair, self).__init__(cr, uid, name, context=context)<br />&nbsp; &nbsp; &nbsp; &nbsp; self.localcontext.update({<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;time&#039;: time,<br />&nbsp; &nbsp; &nbsp; &nbsp; })<br /><br />report_sxw.report_sxw(&#039;report.rpt_after_sale_repair&#039;, &#039;crm.after.sale.repair&#039;, &#039;addons/crm_after_sale_repair/report/asr.rml&#039;, parser=rpt_after_sale_repair, header=Fales)<br />
      


           

            rpt_after_sale_repair_view.xml

           

      &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;openerp&gt;<br />&nbsp; &nbsp; &lt;data&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;report id=&quot;report_crm_after_sale_repair&quot; header=&quot;False&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; auto=&quot;False&quot; model=&quot;crm.after.sale.repair&quot; name=&quot;rpt_after_sale_repair&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rml=&quot;crm_after_sale_repair/report/asr.rml&quot; string=&quot;打印维修单&quot;/&gt;<br />&nbsp; &nbsp; &lt;/data&gt;<br />&lt;/openerp&gt;
      



            --openerp--.py
           

      &nbsp; &nbsp; &#039;update_xml&#039;: [<br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;report/rpt_after_sale_repair_view.xml&#039;,<br />&nbsp; &nbsp;  ],
      



          求助~~~感谢!

      发布在 Odoo 开发与实施交流
      T
      tomp
    • 导入翻译无响应解决之道

        在导入翻译时一直处于loading状态,在mrshelly的帮助下得到解决:
      导入路径不能含有中文,除非你确认你的操作系统的文件夹是以 UTF-8编码建的.而 windows 系统是用 GBK 编码创建文件夹结构的.

      发布在 Odoo 新手求助
      T
      tomp
    • RE: 如何确定menu或view的id或xml-id

      感谢~~~

      发布在 Odoo 开发与实施交流
      T
      tomp
    • 视图标签页名称动态读取表记录

            想要的效果:标签页动态读取表某列的内容作为标签名
            如:appraisal、internal notes、public notes是某表中的记录,
            显示效果:
      [attach=1]


      表a
      id  名字 上级
      a1  态度
      a2  能力
      a3  绩效
      a11  责任心  a1
      a12  主动性  a1
      a13  协作性  a1
      a14  意识    a1
      a15  自律    a1

      标签页:
        态度    能力    绩效
      [attach=2]

      发布在 Odoo 开发与实施交流
      T
      tomp
    • RE: OpenERP对象定义详解(连载中...)

      感谢各位达人!

      发布在 Odoo 开发与实施交流
      T
      tomp
    • RE: 今天开始OpenERP进销存源码分析活动

      上海-Jeff(85822082)  15:03:51
      partner是base模块里就带着的一个业务对象,基本上每个后续模块都会继承base里的这个partner对象,往上加字段,所以今天我们针对业务功能的源码分析就从这个开始

      打开这个
      [attachimg=1]
      只有base模块的database,partner就是这些字段对应网页上的源文件 130 行其他class都是为它服务的,逐个字段分析res_partner对象就能都涉及到class res_partner(osv.osv): 所有oe的业务对象类都是osv的子类_description='Partner' 这就是在对象列表里显示的名称,每个类都必须有 _name = "res.partner"
      上海-Jeff(85822082)  15:11:12
      _order = "name" ,这里要注意了,partnr列表是按名称排序的,不是我们习惯的按编号
      好像列表的排序只能在列里定义,view里无法确定顺序?

      广东-Joshua(470534800)  15:13:06
      view没试过

      上海-Jeff(85822082)  15:14:23
      _columns = {
      这个也是必需的

      'name': fields.char('Name', size=128, required=True, select=True),

      广东-Joshua(470534800)  15:20:22
      'name': fields.char('Name', size=128, required=True, select=True),
      select=False, 如为True,在数据库表的这个字段上创建一个索引

      上海-Jeff(85822082)  15:21:10
      我也想问一下这个select,真的是用来创建索引的?

      深圳-Seraphim(409166304)  3:17:10 PM
      mrp\mrp_view.xml  474行,加个groups试试

      广东-Joshua(470534800)  15:22:32
      'date': fields.date('Date', select=1),第二条 =1..
      上海-Jeff(85822082)  15:23:21
      是啊,怪就怪在他一会儿是True False,一会儿是1,2

      广东-Joshua(470534800)  15:23:55
      [attachimg=2]
      上海-Jeff(85822082)  15:25:26
      确实建了三个索引
      广东-Joshua(470534800)  15:28:20
      分别是 true 1 2
      重庆-mrshelly(49812643)  15:55:13
      关于 selected 的. 不是 为2就是高级检索吗?  0 不放到检索里. 1 放到 base 检索里. 2 放到advance 检索里.

      上海-Jeff(85822082)  15:55:46
      true呢?

      重庆-mrshelly(49812643)  15:55:49
      true=1
      False = 0

      上海-Jeff(85822082)  15:57:06
      你说的这个好象是view.xml里的select属性
      重庆-mrshelly(49812643)  15:57:09
      字段的这个也是一样的.

      上海-Jeff(85822082)  15:57:26
      我们刚才说的是class里field的select属性
      重庆-mrshelly(49812643)  15:57:28
      是啊. 你view 里没有指定的话. 就是 field 的 select 值啊. 就如同  digits  在字段里指定了.
      上海-Jeff(85822082)  15:57:59

      [attachimg=3]
      广东-Joshua(470534800)  15:58:32
      没有date
      上海-Jeff(85822082)  15:59:16
      没有parent_id哦,parent_id在高级里,=2

      广东-Joshua(470534800)  16:00:36
      'date': fields.date('Date', select=1),
      上海-Jeff(85822082)  16:01:23
      接下来去看看view里是不是去掉了date,加了ref customer contact
                              <field name="name" select="1"/>
                              <field name="ref" select="1"/>
                              <field name="customer" select="1"/>

      上海-Jeff(85822082)  16:02:58
        <field name="date" select="2"/>
      广东-Joshua(470534800)  16:03:41
      [attachimg=4]
      广东-Joshua(470534800)  16:04:03
      [attachimg=5]
      上海-Jeff(85822082)  15:34:59
      'title': fields.selection(_partner_title_get, 'Title', size=32),
      这里用到了动态下拉列表
      为了过滤 partner_title的类型。因为那个title可能是给个人用的也可能是给公司用的,这里下拉列表只显示可供公司用的title

      上海-Jeff(85822082)  15:41:24

              'child_ids': fields.one2many('res.partner', 'parent_id', 'Partner Ref.'),
      既然有父公司,就有子公司,这个字段是给那个公司结构的tree用的

      上海-Jeff(85822082)  15:49:20
              'lang': fields.selection(_lang_get, 'Language', size=5, help="If the selected language is loaded in the system, all documents related to this partner will be printed in this language. If not, it will be english."),
      又一个动态下拉列表,只显示已安装的语言
      发现这种用法那个_lang_get 都是class之外的function啊,不知道另一个class的method行不行?
           
      'user_id': fields.many2one('res.users', 'Dedicated Salesman', help='The internal user that is in charge of communicating with this partner if any.'),

      上海-Jeff(85822082)  15:53:15
      这个是负责这个业务伙伴的用户,叫客户经理?专员?
      上海-Jeff(85822082)  15:53:45
      业务伙伴专员?
      粤-Black Jack(104144648)  15:54:05
      业务员
      四川--Tomp(139776)  15:53:46
      都差不多的
      上海-Jeff(85822082)  15:54:24
      现在的翻译是业务专员,感觉业务员更好些,呵呵

      上海-Jeff(85822082)  16:08:29
      'bank_ids': fields.one2many('res.partner.bank', 'partner_id', 'Banks'),
      这个界面上也没有啊,估计都是给account服务的

      四川--Tomp(139776)  16:08:46
      还不如增加银行账户更加实用

      上海-Jeff(85822082)  16:10:00
      要不要跳到res.partner.bank去看看?
      上海-Jeff(85822082)  16:13:43
      '''Bank Accounts'''
      _description = doc ,玩这个花样干嘛
      _name = "res.partner.bank"
      _rec_name = "acc_number"
      _rec_name
      名称字段的字段名,默认是"name"。这个字段的字段值是类的name_get的返回值。many2one的字段在界面上的文本框里显示的就是这个值。
      这个挺有用的

      重庆-mrshelly(49812643)  16:16:45
      最多的应用 就象 科目 名.

      上海-Jeff(85822082)  16:16:48
      _order = 'sequence'
      不按银行帐号排序却按sequence排序,有趣
      joshua发的那个截屏,哪有sequence

      重庆-mrshelly(49812643)  16:18:16
      然后 把经常要操作的银行记录调到最前面.
      上海-Jeff(85822082)  16:18:38
      按一个不在界面上显示的字段排序,这个有点妖异吧
      重庆-mrshelly(49812643)  16:18:50
      排序应该只针对 tree view
      重庆-mrshelly(49812643)  16:22:07
      change_default 是玩啥的?
      上海-Jeff(85822082)  16:22:21
      让我疑惑的是为什么不弄个address,还搞那些国省市街的干啥
      重庆-mrshelly(49812643)  16:22:57
      我估计这样精确定位后, 可以确定汇率, 以及计算手续费. 
      重庆-mrshelly(49812643)  16:23:29
      然后 匹配 离银行最近的公司.
      重庆-mrshelly(49812643)  16:23:37
      或者离某公司最近的银行.

      上海-Jeff(85822082)  16:23:40
      change_default=False, 该字段可以作为取其他字段的当前用户默认值的条件
      重庆-mrshelly(49812643)  16:24:08
      True  就每次修改都把最后修改当默认值?
      上海-Jeff(85822082)  16:25:05
      你存默认值的时候不止可以存 B field的value,还可以存这个A field作为条件,你要是常用用户默认值就知道了

      重庆-mrshelly(49812643)  16:26:03
      按我的想法. 好象是说,  change_default 就是改变默认值.
      上海-Jeff(85822082)  16:26:13
      你save过默认值么?没事儿试试,有change_default=True和没有change_default=True会是不同的精彩

      重庆-mrshelly(49812643)  16:26:51
      [attachimg=10]
      两个有什么区别?
      上海-Jeff(85822082)  16:27:18
      上面是get,下面是set

      上海-Jeff(85822082)  16:30:21
      我找到了一个例子
      上海-Jeff(85822082)  16:30:14
      [attachimg=6]

      重庆-mrshelly(49812643)  16:30:36
      我打开保存, 还是没有能理解.
      上海-Jeff(85822082)  16:30:59
      这里这个邮编就是 change_default=True

      广东-Joshua(470534800)  16:31:09
      联动

      重庆-mrshelly(49812643)  16:31:31
      那联动条件呢?
      上海-Jeff(85822082)  16:31:51
      change_default=True的字段就是联动条件
      重庆-mrshelly(49812643)  16:32:20
      哦?? 意思是 change_default 可以是 True  False 也可以是一个 domain?
      上海-Jeff(85822082)  16:33:47
      应该只是是boolean吧
      重庆-mrshelly(49812643)  16:34:09
       
      上海-Jeff(85822082)  16:34:14
      就是那个 值有效如果...
      重庆-mrshelly(49812643)  16:34:20
      这个 zip = 313200 在哪里设置的? 
      广东-Joshua(470534800)  16:34:49
      [attachimg=7]
      重庆-mrshelly(49812643)  16:34:57
      难道是 公司定义的 zip?
      广东-Joshua(470534800)  16:35:00
      你填神马就是神马
      上海-Jeff(85822082)  16:35:04
      213200是你在存默认值的时候zip字段的值啊
      重庆-mrshelly(49812643)  16:35:28
        那 change_default 倒底是定义到 zip 上?
      重庆-mrshelly(49812643)  16:35:35
      还是定义在 Function 字段上?

      上海-Jeff(85822082)  16:35:40
      是在zip上的
      重庆-mrshelly(49812643)  16:35:49
      那就是说. 如果一个字段定义了. 
      上海-Jeff(85822082)  16:35:58
      change_default=True就可以给人服务
      重庆-mrshelly(49812643)  16:36:20
      如果 country也定义了 change_default=True
      那么, 在 Function 里设置默认值就会有两个条件/

      上海-Jeff(85822082)  16:36:50
      会有两个check box
      重庆-mrshelly(49812643)  16:36:41
      那么, 在 Function 里设置默认值就会有两个条件/

      上海-Jeff(85822082)  16:36:50
      会有两个check box
      上海-Jeff(85822082)  16:39:18
      我这里出不来两个checkbox
      重庆-mrshelly(49812643)  16:39:35
      那出来哪一个? 还是  zip? 你把 zip 的定义调后一点... 
      上海-Jeff(85822082)  16:39:53
      一个都不出来,估计是bug

      重庆-mrshelly(49812643)  16:39:56
      看看 会不会出来 country. 好多字段都是 change_default
      ==========================================
      重庆-mrshelly(49812643)  16:40:41
        看这个:
      [attachimg=8]
      广东-Joshua(470534800)  16:42:26
      那个联动的我先在好像测试不到他有动,明明记得之前测试时可以的
      重庆-mrshelly(49812643)  16:42:55
      [attachimg=9]
      上海-Jeff(85822082)  16:43:09
      这个用来写文章,当然,大多数时候都是空着的
      重庆-mrshelly(49812643)  16:43:08
      bank 多个 change_default 的确没用.

      ============================================================

      上海-Jeff(85822082)  16:40:05
      下一话题,回到partner:
      'website': fields.char('Website',size=64),
      这个牛B的地方在于它的view做成了一个link

      上海-Jeff(85822082)  16:42:53
      'comment': fields.text('Notes')
      'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts'),
      配角上场,这个复杂了,必须跳到res.partner.address上去了
          _description ='Partner Addresses'
          _name = 'res.partner.address'
          _order = 'id'
          _columns = {

      重庆-mrshelly(49812643)  16:44:52
      就是联系人嘛..
      广东-Joshua(470534800)  16:45:10
      我不明白为什么
              'street': fields.char('Street', size=128),
              'street2': fields.char('Street2', size=128),
      2个地址!

      上海-Jeff(85822082)  16:46:07
      怕128位写不下,再搞个延长的
      重庆-mrshelly(49812643)  16:46:24
      那还不如用 256
      四川--Tomp(139776)  16:46:19
      太长了影响试图


      上海-Jeff(85822082)  16:45:45
              'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', select=True, help="Keep empty for a private address, not related to partner."),

      广东-Joshua(470534800)  16:46:27
      ondelete="setnull", 用于many2one类型的字段 如setnull,one的对象删除后many这边字段值设为空
      上海-Jeff(85822082)  16:46:49
      就是说删了业务伙伴不删地址
      重庆-mrshelly(49812643)  16:46:48
      阔以写  "SetNULL" 不?

      上海-Jeff(85822082)  16:47:30
      前面注意了没有,删除业务伙伴bank也会被删
      广东-Joshua(470534800)  16:47:39
      @shelly ondelete='set null'
      上海-Jeff(85822082)  16:48:02
      同样是many2one,差距可大了,写程序的时候可注意了

      广东-Joshua(470534800)  16:48:39
      'type': fields.selection( [ ('default','Default'),('invoice','Invoice'), ('delivery','Delivery'), ('contact','Contact'), ('other','Other') ],'Address Type', help="Used to select automatically the right address according to the context in sales and purchases documents."),
      上海-Jeff(85822082)  16:49:48
      这里就有意思了,每个公司必须有个default
      上海-Jeff(85822082)  16:50:17
      inv del两个有也行,没有就用default填充
      上海-Jeff(85822082)  16:50:29
      contact只是其中一个类型
      重庆-mrshelly(49812643)  16:50:39
      没有看到必须有 default 呀.
      上海-Jeff(85822082)  16:51:08
      没有的话采购订单和销售订单都取不到地址
      上海-Jeff(85822082)  16:51:52
      我曾经建议一个网商设置一个没有default的partner作为零售客户
      上海-Jeff(85822082)  16:52:06
      因为每次送货地址都变化
      重庆-mrshelly(49812643)  16:52:36
      难道, 只建一个 partner ? 然后 每个客户一个地址?

      广东-Joshua(470534800)  16:52:42
      sales order report 里面用到这个
      上海-Jeff(85822082)  16:52:45
      有个小子昨天说每个公司都至少有个联系人,请看昨天下午的聊天记录
      地址是根据partner复制到order的
      上海-Jeff(85822082)  16:53:51
      不需要——然后 每个客户一个地址?

      上海-Jeff(85822082)  16:54:16
      这个我们看order的代码的时候会看到
      上海-Jeff(85822082)  16:54:34
      'function': fields.many2one('res.partner.function', 'Function'),
      广东-Joshua(470534800)  16:55:21
      业务伙伴联系人的职务,职能
      上海-Jeff(85822082)  16:55:29
      职位,没啥说的
      广东-Joshua(470534800)  16:55:41
      职位的code不能重复

      上海-Jeff(85822082)  16:55:40
              'title': fields.selection(_contact_title_get, 'Title', size=32),
      动态下拉菜单,只能选针对个人的称谓,雷德森或者健特们

      上海-Jeff(85822082)  16:57:08
              'name': fields.char('Contact Name', size=64),
              'street': fields.char('Street', size=128),
              'street2': fields.char('Street2', size=128),
              'zip': fields.char('Zip', change_default=True, size=24),
              'city': fields.char('City', size=128),
              'state_id': fields.many2one("res.country.state", 'Fed. State', domain="[('country_id','=',country_id)]"),

      广东-Joshua(470534800)  16:57:08
      def _contact_title_get(self, cr, uid, context={}):
          obj = self.pool.get('res.partner.title')
          ids = obj.search(cr, uid, [('domain', '=', 'contact')])
          res = obj.read(cr, uid, ids, ['shortcut','name'], context)
      return [(r['shortcut'], r['name']) for r in res] + [('','')]

      重庆-mrshelly(49812643)  16:57:07
      好多定义里都有类似的代码.
      上海-Jeff(85822082)  16:57:17
      这才是联动
      上海-Jeff(85822082)  16:57:38
      domain="[('country_id','=',country_id)]"),

      重庆-mrshelly(49812643)  16:57:48
      这个是过滤呀...
      上海-Jeff(85822082)  16:58:14
        'birthdate': fields.char('Birthdate', size=64),

      重庆-mrshelly(49812643)  16:58:14
      联动, 我觉得 是 onchange
      上海-Jeff(85822082)  16:58:21
      为啥不用date?

      上海-Jeff(85822082)  16:58:52
      'active': fields.boolean('Active', help="Uncheck the active field to hide the contact."),
      四川--Tomp(139776)  17:00:30
        _defaults = {
              'active': lambda *a: 1,
          } 
      有缺省值

      发布在 Odoo 系统测试
      T
      tomp
    • 对于本土化的构想

      <P>1:组建开发团队,重新构建框架或者在原基础上进行大规模改进,</P>
      <P>2:重新开发或者整改客户端</P>
      <P>3:支持多数据库,sqlalchemy本身也可以支持多数据库</P>
      <P>4:重新开发或者优化报表模块</P>
      <P>5:重新开发重要应用模块(符合国内企业应用)</P>
      <P>6:提供商业服务,技术支持和模块开发</P>
      <P>7:可以分两支线发展:开源版本和商业版本</P>
      <P> </P>
      <P>有兴趣加入的朋友请联系:</P>
      <P> </P>
      <DIV><SPAN style="FONT-WEIGHT: bold; COLOR: #316e80"> 1.  Open</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f">ERP群</SPAN></DIV>
      <DIV style="COLOR: #000000">
      <DIV class=msnimg style="FLOAT: left"></DIV>
      <DIV class=modTips style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px" $included="null" htmlElement="true">  [email protected] </DIV></DIV>
      <DIV> </DIV>
      <DIV><SPAN style="FONT-WEIGHT: bold; COLOR: #316e80"> 2.  </SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f"><FONT color=#316e80> Open</FONT><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f">ERP  QQ</SPAN>群</SPAN></DIV>
      <DIV style="COLOR: #000000">
      <DIV class=qqimg style="FLOAT: left"></DIV>
      <DIV class=modTips style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px" $included="null" htmlElement="true">  69195329</DIV>
      <DIV class=modTips style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px" $included="null" htmlElement="true"><SPAN style="FONT-WEIGHT: bold; COLOR: #316e80">3.  </SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f"><FONT color=#316e80> Open</FONT><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f">ERP  论坛</SPAN></SPAN></DIV>
      <DIV class=modTips style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px" $included="null" htmlElement="true"><A href="http://www.shine-it.net">www.shine-it.net</A><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #6f6f6f"></SPAN></SPAN></DIV></DIV>

      发布在 集思广益
      T
      tomp