校长才是英雄,神龙见首不见尾,真是经典教程!仰慕~
tomp
-
OpenERP的MRP运算的核心对象--Procurement Order -
Openerp压力测试:多线程直连OE Server NET-RPC/XML-RPC端口测试沙发~~~辛苦!
-
表单打印详细步骤求助高手!如题,感觉不尽!
-
表单打印问题表单打印老是出现错误:(<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 /> def __init__(self, cr, uid, name, context=None):<br /> super(rpt_after_sale_repair, self).__init__(cr, uid, name, context=context)<br /> self.localcontext.update({<br /> 'time': time,<br /> })<br /><br />report_sxw.report_sxw('report.rpt_after_sale_repair', 'crm.after.sale.repair', 'addons/crm_after_sale_repair/report/asr.rml', parser=rpt_after_sale_repair, header=Fales)<br />
rpt_after_sale_repair_view.xml
<?xml version="1.0" encoding="utf-8"?><br /><openerp><br /> <data><br /> <report id="report_crm_after_sale_repair" header="False"<br /> auto="False" model="crm.after.sale.repair" name="rpt_after_sale_repair"<br /> rml="crm_after_sale_repair/report/asr.rml" string="打印维修单"/><br /> </data><br /></openerp>
--openerp--.py
'update_xml': [<br /> 'report/rpt_after_sale_repair_view.xml',<br /> ],
求助~~~感谢! -
导入翻译无响应解决之道在导入翻译时一直处于loading状态,在mrshelly的帮助下得到解决:
导入路径不能含有中文,除非你确认你的操作系统的文件夹是以 UTF-8编码建的.而 windows 系统是用 GBK 编码创建文件夹结构的. -
如何确定menu或view的id或xml-id感谢~~~
-
视图标签页名称动态读取表记录想要的效果:标签页动态读取表某列的内容作为标签名
如:appraisal、internal notes、public notes是某表中的记录,
显示效果:
[attach=1]
表a
id 名字 上级
a1 态度
a2 能力
a3 绩效
a11 责任心 a1
a12 主动性 a1
a13 协作性 a1
a14 意识 a1
a15 自律 a1
标签页:
态度 能力 绩效
[attach=2] -
OpenERP对象定义详解(连载中...)感谢各位达人!
-
今天开始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,
}
有缺省值 -
对于本土化的构想<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> -
安装olap模块出错环境:windows xp,python25;
c/s:5.0.0-ALPHA;
b/s:eTiny-1.0.2-py2.5.egg -
安装olap模块出错错误信息:
Traceback (most recent call last):
File "netsvc.pyo", line 257, in dispatch
File "serviceweb_services.pyo", line 431, in execute
File "serviceweb_services.pyo", line 411, in execute
File "wizard__init.pyo", line 165, in execute
File "wizard__init__.pyo", line 73, in execute_cr
File "C:Program FilesOpenERP Serveraddonsbasemodulewizardwizard_update_module.py", line 50, in update_module
File "C:Program FilesOpenERP Serveraddonsbasemodulemodule.py", line 434, in update_list
File "C:Program FilesOpenERP Serveraddonsolap__init_.py", line 29, in <module>
File "C:Program FilesOpenERP Serveraddonsolapolap.py", line 30, in <module>
File "C:Program FilesOpenERP Serveraddonsolapcube__init__.py", line 1, in <module>
File "C:Program FilesOpenERP Serveraddonsolapcubemdx_parser.py", line 21, in <module>
File "C:Program FilesOpenERP Serveraddonsolapcubecube.py", line 2, in <module>
ImportError: No module named sqlalchemy
请求帮助!(module sqlalchemy 已经安装)[[i] 本帖最后由 tomp 于 2008-11-13 14:10 编辑 [/i]]
-
建议开发中文工具包,完善官方Tiny ERP 中文支持赞同!!!!!!
-
开发组集结号(报名和计划专用)tomp
mail:[email:3phcqbe3][email protected][/email:3phcqbe3] -
一点建议<P>很喜欢这个erp,希望本地组增加打印格式设置(报表设计),我在一家流通企业负责erp,对其功能上可以提出很多建议。愿意设立QQ群和大家共同把这个项目搞好!群号:69195329</P>
[[i] 本帖最后由 tomp 于 2008-9-6 17:43 编辑 [/i]]