跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

L

lygping

@lygping
关于
帖子
67
主题
23
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • OpenERP一是慢,二还需技术支持?
    L lygping

    [quote author=Jimboo link=topic=2189.msg6951#msg6951 date=1286245600]
    本人刚接触,想了解一下是OpenERP否达到市面上流行的ERP,如易飞、天思、金蝶、用友所具备的一切功能及其稳定性是否可靠!
    如果这样,哪对于我们这些ERP实施工程师们将是一个很大的福音!希望大家努力!
    [/quote]

    就这一点我说点浅薄的意见啊!
    市面上流行的ERP,我只接触过用友(我们公司以前用的U8),金蝶(我老婆他们公司用的K3)
    OE基本还只是在一个初始阶段,基本的模块还是有的,不过我至今没接触过质检模块。稳定性和可靠性要看你怎么理解了!另外呢,
    对于财务报表的实际应用,还有待商榷!

    既然你称自己为ERP实施工程师,那你自己就多花点时间研究一下!
    我眼中的OE是,不是那么严谨,但是开发比较方便!如果有自己的开发人员,实施配置开发,响应比较快!


  • [已解决]OpenERP 中这个SQL 怎么解读? PostgreSQL 达人勿喷.
    L lygping

    自问自答!
    哈哈


  • Openerp工作机会
    L lygping

    兴趣是有的,就是机会如何呢?
    重庆倒是个不错的地方!
    就是有点远了!呵呵


  • 求助这段fnct_search代码,帮忙解释一下!
    L lygping

    [quote author=mrshelly link=topic=2156.msg6780#msg6780 date=1284083072]
    还是你的总体需求, 不被大家了解. 所以不好帮到你.

    1 你改了哪些东西?

    2 你在哪个对象上面添加了 function 字段?

    3 在这个对象的搜索里面, 你希望 从哪些数据中搜索到? 也就是你期望 的结果 是一个什么样的查询?
    [/quote]

    shelly, 首先谢谢你给的帮助!
    第一个问题, 我的系统已经被改的面目全非, 所以呢,沟通起来有些麻烦!
    第二个问题,function字段,是我从 Purchase order里抽取了一个字段sappo到 stock_tracking.
    第三个问题,在stock_tracking tree上,能够按照sappo搜索 tree.
    其实就是stock_tracking有个function字段 SAPPO
    给他写个search, 可以搜索而已!
    经过反复测试 ,以及 shelly,黑JJ,校长的指导和帮助!
    得到以下的代码!
    虽然得到了结果,不过感觉写的不是很好!
    最重要的是,给我一楼的代码 误导了不少!一直在考虑那些个 frags啊什么的!
    其实中心就是, 根据args 搜索 stock_tracking 的ID, 返回。
    然后 ID就是  strock_tracking 里 order_id 和purchase_order.id ,purchase_order.sap_po ilike args.
    这里我抛弃了 Ilike,直接用了 ~*,
    功能是实现了!但是不是很好的一段代码!
    还请大家指正!


    def _sappo_search(self, cursor, user, obj, name, args):<br />&nbsp; &nbsp; &nbsp;  # fp = file(&#039;pingargs.txt&#039;,&#039;a+&#039;)<br />&nbsp; &nbsp; &nbsp;  # fp.write(str(args)+&#039;\n&#039;)<br />&nbsp; &nbsp; &nbsp;  # fp.close&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; if not len(args):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#91;]<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; qu1, qu2 = &#91;], &#91;]<br />&nbsp; &nbsp; &nbsp; &nbsp; for x in args:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if x[1] == &#039;ilike&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if len(x[2]) &gt; 0:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039; i.sap_po ~*&#039; )<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu2 = x[2]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039; (False)&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; if len(qu1):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1 = &#039; AND&#039; + &#039; AND&#039;.join(qu1)<br />&nbsp; &nbsp; &nbsp; &nbsp; else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1 = &#039;&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; sql =&nbsp; &quot;&quot;&quot; SELECT l.id FROM stock_tracking l, purchase_order i WHERE l.order_id = i.id&nbsp; %s&#039;%s&#039;&quot;&quot;&quot; % (qu1, qu2,) <br />&nbsp; &nbsp; &nbsp;  # fp = file(&#039;pingsql.txt&#039;,&#039;a+&#039;)<br />&nbsp; &nbsp; &nbsp;  # fp.write(str(sql)+&#039;\n&#039;)<br />&nbsp; &nbsp; &nbsp;  # fp.close&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; cursor.execute(sql)<br />&nbsp; &nbsp; &nbsp; &nbsp; res = cursor.fetchall()<br />&nbsp; &nbsp; &nbsp; &nbsp; if not len(res):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return [(&#039;id&#039;, &#039;=&#039;, &#039;0&#039;)]<br />&nbsp; &nbsp; &nbsp; &nbsp; return [(&#039;id&#039;, &#039;in&#039;, [x[0] for x in res])]
    

  • 求助这段fnct_search代码,帮忙解释一下!
    L lygping

    这段源代码是 acount_move_line.py 第284行开始!
    功能是定义了一个fucntion字段,但是function字段搜索功能是要自己创建的!

    我自己也定义了一个function字段,也想创建这个搜索功能!
    args = [('module1.field1','like', 'something'), ('module2.field2','=', 1)] ,您说的这个我明白的!
    但是我遇到做的程序就一直出错!

    不是程序流程的错误!而是字段类型的问题!
    当我把搜索的,module2.field = 1,这里的feild 选择为 int 型的,功能没有问题,可以实现!
    但是如果 feild 为char型的,而不巧的是,我的char 确实一串 45007846这样的数字,就报错了! In types charcter varying and interger cannot be matched


  • 求助这段fnct_search代码,帮忙解释一下!
    L lygping
    def _sappo_search(self, cursor, user, obj, name, args):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; if not len(args):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#91;]<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; sappo_obj = self.pool.get(&#039;purchase.order&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; fp = file(&#039;ping.txt&#039;,&#039;a+&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; fp.write(str(args)+&#039;\n&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; fp.close<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; i = 0<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; while i &lt; len(args):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fargs = args[i][0].split(&#039;.&#039;, 1)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if len(fargs) &gt; 1:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args[i] = (fargs[0], &#039;in&#039;, sappo_obj.search(cursor, user,<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [(fargs[1], args[i][1], args[i][2])]))<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i += 1<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if isinstance(args[i][2], basestring):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res_ids = sappo_obj.name_search(cursor, user, args[i][2], &#91;],<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args[i][1])<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args[i] = (args[i][0], &#039;in&#039;, [x[0] for x in res_ids])<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i += 1<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; qu1, qu2 = &#91;], &#91;]<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; for x in args:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if x[1] != &#039;in&#039;:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (x[2] is False) and (x[1] == &#039;=&#039;):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id IS NULL)&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif (x[2] is False) and (x[1] == &#039;&lt;&gt;&#039; or x[1] == &#039;!=&#039;):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id IS NOT NULL)&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id %s %s)&#039; % (x[1], &#039;%s&#039;))<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu2.append(x[2])<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif x[1] == &#039;in&#039;:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if len(x[2]) &gt; 0:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id in (%s))&#039; % (&#039;,&#039;.join(&#91;&#039;%s&#039;] * len(x[2]))))<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu2 += x[2]<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039; (False)&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; if len(qu1):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1 = &#039; AND&#039; + &#039; AND&#039;.join(qu1)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; else:<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1 = &#039;&#039;<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; SQL = (&#039;SELECT l.id &#039; \<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;FROM stock_production_lot l, purchase_order i &#039; \<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;WHERE l.order_id = i.id &#039; + qu1, qu2)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; fp = file(&#039;pingsql.txt&#039;,&#039;a+&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; fp.write(str(SQL)+&#039;\n&#039;)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; fp.close<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; cursor.execute(&#039;SELECT l.id &#039; \<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;FROM stock_production_lot l, purchase_order i &#039; \<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;WHERE l.order_id = i.id &#039; + qu1, qu2)<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; res = cursor.fetchall()<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; if not len(res):<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return [(&#039;id&#039;, &#039;=&#039;, &#039;0&#039;)]<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; return [(&#039;id&#039;, &#039;in&#039;, [x[0] for x in res])]
    



    输出的 args如下


    [('sappo', 'ilike', '4500')]

    [('sappo', 'ilike', '4500')]

    [('sappo', 'ilike', '4500')]

    [('sappo', 'ilike', '4500')]

    而得到的SQL语句却没有任何参数得到!

    ('SELECT l.id FROM stock_production_lot l, purchase_order i WHERE l.order_id = i.id  AND (False)', [])

    按道理,'4500'类型应该是  string.
    却没有执行里面的循环!


  • 求助这段fnct_search代码,帮忙解释一下!
    L lygping

    [size=18pt]我想对一个function字段进行搜索,经过大家指点,知道了这个方法!只是本人语言基础薄弱!
    想请大家指点一下!

    def _invoice_search(self, cursor, user, obj, name, args): # 这里是定义这个搜索的功能!<br />&nbsp; &nbsp; &nbsp; &nbsp; if not len(args):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  # args 应该是指我们搜索的时候输入的条件<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#91;]<br />&nbsp; &nbsp; &nbsp; &nbsp; invoice_obj = self.pool.get(&#039;account.invoice&#039;) # 这里定义了将要搜索用到的 object<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; i = 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 这一段是我不明白的地方!<br />&nbsp; &nbsp; &nbsp; &nbsp; while i &lt; len(args):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fargs = args[i][0].split(&#039;.&#039;, 1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if len(fargs) &gt; 1:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args[i] = (fargs[0], &#039;in&#039;, invoice_obj.search(cursor, user,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [(fargs[1], args[i][1], args[i][2])]))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i += 1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if isinstance(args[i][2], basestring):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res_ids = invoice_obj.name_search(cursor, user, args[i][2], &#91;],<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args[i][1])<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args[i] = (args[i][0], &#039;in&#039;, [x[0] for x in res_ids])<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i += 1<br />&nbsp; &nbsp; &nbsp; &nbsp; qu1, qu2 = &#91;], &#91;]<br />&nbsp; &nbsp; &nbsp; &nbsp; for x in args:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if x[1] != &#039;in&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (x[2] is False) and (x[1] == &#039;=&#039;):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id IS NULL)&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif (x[2] is False) and (x[1] == &#039;&lt;&gt;&#039; or x[1] == &#039;!=&#039;):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id IS NOT NULL)&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id %s %s)&#039; % (x[1], &#039;%s&#039;))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu2.append(x[2])<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elif x[1] == &#039;in&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if len(x[2]) &gt; 0:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039;(i.id in (%s))&#039; % (&#039;,&#039;.join(&#91;&#039;%s&#039;] * len(x[2]))))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu2 += x[2]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1.append(&#039; (False)&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; if len(qu1):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1 = &#039; AND&#039; + &#039; AND&#039;.join(qu1)<br />&nbsp; &nbsp; &nbsp; &nbsp; else:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; qu1 = &#039;&#039;<br /># 执行搜索语句,从两个 object的表里,搜索 这个ID,其实也就是上面一段产生的 根据输入的 args 产生的结果!<br />&nbsp; &nbsp; &nbsp; &nbsp; cursor.execute(&#039;SELECT l.id &#039; \<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;FROM account_move_line l, account_invoice i &#039; \<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;WHERE l.move_id = i.move_id &#039; + qu1, qu2)<br />&nbsp; &nbsp; &nbsp; &nbsp; res = cursor.fetchall()<br /># 这里也不太明白!貌似全部返回!<br />&nbsp; &nbsp; &nbsp; &nbsp; if not len(res):&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return [(&#039;id&#039;, &#039;=&#039;, &#039;0&#039;)]<br />&nbsp; &nbsp; &nbsp; &nbsp; return [(&#039;id&#039;, &#039;in&#039;, [x[0] for x in res])]
    




    另外,我要搜索的字段是 一个PO号,类似于 45000122458,虽然看上去是 数字,但是系统定义的类型是 char
    而输入搜索条件的时候,却是4500122这样的数字,恐怕要先把这个数字转换成 字符型!

    先请大家有空的时候,帮忙解释上面的那段语句吧!
    这里先谢谢了![/size][/size]


  • 【牛逼设计】OpenERP销售模块中的库链应用
    L lygping

    也膜拜一下!


  • OpenERP应用和开发基础(第二版)开班了
    L lygping

    老肖辛苦了,学习了!


  • [分享] 关于多对象数据导出的实践
    L lygping

    公司采购需要把一个数据导出到一张表里, 但是这些数据来自不同的Object,想从最后的质检结果里,导出产品名称,PO号,产品的运输单位,以及其他一些信息。
    经过shelly的指点,
    通过browse 回写,直接用function的方式,把这些数据都抓来!

    &nbsp; &nbsp; def _getsupplier(self,cr,uid,ids,field_name,arg,context={}):<br />&nbsp; &nbsp; &nbsp; &nbsp; res={}<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; for record in self.browse(cr,uid,ids,context):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res[record.id]=record.orderline_id.order_id.partner_id.name<br />&nbsp; &nbsp; &nbsp; &nbsp; return res<br />&nbsp; &nbsp; def _getprice(self,cr,uid,ids,field_name,arg,context={}):<br />&nbsp; &nbsp; &nbsp; &nbsp; res={}<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; for record in self.browse(cr,uid,ids,context):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res[record.id]=record.orderline_id.product_id.standard_price<br />&nbsp; &nbsp; &nbsp; &nbsp; return res<br />&nbsp; &nbsp; def _getunitqty(self,cr,uid,ids,field_name,arg,context={}):<br />&nbsp; &nbsp; &nbsp; &nbsp; res={}<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; for record in self.browse(cr,uid,ids,context):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res[record.id]=record.orderline_id.order_id.carrier_id.weight_unit<br />&nbsp; &nbsp; &nbsp; &nbsp; return res<br />&nbsp; &nbsp; def _getsappo(self,cr,uid,ids,field_name,arg,context={}):<br />&nbsp; &nbsp; &nbsp; &nbsp; res={}<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; for record in self.browse(cr,uid,ids,context):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res[record.id]=record.orderline_id.order_id.sap_po<br />&nbsp; &nbsp; &nbsp; &nbsp; return res
    



    添加字段:

    &#039;suppliers&#039;:fields.function(_getsupplier,method=True,type =&#039;char&#039;,string =&#039;suppliers&#039;), <br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;price&#039;:fields.function(_getprice,method=True,type=&#039;float&#039;,string=&#039;Prices&#039;),<br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;unitqty&#039;:fields.function(_getunitqty,method=True,type=&#039;integer&#039;,string=&#039;Uint qty&#039;),<br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;sappo&#039;:fields.function(_getsappo,method=True,type =&#039;char&#039;,string =&#039;SAP PO&#039;), 
    

    然后到了前台,导出的时候,居然找不到这些字段, 后来在xml文件里把它们都添加上,发现就可以找到相对用的字段了!

     <br /> &lt;field name=&quot;price&quot; string=&quot;price&quot; invisible=&quot;True&quot;/&gt;<br />
    



    因为太多字段来,影响前台显示,而且价格等也不希望被别的组的人看到!
    给加上了 invisible="True",就解决了!

    这里谢谢 shelly!


  • Report 开发求助!
    L lygping

    终于发现这个问题了!
    原来是 name="roquette.coa" 两个都一样了!
    修改成两个不同的名字,就可以了!呵呵!
    终于OK了!呵呵!


  • Report 开发求助!
    L lygping

    大家好,我设计了两个报表,公用同一个rml文件!
    一个指向 stock_tracking,一个指向stock_production_lot.
    但是只有stocking_production_lot 的报告,能正确显示数据,
    stock_tracking里显示的都是空白!
    还请指教一下!
    <report auto="False" id="report_roquette_coa_tracking" model="stock.tracking" name="roquette.coa" rml="roquette/report/coa.rml"
    string="COAII"/>
    <report auto="False" id="report_roquette_coa_prodlot" model="stock.production.lot" name="roquette.coa" rml="roquette/report/coa.rml" string="COAI"/>
    这个是view 里的。

    class roquette_coa_tracking(report_sxw.rml_parse):
        def init(self, cr, uid, name, context):
            super(roquette_coa_tracking, self).init(cr, uid, name, context)
            self.localcontext.update({
                'time': time,
                'user': self.pool.get('res.users').browse(cr, uid, uid, context)
            })
    report_sxw.report_sxw('report.roquette.coa','stock.tracking','addons/roquette/report/coa.rml',parser=roquette_coa_tracking)

    class roquette_coa_prodlot(report_sxw.rml_parse):
        def init(self, cr, uid, name, context):
            super(roquette_coa_prodlot, self).init(cr, uid, name, context)
            self.localcontext.update({
                'time': time,
                'user': self.pool.get('res.users').browse(cr, uid, uid, context)
            })
    report_sxw.report_sxw('report.roquette.coa','stock.production.lot','addons/roquette/report/coa.rml',parser=roquette_coa_prodlot)

    report。py 文件。



  • 【请教语法】关于write search 和get
    L lygping

    谢谢楼上的,
    后来我直接在语句里插入一个 if 判断语句,也可以实现功能。


  • 求助:' list' object can not be callable
    L lygping

    大家好,我新建了一个wizard,
    主要功能是,从'stock.production.lot',选择一项,读取当前行的数据,然后把这个数据用create方法写到另一个Object里,
    但是报错 ' list' object can not be callable
    我想错误应该在 pick = picking_obj.browse(cr, uid, data['id'], context)  这一句里,但是不知道应该如何修改!
    还请大家帮忙!

    def _sample2_create(obj, cr, uid, data, context):

        picking_obj=pooler.get_pool(cr.dbname).get('stock.production.lot')

        pick = picking_obj.browse(cr, uid, data['id'], context)  # 参照 stock/wizard/wizard_invoice_onshipping.py 写的

        tracking_id=self.pool.get('stock.tracking').create(cr, uid, {

                                'orderline_id': pick.orderline_id,

                                'prodlot_id': pick.id,

                                # add real batch NO into vichical lot

                                'realbatch': pick.realbatch,

                                'serial': ref,

                                'state': 'wait',

                                                       

                                } )     



        return tracking_id
    ##########################################################################################################################################

    class wizard_stock_sample2_create(wizard.interface):

        states = {

            'init': {

                'actions': [],

              'result': {'type': 'action', 'action': [_sample2_create], 'state':'end'}

            }

        }

    wizard_stock_sample2_create('stock.sample2.create')


  • 【请教语法】关于write search 和get
    L lygping

    for 循环是个错误,已经去掉!
    关系说明也补充在里面!谢谢楼上啊!


  • 【请教语法】关于write search 和get
    L lygping

    说明一下啊:这里是程序的主要代码!
    被注释掉的两句是原来的!
    剩下的都是后改的!
    程序背景: 两个object: 'purchase.order.line'  字段state, prodlot_id
    'stock.production.lot' 字段 state
    为了实现的目的是:当approve PO的时候,把 'purchase.order.line'  里'state','=', 'complied' 改成 appvoed
    同时 把 相应的 'stock.production.lot' 字段 state 也改成 appvoed
    这里的对应关系是'purchase.order.line'  的 prodlot_id  = 'stock.production.lot'  的id

    [glow=red,2,300]但是下面的代码报错 list out of range[/glow]

    # 将 POline的状态写成 approve 测试没问题!
                    pol_ids= self.pool.get('purchase.order.line').search(cr, uid,[( 'state','=', 'complied')] )
                    self.pool.get('purchase.order.line').write(cr, uid, pol_ids, {'state': 'approved'} )
      #将 stock_production_lot 的状态写成 approve,问题就在这里! 

      #读取 prodlot_id 的值,并赋予 values,但是这里用了POL_IDS ,不知道是否可以这样用!                     
                    values= self.pool.get('purchase.order.line').read(cr,uid,pol_ids,['prodlot_id']) [glow=red,2,300] 问题所在[/glow]
    #查询  'stock.production.lot' id 等于 'prodlot_id'
                    lot_id= self.pool.get('stock.production.lot').search(cr, uid,[( 'id','in', 'values')] ) [glow=red,2,300]问题所在[/glow]
    # 写数据 。
                    self.pool.get('stock.production.lot').write(cr, uid, lot_id, {'state': 'approved'} ) 
               
                    #self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} )
                    #self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )


  • 【请教语法】关于write search 和get
    L lygping

                for orderline in purchase.order_line:
                    self.pool.get('purchase.order.line').write(cr, uid, [orderline.id], {'state': 'approved'} )
    这里是我的原来的语句!
    转身 8:56:44
    直接把所有的都写成了 approved
    shelly→水 8:56:44
    然后? 
    转身 8:56:52
    我想修改一下!
    shelly→水 8:56:56
    改成啥? 
    转身 8:57:11
    只把里面state 为 confirm 改成approved
    转身 8:57:17
    其他的不改
    shelly→水 8:57:24
    那你要在前面查询.  shelly→水 8:58:52
    你应该

    op_ids = self.pool.get('purchase.order.line').search(cr.uid[('state','=','confirm')]

    for op_id in op_ids:
      self.pool.get('purchase.order.line').write(cr, uid, op_id, {'state':'confirm'}) 
    shelly→水 8:59:08
    先查询出ID. 然后遍历ID 使用write 方法 
    shelly→水 8:59:13
    应该也可以不用遍历. 
    shelly→水 8:59:26
    直接
    self.pool.get('purchase.order.line').write(cr, uid, op_ids, {'state':'confirm'}) 
    shelly→水 8:59:34
    直接 操作 op_ids 就行了. 
    转身 8:59:51
    我试试看,
    转身 9:02:48
    老将出马,一个顶三!
    转身 9:07:46
    谢谢shelly [/sup]

    self.pool.get('stock.production.lot').write(cr, uid, [orderline.prodlot_id.id], {'state': 'approved'} )。然后我又有另外一句也需要这么修改!
    我按照shelly的方式 依葫芦画瓢,
    op_ids=self.pool.get('stock.production.lot').search(cr,uid,[('state','=','cinfirmed)])

    self.pool.get('stock.production.lot').write(cr, uid, op_ids, {'state': 'approved'} ).
    就不起作用!
    我想这里主要的还是因为 [orderline.prodlot_id.id]
    因为write的时候,[orderline.prodlot_id.id] ,是把orderline 里面prodlot_id 传输给'stock.production.lot',然后把这条记录的state给改写了!
    但是在search 的时候,怎样才能把 orderline 里的 prodlot_id 传输给search呢?
    写个SQL 语句,循环一下,还是 有直接的方法呢?
    不知道哪位前辈指点一下?

    谢谢了先!


  • 【已经解决】action 的显示问题!
    L lygping

    跟大家请教一下!
    如果想控制 一个action button 的显示, 一般是怎么做的呢?
    比如, 一个采购订单, 我里面添加了一个 质检状态字段: 等待质检, 质检通过, 质检未通过。
    然后, 我想只有在质检通过的情况下,

    purchase approve 这个 按钮才显示, 其他状态不显示。
    group是用来控制组的, 这个应该不是组的问题!
    请问应该怎么搞呢?
    谢谢啊!


  • 改版后首次报到
    L lygping

    关键是我找不到我的收藏夹了,我收藏的帖子啊,你们在哪里啊?


  • 【求助】库存实现当月出入库汇总
    L lygping

    已经搞定,主要的问题还是时间控制的问题

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组