Planet ShineIT

May 16, 2012

Shine IT为什么选择了时区后时间还是不对?

因为你是将服务器运行在windows系统上的,由于windows系统本身的问题,OpenERP服务器实际上是无法正确取到windows的时区设置,所以就fallback到UTC时间。所以要使OpenERP服务器正确设定时区,你可以在OpenERP服务器的配置文件(openerp_server.conf)文件中注明: timezone = Asia/Shanghai 或在openerp服务器启动时,输入命令行参数:openerp-server –timezone=Asia/Shanghai -s 或更简单的办法:如果你的服务器和客户端运行在同样的时区,不要在用户的时区设置里设置时区,留空即可

May 13, 2012

Shine ITTalk is cheap, show me the code.

OpenERP给了我开源的代码,而我却用它寻找陷阱。 Review is not enough, leave me a comment.

May 07, 2012

Shine ITOpenERP v6.1 二次开发教程(一)

开发案例 通过此案例,你可以了解到: 1.一个基本的OpenERP模块的构成 2.字段的定义方法 3.视图定义定义的方法(表单视图,列表视图,视图动作,菜单) 需求 1.输入和查询课程,把信息储存到课程对象里 2.课程包含以下信息:名称,价格,天数,开始日期,教师,学员 3.每个课程可以有多个学员,要记录学员的姓名、电话、电子邮件 4.课程可以添加教材和作业等文档附件 5.用户可以设置默认值以加速输入 6.可以按名称查询课程,也可以用其他信息查找课程,并保存常用查询条件 7.可以导出课程信息到excel文件,并支持导入 8.可以按日期查看课程,并调整课程时间 9.老师只能看到自己的课程 写一个模块 结构 模块名就叫做oecn_training,然后它下面有四个文件,分别如下。 --oecn_training |--__init__.py |--__openerp__.py |--lesson.py |--lesson_view.xml __init__.py __init__.py文件是Python 的模块描述,因为OpenERP模块也是一个普通的Python模块。 # -*- encoding: utf-8 -*- import lesson #导入包含Python代码的所有文件和目录   __openerp__.py __openerp__.py文件(在6.0之前的版本也叫__terp__.py)它包含一个Python的字典声明这个模块的相关信息:模块名字,依赖关系,说明和组成。 { "name" : "OECN Training", #模块名 "version" : "1.0", #模块版本 "description" : 'OECN Training Demo', #模块说明 "author" : "Shine IT", #作者 "website" : [...]

May 05, 2012

Shine IT小改动大幅提升mrp运算效率

我们的一个客户最近说,他们在进行mrp运算的时候OpenERP服务器的postgreSQl进程占用100%的CPU,而运算的过程持续了三天都没结束。 此客户是一家电子商务公司,前台使用Mangento网店,销售订单和库存信息与后台的OpenERP系统同步。当上千张订单从OpenERP-Mangento连接器导入OpenERP后,OpenERP据此生成大量的补货单。我们读了一下代码,发现现有的程序在搜索这些补货单时,使用了一个不带索引的字段planned_date进行排序,这是造成性能瓶颈的原因。 进一步调查发现根本不需要做这个排序,只需要去掉它并并增加一个state条件即可拿到更优的结果。方案十分有效,mrp计划在1小时内运行成功。为了更有效使用内存,我们还在每500个补货单强制commit一次。这个修改已被官方接受并合并到最新的开发版本中。 === modified file 'procurement/schedulers.py' --- procurement/schedulers.py 2011-01-14 00:11:01 +0000 +++ procurement/schedulers.py 2012-03-25 14:30:26 +0000 @@ -53,11 +53,12 @@ procurement_obj = self.pool.get('procurement.order') if not ids: - ids = procurement_obj.search(cr, uid, [], order="date_planned") - for id in ids: + ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')]) + qty_procs = len(ids) + for i, id [...]

April 24, 2012

Shine IToecn_help 模块介绍,大家一起完善中文顾问社区wiki

我们最近做了一个oecn_help,是一个OpenERP model和module查询的模块,直接连到 www.openerp-china.org 上面,旨在一起构建一个中文的OpenERP wiki 百科,现在支持6.1和6.0.x。 使用方法如下: 通过蓝色小问号(6.0.x是通过侧边栏)把你拉中文社区的资料里面。 6.1 and 6.0.x ————————————–   ——————————————————————————————— 点击后会直接进入相关的model的wiki页面(当然了wiki里面的资料有的是旧的,社群成员也在不断更新,也需要大家一起动手完善)—> ——————————————————————————————— 模块菜单里也有对于此模块的中文帮助文档 官方apps下载地址,欢迎提出各种建议。 http://apps.openerp.com/addon/7213?filter=%7B%22order_by%22%3A+%22click_counter+desc%22%2C+%22text_search%22%3A+%22oecn_help%22%7D&page=0 谢谢大家。

April 20, 2012

Shine IT__openerp__.py的演变

OpenERP版本经历了5.0.x,6.0.x,6.1,他们的__openerp__.py文件的键值也添加了或者改变了。不过放心,一切都向后兼容(我们还可以看到不少标准模块还在使用旧语法) 来源官方mail-list 6.0变化 ———————————– -’data‘代替了’ini_xml’和’update_xml’。这样更为直观,以为内它一般包含各种文件类型(CSV,YAML,XML)而区分它们 init/update则可以通过在xml内使用 <data noupdate=”1″>标示。 -’demo‘代替’demo_xml’,基于同样的原因(仅在演示的时候使用) -’test‘是在demo数据导入后,导入的测试文件。当所有的测试文件处理完后,所有的测试操作会回滚到之前的默认值。(cfr –test-* 服务器参数) -’web‘(布尔类型),用于标记模块是否复制和加载到web客户端 6.1 更新 ———————————– -新的’js‘,’css‘,’qweb‘用于声明web的源文件(按照惯例他们一般在 /static/src/ 下) -’web‘(布尔类型)被取消,现在任何含有’js’,'css’,'qweb’的模块将不再需要转移到web客户端。因为web客户端已经默认被server包含了,当没有包含的时候,web应用模块会被复制到web模块下。 -’active‘(布尔类型)会改名为’auto_install’防止和OpenERP的软删除的’active’属性混淆。’auto_install’会他的所有依赖模块安装完后安装。如果它没有依赖的模块则会在新建数据库的时候被安装(像’base’) -‘complexity’(easy|normal|expert)是一个新的可选字段,用于描述一个模块对于用户的友好程度。 -‘application’(布尔类型),标记一个模块是否为“应用程序”,如果是则会在模块的默认视图中展现出来(kanban视图) -’category‘:可以通过把模块类别设置为’hidden’或者’hidden’的子类别,把某些模块隐藏起来(技术模块/自动安装的模块),如果用户是属于Technical Features group这个权限组,则可以在列表视图看到一个按钮来显示他们。 -(隐藏的)您可以在你的模块/static/src/img/icon.png 里添加你的模块图标(最好是透明的PNG),不需要在配置文件定义,默认是使用base模块的图标,这些图标将会在看板视图显示出来。 全局变化(所有的版本) ———————————– 以下元数据的扩展,更好的展示你的模块: -’description‘支持RST语法(包含主要的一部分) -’images‘(路径列表)可以添加说明截图。    

April 16, 2012

Shine IT在GTUG集会上秀OpenERP

上次Pycon中国大会,OpenERP作为python社区里的另类应用,只取得了15分钟的快速演讲资格,主题被主持人生生截断。这次GTUG的阅读聚会,面向的还是Python程序员,相同的组织者和主持人邀我痛快地讲一次。一个产品介绍一个开发演示,各一小时,很给力。 NetCycle提供的场地很赞,内环工厂改造的loft风格建筑。食堂和会议室都很豪华,据说椅子要8000元一把。 第一个主题是在GAE上搭自己的Blog,流程和我们常用的goAgent类似,如果墙没问题,还是pythoner搭独立博客的一个好选择。 第二个主题是OpenERP简介,使用了社区里讨论过的PPT,多次使用了“忽悠”、“赚钱”、“免费”等常技术人员反感的字眼,但反响不错。 第三个主题是OpenERP二次开发演示,用一个培训课程对象完整演示了OpenERP的快速开发能力。Joshua毫不紧张,半小时内有条不紊地逐个实现了9条预定的需求。赢得满堂赞许和惊艳。 这次演讲很成功,之后还会找更多机会向技术人员展示OpenERP,鼓励他们加入社区,共同把蛋糕做大!

April 08, 2012

Shine ITOpenERP中国社区,该是什么样?

牧师问上帝,天堂与地狱究竟有什么不同?上帝于是请牧师前往观看。首先来到地狱,那里的人正在吃饭,一群人围着一桌子美味佳肴,却个个饿得面黄肌瘦、痛苦不堪。原来每个人手里的勺把都太长,以致于他们再怎么尽力往自己嘴里送也无济于事,但每个人依然挣扎着只顾自己。 上帝接着领牧师来到天堂,天堂里的人同样用长把勺子吃饭,不同的是他们双双结伴,每个人都把自己勺子里的东西往别人口里送。这儿的人一个个神情欢悦、健康丰满,整个天堂充满友爱和温馨。 上帝说,天堂与地狱其实就这一点点区别。

March 29, 2012

Shine ITOpenERP v6.1新特性解读 (三) 技术

内核优化 原来的osv_memory(现在名为TransientModel)做了很大改进,现在已经是一个特殊的普通osv(现在名为Model),这意味着它确实存在数据库里面,但是它会在使用过后自动删除(例如某个统计计算完毕或者某些记录已经创建了)。这个改进有以下好处: 底层代码只有一个,更容易维护。 具有相同的模型,这意味着约束(例如外键)都是可执行的 更好的性能,数据库几乎完全是无状态(仍然有一些缓存) 支持WSGI,可以在一个兼容WSGI的服务器上运行OpenERP server,再加上OpenERP几乎无态的特性。这意味着你可以在WSGI服务器上运行多个服务器进程:你终于可以用尽你的多核CPU!例如用 Gunicorn ,一切的维护都变得简单了,Gunicorn 将监控者进程。例如杀死一个已经挂起的进程,防止内存泄露影响系统。 还有几件缩短创建帐套时间的改进:能高效率使用框架加载翻译并写入。另一个改进就是(转存和恢复)的帐套时候的缓存。这些都在OpenERP online上实际使用过。 在销售订单上做过性能测试: 安装一个新的英文帐套 安装一个新的带有语言包的帐套 再创建另外一个新帐套 从web客户端读取一个合作伙伴 一次读1000个订单 读100×10个销售订单 计划任务的多线程处理 现在每一个计划任务在后台都是生成一个线程,这样就不会因为一个计划任务在执行,就阻碍了另外一个计划任务的执行。实现了在负载均衡的情况下多个服务器执行多个进程,每个任务每次只会执行一次 Unaccent 消除法语那些上面的声调,启动server的时候使用 –unaccent(对于国内用户可能不怎么需要这个 ) 给开发人员 6.1的对象自动实例化了,不再需要显式调用 6.0.x class res_groups(osv.osv): _name = 'res.groups' _columns = { 'name': fields.char('Name'), } res_groups() class res_users(osv.osv): _name = 'res.users' _columns = { 'name': fields.char('Name'), 'group_ids': fields.many2many('Groups', 'res.groups'), } res_users() [...]

March 24, 2012

Oldrev如何汉化 OpenERP 6.1 日历视图

OpenERP 6.1 出来有个把月的时间了,感谢 OpenERP 中文社区的努力,目前 OpenERP 的各个模块中基本上没有了英文。

但是 OpenERP 6.1 的日历视图是一个 DHTMLX 公司出品的前端 Javascript 控件,跟后端的 Python 业务模块的翻译机制完全不同,所以到目前为止,在任何语言设置的 OpenERP 中都仍然保持着英文。虽然只是简单的 “Monday”和“April”之类的单词,但还是对整个 OpenERP 系统在国内的实施造成了一定的阻碍。

image

为了解决这一难题,通过 grep 的帮助,我在 OpenERP 的 dhtmlscheduler 控件的目录中找到了 locale_cn.js 的中文消息文件。通过这个文件我们可以知道,dhtmlscheduler 控件是支持多国语言字符串的。根据使用 jQuery UI 库的经验,造成日历视图没有本地化的原因很可能是 OpenERP 没有在其 HTML 页面中引入 locale_cn.js。所以,现在的问题就变成了找到 OpenERP 生成 HTML 页面的模板,然后加入对 locale_cn.js 脚本的引用。

根据上面的思路,通过 grep 我发现 OpenERP 6.1 的 Web 模块并没有使用传统的模板中引入 js 和 CSS 的模式,而是通过 __openerp__.py 文件的配置指定该模块所用到的 CSS、JS 等。

到这了,解决我们的问题就很简单了,直接用编辑器打开 openerp/addons/web_calendar/__openerp__.py,在系统原有的 ‘static/src/js/calendar.js’ 行上方插入:’static/lib/dhtmlxScheduler/sources/locale_cn.js’。整个 __openerp__.py 文件如下所示:

{
    "name": "web calendar",
    "category": "Hidden",
    "description":
        """ OpenERP Web calendar view. """,
    "version": "2.0",
    "depends": ['web'],
    "js": [
        'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js',
        'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js',
        'static/lib/dhtmlxScheduler/sources/locale_cn.js',
        'static/src/js/calendar.js',
    ],
    "css": [
            'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_ext.css',
            'static/src/css/web_calendar.css'
            ],
    'qweb' : [
        "static/src/xml/*.xml",
    ],
    'active': True
}

翻译以后的日历视图界面:

image

需要注意的是修改了 __openerp__.py 后需要重新启动 OpenERP Server,还需要清空浏览器缓存,否则会遇到 Javascript 错误。

Have Fun!


March 21, 2012

Shine IT从ERP系统中共享出来的界面

6.1的新特性,可以点击下面的按钮来生成一段代码然后放到你的网页上面就可以直接看到OpenERP的内容 这里是通过OpenERP共享出来的界面

March 14, 2012

Shine ITOpenERP v6.1新特性解读 (二) 模块

point_of_sale 新的轻触式POS模块: 是一个基于web浏览器的模块 支持离线工作 适用于任何平板器材上使用(ipod,ipad) 新功能: 可以通过条码阅读器、在屏幕上点选分类项或者直接点入名字搜索来选取产品 支持同时多单 支持多种支付模式 payroll 新的薪金管理模块包括一个通用的薪金管理引擎。 你可以很轻松地定制各种薪金的规则:如免税额,扣除额,净,税收,等计算数据。 薪酬结构:定义了一套规则通常适用于一类雇员。 合同通过合同来定义一些列的有关薪金的计算方式, 薪金计算:可以通工作天数和合同定制,以及各种保险公积金等计算出工资单,并可以批量打印 如此对于不同国家也可以灵活定制出自己需要的薪金模型。 Asset OpenERP V6.1包括一个完整的资产管理模块。其特点是: 支持多种折旧方法:线性的,渐进的…… 代折旧图或网格板 定期的会计分录自动生成 Portal 现在的门户模块只需点击几下就可以轻松把所需要展示的页面共享出来,而且有多种的共享模式 详细报告,敬请期待

March 13, 2012

Shine IT客户代销在OpenERP中的配置

OpenERP的库位设置非常灵活,能够实现很多特殊的业务流程。今天在项目中解决了客户的代销问题,这里分享一下。 需求: AMAZON销售,他们有一个特殊服务叫FBA, 简单流程就是如下。 比如,我们自己仓库收到鼠标 5000个,我 们发货2000个给AMAZON的仓库, 他们帮我们代卖(我们这个每天是没有销售总表的, 每月一次),AMAZON没隔14天给我们付一次 款,我们可以看见AMAZON仓库里剩下的鼠标有多少, 如果发现货没多少了,我们在发1000个过去,就这样轮回。我们平时也要定期查看鼠标的最小库存情况,但这个最小库存数字要和我们仓库内的数量加上AMAZON代销的数量之和来比较。 解决方案: 创建库位【代销】,作为【stock】的子库位。 创建仓库【代销】,并选择【代销】库位为入库和库存库位,出库库位选Output。 新建商店【代销】,并选择【代销】仓库作为商店的仓库。 每14天结算的时候,开具销售订单给AMAZON,商店选择【代销】,这样发货时就会减少【代销】库位的库存。公司向AMAZON发货的时候直接用内部移库单即可实现。这样最小库存设置在stock这个库位,计划运行时会检查其下的所有库位然后取合计数量决定补货。还可以把【代销】库位的产品列表放在库存board上,可以随时查看剩余库存数量。 完美!

March 12, 2012

Shine ITOpenERP v6.1新特性解读 (一)整体易用性、界面、移动性

就在OpenERP v6.1 来临之际。我们一起来看看V6.1 的Release-Notes。 更容易使用,更少配置 这个无疑是降低了OpenERP对于初学者的门槛,以前的版本已安装好了模块就会自动跳出很多的wizard配置窗口,用户需要一层层地配置。对于第一次安装的人来说,这就是很大的障碍,天啊,谁知道怎么配置呢? 新版本的配置向导大大减少了,基本上都是默认配置好了,特殊需要按需配置。不会再在创建新帐套的时候见到那些烦人的、无穷无尽的窗口。 新的many2one字段界面 可以直接在下拉列表里创建新对象,让弹窗尽量远离我们 更强大的Demo数据 例如当你安装了hr_evaluation 模块,他的demo数据已经自带多份评估表格,直接就可以打印出来 第三方的数据导入 SugerCRM 您原来使用SugerCRM现在想转到OpenERP?没关系我们有现成的模块 import_sugarcrm 可以帮你轻松导入数据 Excel etc. “我原来的数据存在excel中,怎么办?” “没关系”我们现在有更清晰的导入数据界面,更直观的导入界面可以,直接看到要导入的数据,在界面上调整各个导入列映射到的字段,新的导出方法可以令你将系统数据导出后修改后导入,系统会识别到你的修改或者增加新数据。 其他 订单进度条 通过这个,新用户也可以很直观地知道自己正在走什么流程。 清爽的模块安装界面 控制台 可以直接在控制台上点击新建,而且新版本的Falsh图示,支持中文。 给外部人员查看资料 给与会人员看会议日历 给客户随时查看在你这里的项目的进展 邮件系统整合更为完善 在OpenERP6.0,多个模块提供邮件功能这个使到用户感到困惑,不过在新的版本里现在统一使用,不在杂乱,不在麻烦。还可以通过thunderbird或者OUtlook来把收件箱的邮件信息推入系统。 现在只要的模块当中已经包含了默认的邮件样式,令初学者更容易上手 & EDI:发票,销售订单和采购订单的的B2B/B2C交流,电子数据交换 通过移动设备随时随地处理我们的业务 在OpenERP6.1中我们可以通过 http://localshot:8069/mobile 来访问移动设备界面

March 04, 2012

Shine IToecn_base_fonts 使用说明(解决v6.1,V6.0.x的PDF中文字体方框问题,支持CJK语言)

随着OpenERP V6.1 的推出,广大CJK编码用户还是遇到了以下字体的问题,报表的中文字体成了框框,怎么办呢? 这个字体问题可以通过安装oecn_base_font来解决,下面我们一起来了解下安装的步骤。 1.先从这里下载最新版本 http://apps.openerp.com/addon/6647?filter=%7B%22order_by%22%3A+%22click_counter+desc%22%2C+%22text_search%22%3A+%22base_fonts%22%7D&page=0 2.然后安装模块 3.CJK warp是中文字体换行处理,默认勾选。Original Fonts是系统里面需要用到的字体(一共有6种,一般需要全部替换掉),Replace Fonts 是你想替换成的字体(取自于OpenERP Server的系统内)。 4最后点击Apply,然后重启服务器。 大功告成。 如果感觉大家有什么提议,或者发现了bug可以直接在 https://bugs.launchpad.net/openerp-china/+filebug 提出,或者在这里回帖。谢谢

February 25, 2012

Shine IT只有行家才能看见开源软件的亮点

先安成立后把主要精力放在写一些模块放在launchpad上,带头翻译openerp新版本,用开源的方式宣传自己。这样做看起来很笨,很花精力而收效甚微,受众范围很小,可我们会继续这样做。因为这样符合我们的价值观,是公司成立的初衷。 我们赚钱是为了支持我们自己做更多这样的事情。 我之前写过一些文章,个人认为OpenERP的主要竞争对手是那些从头开发管理软件的小作坊,而推广的方向是那些ERP行业内的专家。当这些人已经在其他ERP软件的现有约束中寻求突破时,开源软件给他们提供了一个更好的选择。 没有这些约束,谈OpenERP是无力的。有些我们认为的亮点在外行眼里看似可笑的(比如鼓励客户把自己的修改部分开源)。原因不在于我们有一方犯了偏执的错,而在于这种没有基本前提的沟通本身就是浪费时间。和小软件比简单,和大软件比功能覆盖,和开发工具比灵活,和网站比易用,OpenERP都是注定失败的。可这并不能动摇我们对它的信心。因为开源软件建立在理性决策的基础上。如果你不喜欢字符界面的敏捷那linux你用不久。 ———–这里不知如何转折了,划一根生硬的分割线————- “ 现在OE国内二条路,一条JEFF的,客户主导,先安支持。总收费相对低。二:老肖和KING的,OSCG公司主导,相对总费用较高,但相对比较系统。” 网友的这个总结非常到位,说出了问题的本质。我们依据创业者不同的价值观走了两条不同的路,所以也规避了竞争,反而催生了一种共生的合作。他们会在宣传公司的时候推广OpenERP,别人深入了解OpenERP时又会知道先安。双方在社区里的分享和贡献可以共用,项目中可以取长补短地合作,这是我非常喜欢的状态。我想他们很快就会具备与现有主流ERP供应商同场竞技的能力,而我们则会靠我们的开放合作改变更多信息化从业者的生存方式。各尽所能,各取所需,无所谓对和错的。 所以先安不会像其他erp供应商那样靠营销取胜,拿案例说话,慷慨激昂激励客户做决策。我们会靠技术取胜,拿贡献说话,理性分析鼓励行家自己做决策。这符合我们的风格。 如果只有行家才能看见开源软件的亮点,先安会针对那些已经在使用或销售(商业版或自己开发)的ERP软件,但有些明确的改进意见很难实现,寻求自由选择的决策人做推广。对那些不知ERP内涵外延,项目投资回报还未理清的潜在客户,我们可能没有能力跟进。

February 23, 2012

Shine IT关于OpenERP培训

培训看起来都一样,会的人讲给不会的人听。但实际上是不一样的。 有些培训的目的是彰显讲师的能力,很多免费培训大都是这种。所以对听者的课前的预备知识准备、课中的参与度、课后的掌握程度评估都没有细致要求。结果往往是听的人都感觉到了讲师的深刻理解但自己其实没有学到什么东西。 有些培训的目的是教会学生,收费的培训大都是这种。要把为什么、是什么、怎么做、还有什么这四个象限讲全。课前课后有能力测评,课中有现场练习,练习后有答疑。每天有上一天的回顾。或者有学不会免费再学的承诺。这样的培训必须是按时间付费的,而且成本不能过低。否则无法保证真正有需求的人来听,听之前明确需求,听的过程中不被其他事情打扰,听之后有建设性的反馈意见。这样才能降低重修这个双方都不愿看到的结局。 这两种培训先安都会做。第一种免费在社区里做,就是为了宣传自己的能力。第二种收费在客户现场或培训中心做,就是为了把能力传递给别人。 这可能也是开源能够接受的方式。

February 21, 2012

Shine ITOpenERP 6的ODT和RML报表

正当大家迫切等待OpenERPV6.1来临之际,让我们一起来回顾一下6.0.x的某些特性吧。 例如OpenERPde1报表系统,在5.0.x版本时期,OpenERP的SXW2RMl这样的报表形式,相信大家都已经了解不少了,很多人都说他比较难以编辑。但是既然OpenERP是插件式的特性,那时候还有另外几套报表系统,其中一个就是Relatorio Report,通过odt2odt。但是在6.0.x其实本身已经内置了这样的功能, 现在的报表类型支持了pdf,html,raw,sxw,odt,html2html,现在我们可以直接编写一个sxw报表好像以前编写RML一样,然后在这个报表类型写odt或者sxw,就算是clac也可以通过强制改扩展名来实现打印,通过这样我们可以轻松做到一个报表多种打印方式。 例如在wizard添加这样代码: ...... _columns = { 'report_type':fields.selection([('pdf','PDF'),('odt','ODT')],'Rrport Type', required=True), } .......   report_ids = report_obj.search(cr, uid, [('report_name','=',report_name)]) report_obj.write(cr, uid, report_ids[0], {'report_type':res[0]['report_type']}) return { 'type':'ir.actions.report.xml', 'report_name':report_name, 'datas':datas, }  

February 09, 2012

Shine IT正在翻译OpenERP6.1

翻译的过程是全面了解openerp功能的最好时机,可惜时间不够用不能慢慢品味。 先保证最低质量要求 —— 没有英文。

February 04, 2012

Oldrev2012 年计划

业务、技术、工作相关:

  1. 年底前至少做 3 个项目。
  2. 两个方向:
    • Crossover:异构系统的集成,比如 Linux 上的 OpenERP 使用 ActiveDirectory 单点登录。
    • Duet:高可用系统的安装配置,比如 SQL Server 的发布/订阅,PostgreSQL 的热备、流复制、同步复制等。
  3. Slipstream 项目年年中之前实现一个比较完善稳定的版本。
  4. 主要精力都放在业务建模、业务系统的设计开发上,包括业务系统的开发、技术、项目管理等。
  5. 做一个 Javascript 的有限状态机工作流设计器(最低优先级)。

学习:

  1. 英语不能落下,每天背单词看语法。
  2. 看至少15本比较薄的书。
  3. 年内基本掌握 HTML5/CSS3 的移动开发,特别是 jQuery Mobile 和 DHTMLX Touch,通过给 OpenERP 做个餐馆点单模块练手。
  4. 保证一个月至少两篇博文,如果没有什么想要和全世界分享的东西那说明没有认真的思考,所以写博是必须的。
  5. 与商业相关的机器学习算法,特别是补上人工神经网络、退火算法等的课。

其他:

  1. 没事儿可以用 n-back 之类的软件练练脑子,改善记忆力。

最后也是最重要的:控制网络阅读的时间,少吃多运动。


February 03, 2012

Shine IT如何掌握一个OpenERP模块

第一步,翻译这个模块的文本 第二步,安装,并查看加了哪些菜单,逐个点开运行,输入示例数据(仅针对那些有插删改权限的数据) 第三步,读源代码。关注methods,特别是write()等内置方法。 跳过第一步,有些隐藏的功能你在界面上测不到 跳过第二步,代码那么多你不知道哪里是重点 跳过第三步,知其然不知其所以然    

January 22, 2012

Shine IT2011年度总结

去年春节,我定了个2011年年度计划,没想到这么快一年就到了。回顾这个计划,发现完成情况并不乐观,但总结是必须的。即使没有经验可以分享,分享些教训也是有益的。 1、反馈官方,孵化一个Top Contributor。 现在看起来,这个计划有些激进了。官方这一年把主要精力放在6.1版本的开发上,对community的意见和贡献重视不足。由于今年有5.0和6.0两个版本,社区力量比较分散,整体上来说都没有跟上官方的节奏。相信明年大家一起玩6.1情况会好很多。 2、模块专家,分析100个模块的功能、源码,完善中文翻译和撰写在线帮助。 完成了5.0版本57个模块的功能分析。针对源码的分析还是只有partner这一部分。6.0的中文翻译在7月份由云团队组织了一次集中翻译,后来就没有进一步修正。在线帮助写了84页。 3、云实施团队,收入达到100000元。交付周期/承诺周期 2。团队人数10人。 云团队这一块,我个人还是比较满意的。全年收入是34700元,其中5400元捐助给openerp-china网站(余额2967.60元),其他用于支付给云团队成员。很多人是第一次用支付宝或财付通收款。虚拟团队的运作方式得到了很多人的支持,积累的代码也都放在googlecode上成为后续开发的参照示例。交付时间上一般卡在客户测试和确认上,往往一个模块交出去又涉及很多次变更修改。但截至目前我们已经能保证在承诺的估算时间内交付第一版。团队人数核心成员还是我和Joshua两个,过程中参与的还有另外6个人。总体来说云团对这块工作达到了预期目标的一半,毕竟我们在扩宽开源生态圈这个事情上有了个可行的开始。 有些计划外的事情发生: 1、大家都有了自己的公司。Eric招聘了两个专做OpenERP的员工,申请了openerp.net.cn域名;King和老肖合资成立了开源智造,下设香港和上海两个子公司,Jeron也招聘了一个美国人。校长和我在年底也成立了上海先安公司,招聘了第一个员工Joshua。 2、openerp book陆陆续续有人参与翻译,现已完成30%左右。developer book由北京邮电大学的研究生集中翻译并贡献给社区,正在逐步校对和完善。 3、openerp6.1RC版终于在春节前发布,web界面全部重写了,还新增了适应POS的触屏界面和适应手机的mobil界面。 4、收购了qq群。

January 18, 2012

Shine IT升级MediaWIKI

建立openerp-china.org的时候选了几个wiki平台,最后还是觉得用mediawiki最靠谱。但当时的最新版本在我的虚拟主机上不支持,有一个设置环境变量的函数被服务器禁掉了,不能装。记得当时wordpress也是因为这个装不了。最后在allwiki上找到了mediawiki – 1.9.0中文版,试了一下可以安装的,一直用到现在。 最近很多新人加入社区,也都有自己习惯的博客空间。一直想做一个博客聚合。可惜planet是python脚本,我的php空间玩不了。找了些替代品性能都不太理想,在huihoo上看到他在wiki里做聚合,速度也不错。就装了这个RSS插件。如何折腾都不工作,怀疑是版本问题,决定升级。 现在最新版是1.19,按经验不追新,用1.18。看了看中文的和英文的升级说明,都是含混其词。决定采取第三种方式,重新安装。用新版本的文件包覆盖了旧版本,执mw_config下的安装。好像还挺顺利,发现了我的旧版数据库,开始做数据库升级。马上报错,说没有找到charset mysql4。奇怪怎么会有这个charset名字,google发现这是mediawiki的一个bug,解决办法是把include/db/DatabaseMysql.php中的有mysql4那一行改为utf-8。再次安装,解决!连到首页,现在是mediawiki默认的皮肤了。登录,把自己的皮肤改为oe6,就一直报错了。 Fatal error: Call to undefined method Skin::makeglobalvariablesscript() in /www/users/openerp-china.org/wiki/skins/oe6.php on line 72 原来从1.18开始这个在皮肤里很常用的method被去掉了。把这句注释掉就可以了。 由于没仔细看报错,一直在改另一个文件,怎么都不成功。2个小时,白扔了。 终于皮肤正常工作了,发现条目上多了很多语言按钮。配置文件里把默认语言改为 zh_CN,默认皮肤改为 oe6,这下好多了。 升级完毕,这次升级从1.9到1.18跨5年的版本,只碰到两个错误,赞一下mediawiki! <discussion>、<gallery>、<mp3>、<nowiki>、<pre>、<progressbar>、<rss>、<source> 和<swf> 都可以用了,新版果然威武。    

January 11, 2012

Shine ITSAP质量管理QM模块学习笔记

由于项目需要,周二在公司参加了一次SAP QM模块的培训,简单做个记录。希望对OpenERP的质量管理模块定制提供些思路。 QM在SAP中是一个单独的模块,它的特点是与其他业务模块紧密集成。当然,集成点都在物料凭证上。对应的业务有:(MM)采购收货的检验、(PP)生产线上的检验(非物料凭证,用的是工序)、(PP)完工产品的检验、(SD)发货前的检验、(PM)项目成果物的验收以及(CO)废品成本的归集和分配。 QM模块的主数据很多,有7个: 1、Catelog,其中有代码、代码组和选择集。用于设置检验标准。 2、检验方法。这是一个文本标识,基本上没有控制项。 3、主检验特性。就是检验的项目。可以分定性的指标或定量的指标。 4、抽样决策。针对抽样的需求做设置。 5、检验计划。首先确定这个计划用在什么地方(usage),然后定义检验过程,在检验过程里涉及哪些主检验特性。还可以设置质量控制点。 6、物料。物料的质检视图里有“质检设置”这个字段,设置质检类型,并与检验计划建立联系。 7、质量信息记录。针对特定供应商,可以设置不同的质量标准甚至免检。 SAP中定义的质量工作流程是: 1、产生检验批(手动或自动)。 2、结果记录(判定良品和不良品,缺陷原因)。 3、使用决策(使用决策代码,并发货过账)。就是说这批产品有几个合格的,有几个不合格的。不合格的怎么办。是现状使用、退货还是计入费用。 这个模块常见的开发需求是质量证明书的打印,因为涉及十几张数据库表,而且QM模块会的人不多,所以开发有一定难度。 ======================================= 第一次听QM模块,感觉工作流程还算清晰,主数据真是很繁琐。每个主数据都有上百个字段,很多还可以在后台细化配置。这些字段相互组合后得到的结果都是不一样的。SAP就是这样,用前后台界面上的一大堆字段来组合决策,适应不同企业的个性化需求。 OpenERP则是另一种思路。核心模块中自带的每个对象只有必须输入的几个字段,如果有个性化需求可以通过二次开发或者在method里改逻辑或者在view上加字段。这样就保证了核心系统的KISS原则,又能轻便地满足个性化需要。系统理解起来也容易,底层代码可以自描述。而SAP那么多字段那么多种组合方式,文档只能用浩瀚来形容了。很多字段你永远也不知道它存在的意义。

January 09, 2012

Shine IT上海开源爱好者大会记

Pycon上的演讲虽然没有什么反馈,但令我意识到了在此类集会上宣传OpenERP的必要性。所以在1月7日的上海开源爱好者大会上又申请了一次演讲。 下午1点半到场,发现现场有不到100人,徐博士在和那两个忽好忽坏的麦克风斗争着。前排就座的大部分之前见过,但之前没有名片,于是前后乱窜开始发名片。发名片过程中被一个搞嵌入式开发的小伙子拉住闲聊,他说可以看看是不是能把OpenERP装在他们做的单片机盒子里。本来挺想和二工大的老师和学生沟通一下的,不过感觉他们聊兴不高。后来也一直没找到机会。 听了一下锐道和爱可生的演讲,感觉锐道没有什么新思路和突破点,java的开源框架太多了,您这个半遮半掩的源码只读靠什么吸引人参与,而且网站收费,还是个问题。爱可生的生意不错,Mysql用途广泛,基于此做服务会有很多质量较高的单子,不错。 然后去厕所吸烟,遇到一位老板,做IT运维管理软件的,类似ITIL,说想把他们的东西一部分开源出来。我问他这样开源对企业有什么好处?他说其实没想好,可能一个商业产品开源免费能迅速扩大装机量吧。我说开源主要是针对程序员来宣传的,其实今天这种场合您看来了这么多学生和开发者,实际上大家对演讲内容关注度并不高,今天听完明天可能就忘了。何况你我做的这东西专业性还比较强,不是一两句话能说清楚的,完全不懂的人进来玩也玩不出什么结果来。其他场合也大体如此,中国的开源环境基本上还是很不成形的。了解到他的产品自带二次开发平台,合作伙伴可以在此基础上开发针对特定行业的解决方案,我建议他把一部分现有的解决方案软件包开源出来,用开源的推广和协作优势帮助企业扩大合作伙伴数量,从而销售培训和底层的服务器和中间件(非开源部分)。他说具体如何运作还有很多不明白的,想找个对开源的组织运作熟悉的人帮忙,我说这个社区经理可遇不可求啊。建议在社区里慢慢发现和培养,靠招聘估计是不行的。 吸完烟在会场绕了绕,和Joshua猜测可能宁波的ted会在我演讲后来找我。然后接到一个电话,某云计算公司副总,约我到会场边私聊一下。说是他们有个产业园,园区企业也要用ERP,而且他有个朋友是微软的,做了个SNS系统非常牛。他希望做这个SNS和OpenERP的SAAS给园区企业用。我每次听说谁要做OpenERP的SAAS都热情鼓励他,反正我自己不做。他说他的想法是他要改变传统ERP的操作方式,希望在SNS里发一条微博就能触发erp里的一个单据流程。企业用户只要每天发发微博就把数据录入OpenERP了,老板进去看到的报表当然是传统方式的。想法很大胆,但实际上这种微博如果按规定格式输入,像email集成一样,技术上不是问题。我要他筹备好以后跟我联系详谈。估计不靠谱,一周后他肯定有更超前更大胆的想法,就把我给忘了。政府都是这样的。 然后参与中间的互动环节,拿着那个经典的开源logo图辨认是哪个项目的logo。我和后面的小伙子联手猜出来18个,但没去拿奖品。 互动后就是我的topic,可是之前没有日程表,我们电脑还没开机呢,然后又搞了半天连接投影仪。大会只给了我5-10分钟,我草草地讲了一下之前的那个 PPT,还有两个人提了问题。一个问题是关于行业化的深入,我说现在国内客户量不大而且很分散,还没有整理行业化解决方案。国外的行业化经验主要掌握在合 作伙伴手里,有些没有提交给openerp项目。现在的行业化模块主要有食品和生产两个行业。 从台上下来立即被一个帅哥抓到互换名片,他说他是SugarCRM的合作伙伴。我问了他两个问题: 1、Sugar是卖商业版权的,他们这些合作伙伴在国内现在主要是帮Sugar卖版权还是用社区版给客户做项目。他说是后者,没办法。 2、公司现在多大规模,他说很小,10个人左右。我汗颜了,说我更小。 然后后面奔上来一个人一边叫Jeff一边来和我握手,我猜一定是宁波的Ted,拉他们去会场一角开聊。 没想中间插进个高个子,说他是莘庄一个食品公司的IT主管,自己开发了几年管理系统感觉越来越难维护,想试试开源软件,比如OpenERP。也为将来出来创业单干铺路。我说我们公司的合作方式是客户方主导项目,需要技术支持或者干活的从我这里买人,他说他怕没有掌控项目的能力,于是我给他留了老肖公司的网站地址。这单谈成了我再找老肖请吃饭。 Ted是做条码设备和相关系统的,想用OpenERP做一个条码设备的输入输出系统,可以与企业现有的ERP做接口,也可以对没有进销存的公司直接推广OpenERP。条码打印驱动这里的需求比较特殊,要把打印命令直接发送给打印机,不走pdf。我的建议是先找到意向客户把单子签下来,有了资金支持和工期压力,我们就可以投入人力研发或者找外援支持。做了几个类似需求之后再整理通用打印模块形成技术积累。 短短4个小时,我基本上没闲下来,一直在发名片和聊天。以人力外包为主业的思路继续强化和求证。我们可能会输掉几次战斗,但我希望OpenERP的同仁能摸索出最好的合作方式在中国的企业信息化市场上打赢这场战役。

January 05, 2012

Shine ITOpenERP6.1初体验

今天正在画报表,我服务器上的openerp6.0总被同事重启,说是在搞自动启动与集成测试系统buildbot集成。一怒之下我决定另外下载一套源码。既然是用来开发测试,那就试试6.1吧。下载了2012年1月4日的nightly build版本,哦,src目录下只有一个gz包。下载下来解压缩,gnome下告诉我127M,解压需要9小时。。。进入终端,tar命令用了6秒就解完了。太快了,不敢相信,进目录看了下,addons一大堆,好像挺正常。 系统里已有的6.0把8069、8070、8080都给占了,直接安装肯定不行了,源码运行,必须的。找了半天没找到openerp-server.py文件。半小时以后,发现官方把这个文件的扩展名给去掉了。折腾!一番偷梁换柱,用 -c 参数整出一个配置文件,数据库用户名密码和网络端口全改完,启动成功,有个报错。说没找到web模块,说我addons目录下没有web模块,这改动够大的。检查一下它乱说,addons目录没错,web目录没错,错在wsgi没启动成功。 wsgi,新东西,sudo easy_install Werkzeug,继续报错,sudo easy_install python-openid。两个模块装完报错全消灭,server完全启动了。奇怪的是,还没装数据库,就加载一大堆模块了。不管他,开始猜web的端口。web模块下没有配置文件,server的配置文件也没有http字样,猜不到。 问了一位高人,web端口是那个xmlrpc_port,我这里9069,访问成功。不容易啊。 登陆界面变化很大,数据库选择框在右上角,选个6.0的数据库,登录,报错,说module_module表缺一个sequence字段,这么底层的修改,看来6.1是不兼容6.0的数据库的。不知道这次是给升级脚本还是主推升级服务。我新建吧。 建好数据库,没有跳出配置向导,直接进入模块的dashboard,热切地勾引你点击每个模块的安装按钮。不理他,进settings菜单(原来叫系统管理)又是dashboard。玩了一下修改layout,一栏、两栏、三栏区别也不大。配置步骤变链接了,点一下就跳到对应的界面。不像6.0那样过分热情了,不错。我喜欢做减法。 web界面的中文翻译还没有正确加载,按钮都还是英文。还要重新定位问题所在位置,继续提patch。 只读模式的many2one字段点了以后全屏打开对应对象,比6.0的弹窗方式更易用了。 链接变成了类似 http://demo.osbzr.com:9069/web/webclient/home#id=1&view_type=page&action_id=27这样,比6.0清爽了,但还是不如5.0直观。个人认为action_id不如model name有用。 6.0里中文日期格式引起的日期字段和日历控件的错误在web上没有了,不知gtk怎么样。 看了一下已安装模块列表,只有一个web_process,看来base、web这类的底层模块都不会列给最终用户了。反正谁也不会淘气卸载它,也好。 看了一下我最关注的帮助按钮,仍然沿用6.0的方式,出来四个按钮,一个process下拉框,点【选择】按钮显示process下面才会出现按钮【显示字段】。就是说,一般来说,最终用户在界面上对某个字段有疑问,要点三下鼠标才能看到一些很技术化的信息。实际上这个界面上最有用的就是那个【阅读在线文档按钮】,只是它已不再是醒目的红色了。我还是喜欢5.0里的方式,一个蓝色按钮点完就打开在线文档对应这个对象的部分,很直接。这才是online help。 嗯,简单玩了一会儿,有点儿喜欢新版本,运行好像比6.0快了一些。期待测试版发布。 多了个新的界面 kanban

Shine IT详解Windows下用OpenOffice3.3-Base通过ODBC方式访问OpenERP的PostgreSQL数据库

文件由 大连-提供,友情转发 详解Windows下用OpenOffice3.3-Base通过ODBC方式访问OpenERP的PostgreSQL数据库

December 26, 2011

Shine ITOpenERP手册:会计工作流程和自动创建发票

原文:http://doc.openerp.com/v6.0/book/3/3_7/accounting_workflow.html 翻译:北京-阿飞(724291658) 校对: At regular intervals, and independent of the invoices, an automatic import procedure or a manual accounts procedure can be used to bring in bank statements. These comprise all of the payments of suppliers and customers and general transactions, such as between accounts. 每隔一段时间,这些独立的发票,系统自动导入或人工记帐处理,将发票带入银行对帐单中,这部分包括供应商付款和客户收款及一般交易,比如往来帐。 When an account is validated, the corresponding accounting entries are automatically  generated by OpenERP. 当财务记帐确认时,OpenERP将自动生成与之相对应的会计科目。 Invoices are marked as Paid when accounting entries on the invoice have been reconciled with accounting entries about their payment. 当发票的帐务处理的信息与对应的付款记录经过对帐确认,发票将被标记为已付款“paid”状态。 This reconciliation transaction can be carried out at various places in the process, depending on your preference: 这些对帐工作取决于你个人的偏好,将可以在处理过程中的各环节进行: at data entry for the accounting statement, manually from the account records, automatically using OpenERP’s intelligent reconciliation. 在数据录入进会计帐单时, 在财务记录中手工对帐时, 使用OpenERP智能对帐功能自动的进行对帐。 You can create the accounting records directly, without using the invoice  and account statements. To do this, use the rapid data entry form in a journal. Some accountants prefer this approach because they are used to thinking in terms of accounting records rather than in terms of invoices and payments. 你可以直接生成财务记录,而不需要发票和财务帐单。完成这项工作可以通过分类帐的快速数据录入。一些会计人员更喜欢这样处理,因为他们相比依据发票和付款记录更习惯于依据财务记录进行处理。 You should really use the forms designed for invoices and bank statements rather  than manual data entry records, however. These are simpler and are managed  within an error-controlling system. 你应该真正的使用对应的发票和银行对帐单的已设计好的表单,而不是手工的录入记录。不管怎样,这样做将更简单,同时可以通过系统的错误控制功能对其进行管理。 Records-based Accounting System 基于财务系统的记录 All the accounting transactions in OpenERP are based on records, whether they are created by an invoice or created directly. OpenERP中所有的财务的帐务处理都是基于记录形式的,不管是根据发票生成的或自动生成的。 So, customer reminders are generated quickly from the list of unreconciled entries  in the trade receivables account for that partner. In a single reminder, you will find the whole set of unpaid invoices as well as unreconciled payments, such as advance payments. 因此,通过合作伙伴的应收帐款中的未对帐的记录列表,可以快速的生成客户催帐提醒。另外你可以找出所有的不但是未付款状态而且是为对帐的发票的付款记录,比如预付款。 Similarly, financial statements such as the general ledger, account balance, aged balance (or chronological balance) and the various journals are all based on accounting entries. It does not matter if you generated the entry from an invoice form or directly in the invoice journal. It is the same for the tax declaration and other statutory financial statements. 同样的,诸如总分类账、账户结余、过帐期的结余(或称为按年代顺序排列的结余)和各种日记帐这些财务报表都是基于会计分录的。不管你是通过发票形式录入或直接通过发票分类帐产生的,这些都将使用相同的纳税依据,同时在其他的法定财务报表中体现。 When using integrated accounting, you should still go through the standard billing process because some modules are directly dependent on invoice documents. [...]

December 23, 2011

Shine ITOpenERP 导入翻译方法

新建一个OpenERP帐套,如果你开始的时候没有选择中文。如果你下载的是6.x的版本,在社区的协力之下,我们搞出了一个基本稳定的翻译版本。(当然翻译仍然有不足之处,您可以直接上launchpad上修改,或者给我们提出,那么相信OpenERP说中文会越来越流利。) 你可以通过导入一个官方翻译来实现。 然后就要更改你这个登陆用户的默认语言,例如这里选为简体中文,然后就重新登陆。 选择中文然后重新登录,如无意外你的界面就变成中文的了。(在6.0.3的版本下这里有bug,可能会出现错误) 这里我稍微说下OpenERP的翻译原理,他是通过每个模块里面的i18n文件夹里面的po文件来进行翻译的。如下图: 这些就是翻译文件,名字就是语言的编码,我们一般中国大陆简体中文就是zh_CN.po,台湾和香港的繁体分别是zh_TW.po、zh_HK.po。你可以通过文本编辑器打开或者专用的po编辑工具也行,不过注意不要用windows自带的notepad,否则可能会造成错误。 po文件内容结构如下(省略了头部的那些编码,修改人等相关信息): #. module: purchase_requisition #: field:purchase.requisition.partner,partner_id:0 msgid "Partner" msgstr "Partner" 1.翻译字符串在哪个模块里面。 2.翻译的字符串是属于什么类型例如这里是field 可参照源码里的这些 TRANSLATION_TYPE = [ ('field', 'Field'), ('model', 'Object'), ('rml', 'RML (deprecated - use Report)'), # Pending deprecation - to be replaced by report! ('report', 'Report/Template'), ('selection', 'Selection'), ('view', 'View'), ('wizard_button', 'Wizard Button'), ('wizard_field', 'Wizard Field'), ('wizard_view', 'Wizard [...]

December 22, 2011

Shine ITOpenERP手册:从发票到付款

原文地址:http://doc.openerp.com/v6.0/book/3/3_7/index.html 翻译:北京-阿飞(724291658) 校对: 本章将继续介绍OpenERP中的基础财务处理流程,从录入发票到付款登记,将描述各种业务情况,从登记财务入帐到处理帐目核对过程,包括付款指令。帐务处理是一家公司的核心:公司的所有运营情况都将在财务帐上反映,他扮演了一个信息中心的角色(公司有多少现金?有多少负债需要偿还?存货的估价有多少?)而且,因为能够提供这些信息,这样一个可靠的详细的帐务系统,能够扮演一个提供公司主要的经营管理决策信息的角色。 在大多数公司,会计帐提供仅有的法定报告,是公司管理层某些战略决策的依据,同时系统能够打印出一年中多个时间点的资产负债表和的损益表。注意:评估你的财务处理功能在一些小公司,财务处理仅仅是简单的记帐功能。你不仅看到单据在系统中需要输入2次,而且往往只是将这些法定单据,用于每个月底结帐日时定期打印资产负载表和损益表。 相比之下,如果将你的财务整合到你的管理系统,你将能够获得: 减少数据录入工作 - 你只需要录入1次即可; 你将通过财务管理手段实现你的提高利润的愿望:例如,在项目管理、商业谈判和预测现金流; 当你需要时你能轻松的获取重要的信息,例如你要查看一个客户的信用状况。 因此财务帐通常没有被有效利用,如果将这些信息集成到管理系统中,这些信息能够为公司的运营发展提供非常有效的手段。财务信息实际上是你提高公司整个经验管理水平所必须的,例如: 当你准备给你的客户报价的时候,最重要的是了解客户明确的财务状况,以及查看该客户历史的所有延期付款的记录。 如果某个客户超出了他的授信额度,财务系统能够自动的停止对该客户的进一步交货。 如果某个项目已经使用了80%的项目预算,但该项目仅完成了20%,你需要和你的客户重新谈判,或者检查和控制你的项目目标。 如果你需要提高贵公司的现金流,你可以计划将你的服务项目增加基础的费率(票据贴现率),以及将所有的项目增加付款条件。这样不仅能够缩短供货周期,而且你可以专为需要加快进度的用户项目上优先研发项目,例如: OpenERP的一般财务处理和财务分析需要将所有的应用模块紧密的集成到一起,此外,交易,动作和实时发生的财务分析,这样你不仅可以监控各种情况,也可以有效地进行管理。OpenERP的财务模块包括了一般财务记帐处理、财务分析、辅助财务和预算财务处理,他支持复式记账、多币种、多公司(集团财务)注意:账务处理一般记账处理(即财务会计)他能够识别公司的资产与负债,他采用复式记帐法,即保证所有的交易在记录贷方的同时记录到另一个借方科目下,他是以资产与权益平衡关系作为记账基础。 财务分析(即管理会计或成本会计)是一个独立的财务系统,他能够反映一般帐目信息,但是更主要的是满足公司经营管理的需要的维度。 辅助财务反映了公司与客户和供应商的往来帐的详细信息。 预算财务指预先定义的资源分配的预期,通常在一个财务记帐年度的开始 提示:多公司 OpenERP集成了多公司环境的处理方式 如果不同的公司之间只有少部分资料是一致的(例如产品、合作伙伴等任何OpenERP中的资源),你需要安装独立的数据库。 如果不同的公司之间共享大部分的资料,你可以在同一个数据库中注册他们,同时安装OpenERP的多公司资料,以精确的管理访问权限。 你能够在不同的数据库中同步指定资料类型,使用“base_synchro”模块。 将财务和其他模块集成到一起最大的优势就是避免重复录入财务凭证。所以在OpenERP中,可以根据订单自动生成一张发票,同时这张发票将自动的生成会计分录,然后依次可以生成计税依据、客户催帐等等。如此强大的功能整合能够使你: 减少数据录入工作 极大的减少了许多数据录入的错误 及时获取信息让你能够快速的响应(对所有业务单据的预警) 使得你能够及时的控制公司经验管理的各个方面 提示:对财务人员 你能够使用配置向导提供的信息,配置你的财务应用。 通过适当的权限管理,允许受托人(有权限的用户)能够实时获取这些数据提供给客户,同时也能够根据非财务记帐信息提供的一些资料中发现商业机会,例如做预算。 同时也能够提供一项增值服务,可以极大的改善用户和他们的客户之间的交互。 所有的帐务处理使用默认的币种(根据公司信息设置时定义的参数)记帐,但是所有的帐务处理和/或交易都能够使用第二币种(即财务科目中定义的),支持多币种处理的价值,在于满足2个不同币种之间的进出口贸易业务。 从本章开始,你应该开始使用一个包括演示数据的全新数据库,其中含有销售管理模块和一套普通的会计科目表。

Shine ITOpenERP手册:发票处理流程

原文地址:http://doc.openerp.com/v6.0/book/3/3_6/invoice_payment.html 翻译:北京-阿飞(724291658) 校对: 在OpenERP中,发票的流程非常简单,你可以看下面的流程图: 发票可以通过多种方式生产,例如:销售订单、采购订单以及确认过的运单。这些方法将在你使用OpenERP做真实的帐务处理时用到。 当然,有些公司会选择请外部的会计人员(会计师事务所代帐)帮助管理他们的帐务,那样的话,你将更希望知道哪些发票已开或已付款。 OpenERP中特有的和易用的发票系统允许你将其与你的帐务系统保持联系,甚至在你没有自己的财务人员的情况下。他提供简单的方法跟踪你的供应商和客户。你可以使用这种简单的帐务处理方式,当你(或外部)的帐务人员记录你的帐簿时,同时你将更喜欢将付款与其关联。发票系统包括收款凭证和付款凭证(这2种凭证的产生与你的销售和采购业务相关联) 以及付款登记,系统将自动生成记账所需要的完整摘要。   《未完待续》

Shine ITOpenERP手册:客户开票和付款

原文地址:http://doc.openerp.com/v6.0/book/3/3_6/index.html 翻译:北京-阿飞(724291658) 校对:Jeff OpenERP提供多种功能让您的发票和付款建立关联。简单的发票处理和高效的收款流程,提高了openerp的适用性。在本节中,我们将讨论以下两种流程,非财务人员可以只是简单的保存住与客户的支付记录,也可以依据会计准则及税法进行完整的会计帐务处理流程。注意以上是与客户的处理过程的描述,OpenERP对供应商提供同样的发票和付款的关联方式。

Shine ITOpenERP手册:管理你的帐务

原文地址:http://doc.openerp.com/v6.0/book/3/index.html 翻译:北京-阿飞(724291658) 校对: 当财务与管理系统集成,财务系统能够为公司的经营管理提供更好的帮助,能够提供财务状况报告。这部分涉及财务的实际问题,以及财务在整个公司的中的作用。 OpenERP的财务模块,使您不仅可以管理您的业务情况,以及发票和付款处理流程,而且还可以通过对各种实时数据和近期的历史数据为基础进行分析,提供财务决策分析功能。 可以从头至尾配置贵公司的财务结构,以满足贵公司的需求。

December 19, 2011

Shine ITOpenERP v6.x新特性 multi addons path

近期用了pxgo_openoffice_report,感觉这个还不错,等以后有机会向大家介绍介绍。 在使用的过程中,发现了一个bug,就是有个地方需要读取Yaml文件的时候,文件的地址在多addons path条件下会出错的。 代码如下 - search_paths = ['./bin/addons/%s' % filepath, './addons/%s' % filepath] + search_paths =[add+'/'+filepath for add in os.path.abspath(config['addons_path']).split(',')] 原来他是写定了一个地址,但是如果我的addons-paths下就出错了。 multi addons path 正是OpenERP 6.x的新特性,这个特性可以方便的管理多个addons,这样给开发的版本控制带来了更多方便,例如我的base模块是放在oe/server/bin/addons下,普通addons 放在oe/addons-trunk 下,而extra-addons则放在 oe/extra-addons-trunk下,我自己编写的放在 oe/my-addons下. 那么在配置文件里面应该该这样写 addons_path=oe/server/bin/addons,oe/addons-trunk,oe/extra-addons-trunk,oe/my-addons

December 14, 2011

Shine IT在launchpad上工作

www.launchpad.net 第一步,用open id 登录到launchpad,我用的是hotmail邮箱。 第二步,新建一个自己的项目,openerp-china 第三步,在这个项目里新建一个代码库 第四步,用ssh生成自己的私钥和公钥,在自己的用户里输入公钥。 第五步,安装bzr 第六步,新建一个目录,bzr init,放一个文本文件并bzr add进去,bzr commit,然后push到lp:openerp-china上

December 08, 2011

Shine IT实施方法论 之 初次会面

第一阶段 初次接触(半天到一天) 简介 双方的初次接触是双方建立初步印象的机会。是个商机么?值得投资么?等等。此处的目标是展示产品的价值、方法的数量,并显示OpenERP可能带来的管理提升。   提示:如果你有很多质量还不确定的线索,要知道该线索对产品有多关注,最简单的办法是把他请到你的办公室见面,而不是到客户那里去。   目标: 帮助客户下决心 推销需求调研服务 负责人:销售员   提示: 1)不需要是销售经理出马,手下的某个销售员就行。 2)对于关键的销售线索,销售员可以和一位项目经理同往。重要的是,销售员主谈,项目经理只是回答有挑战的问题。   初次会议 这个阶段的重要步骤是初次会议,一般包含以下内容: 1)客户自己的介绍 – 仔细听 2)介绍你的公司和产品 - 幻灯片 - 在线展示OpenERP 3)询问客户的业务和需求 - 公司描述 4)讨论实施方法论和下一步计划 - 实施方法论的幻灯片   成果 会面之后的几天内,你要把以下文档发给你的经理: 1)初次会面会议纪要和需求调研报价 2)公司和产品介绍的幻灯片 3)实施方法论幻灯片

December 07, 2011

Shine ITOpenerp _inherit 继承测试(类继承,原型继承)

Openerp继承测试 OpenERP 的 _inherit 继承有两种实现方式,一种是类继承,另一种是原型继承 先创建三个模块代码分别是; test_inherit_a模块 class res_partner_a(osv.osv): _name = ´res.partner_a´ _inherit = ´res.partner´ _columns = { ´partner_field_a´:fields.boolean(´Test field a?´), } res_partner_a() test_inherit_b class res_partner_b(osv.osv): _name = 'res.partner_b' _inherit = 'res.partner' _columns = { 'partner_field_b':fields.boolean('Test field b?'), } res_partner_b() test_inherit_c模块 class res_partner_c(osv.osv): _name = 'res.partner' _inherit = 'res.partner' _columns = { 'partner_field_c':fields.boolean('Test field c?'), [...]

December 03, 2011

Shine IT关于红字凭证回复服务社老李

http://blog.sina.com.cn/s/blog_55401c130100of45.html   10年前在我们公司内部开发的一个财务软件里碰到过这个问题。当时那个软件是一个老程序员设计的,没有红冲的概念,错账纠正只能用相反分录。正常运行2年没问题,最后有一个月底我们的利润表有问题,发现了bug。 具体分录记不清了,试着描述一下。 我们知道出历史月份利润表的时候,月结已经做完了。也就是说那个月的某个费用科目借方和贷方金额相等了。而利润表要取本期发生数,也就是借方。如果你做了 相反分录,就虚增了发生额。当然,这个很容易想到,当时那个软件也考虑到这一点了。就是给原凭证和冲销凭证打标记,取数的时候同时忽略这两笔就好了。 但是会计上还有个操作方式叫部分冲销。我们那个会计这个凭证比较变态,7借1贷,其中只有一个借方后来因为内部管理问题被其他部门退回来无法走账,所以她就做了一张相反分录把这一借的数字冲掉了(因为省事)。 结果就是,剩下的那6借本来已经发生了,却在一张已经被冲销的凭证上。报表取数的时候没取他们,造成了报表不平。而且这个数字是两张凭证发生额的差值,无论是在凭证编号目录上还是在凭证查询界面中定位到它都不太容易。我们找了3天。 所以,当时那个软件的设计问题是,在凭证上打标记,还允许部分冲销。实际上如果标记打在凭证行上就行了。 有了负数凭证这个就简单得多,不要什么标记了,直接取费用科目借方数就行了。(我现在玩的OpenERP也是没有负数凭证的,不过报表取数的逻辑想清楚就不难搞定)。 推翻一个现有的设计不仅需要博主这样以科学论证的方式来思考,还要有充分覆盖的测试案例来验证。不知您最后采用的是什么方案,愿意继续共同探讨。

Shine ITPycon参会感言

今天是Pycon中国大会第一天,在线看了一整天。gensee的在线直播系统很给力,感觉它是这次大会的主角。开源的在线教室系统普遍不太给力,感觉这块市场很大。   因为是Pycon第一次在中国举办,演讲嘉宾都是python中文社区里著名的大牛。   总体的感觉是,python作为编程语言,只是一个工具而已。牛人之所以牛,不在于他用什么语言,而在于他专注于某个领域,并对这个领域的问题有深入独到的理解。问题清楚了,用什么语言去解决,那只剩语法和类库的问题了,这些帮助文档里都有的,或者STFG(问谷歌)。   说起OpenERP,首先是一个ERP软件,其次是一个二次开发的平台,然后才是一个开源项目。   这样才能保证参与者共同关注的是企业管理软件这个领域的问题,然后有需求的人花钱找程序员在这个平台上做二次开发,再遵照GPL协议在网络上分享这些开发后的模块。   有了清晰的产品定位,二次开发平台只关注管理软件的开发需求和特点,所使用的语言只是python的基本语法,相类似的实现方式让开源的成果更容易维护和再利用,这是关键!

November 30, 2011

Shine ITOpenERP6.0里用户保存的输入条件组合

OpenERP6.0的列表视图上支持增加灵活的过滤条件,并能将其保存。这样用户就可以在下一次重新调用这个条件组合了。 因为filter和默认值一样是用户相关的,所以你看不到其他人的filter。但是管理员用户可以在 【系统管理】-【自定义】-【底层对象】-【动作】-【过滤】这个菜单看到所有用户已保存的过滤条件。在这里就可以做增删改查的工作了。

Shine IT创建一个打开外部链接的菜单

网上瞎逛看到这个帖子 http://stackoverflow.com/questions/8132824/how-to-open-different-website-with-act-window-openerp 在demo系统里试了一下,创建一个“中文博客”菜单,动作类型选择url,然后新建一个url动作,指向本博客。嗯,可以用的。 不过这里似乎只支持固定的链接地址,不能传参数。

November 21, 2011

Shine IT泰国的项目机会

9月中旬收到一封邮件,要Skype谈一下远程培训的事情。   我平时不用Skype,但既然是项目机会那肯定要下载一个装一下,幸好N年前的帐号还在。但和这位先生一直没联系上,收到他邮件说过一段再和我联络。好奇心促使我仔细读了下邮件,发现竟是来自曼谷。我知道泰国有个挺有影响力的partner(好像是那个openerp rise web就是那公司写的),以为是他们。但找我做培训貌似不太对,反正就等着呗。Skype也是仍旧不常上。   昨天又收到此人的邮件,问我何时能聊一下。我回信承诺周一中午到午夜一直在线,然后就很巧地中午有个饭局,回来收拾完孩子睡觉已经是3点钟了。马上掏出Skype,果然此人在线。中英文混杂打了半天字,发来一个客户的需求(泰语和繁体中文的双语版,看着心里很没底)。我很依旧保持真诚本色,建议他先联系泰国的partner公司谈合作,然后又坦诚地表达了我对泰语的畏惧。他说咱还是语音聊吧,原来是台湾籍人,交谈起来轻松多了。   这个人也是个很坦诚的人,告诉我他的公司(好像他是老板)是用pb的,感觉开源是个可以发掘的利润增长点。对openerp研究了一段,因为有类似软件的开发经历,所以接受得还比较快。但找到第一个意向客户以后却无法保证能够顺利交付,找过那个partner可是人家工期已经排到明年3月了。他比较欣赏openerp-china上的一系列文章,认为中国的openerp发展比泰国好得多,至少我们已经有一个靠谱的推广计划在运行。另外他对泰国的中小企业信息化市场比较有信心,那里好像没有类似我们用友金蝶这样的品牌erp,大公司用SAP,中小公司就是自己开发或者干脆不用了。   说起要做的这个项目,是一个零售企业,原来没有erp系统,用excel管理。这次实施尽量不做二次开发。   首先我说明了我以小时为单位的报价方式。和其他找我聊的刚做第一个openerp的人一样,他也是会跟客户签固定金额的合同。这样他就会有一个担心,会不会他那边签的金额还不够支付我给他提供的劳务。于是他希望我能根据他整理的需求列表估计一个大概的预算金额。   实际上这个要求的出发点是寻求共赢,但即使对于参与现场需求调研的人来说,整个项目的估算也是个比较难做的事情。针对具体的需求可以估计个大概,但整体预算并不是简单汇总就可以了。项目执行过程中对客户刚性需求数量的控制、对客户操作习惯的引导、与客户在具体需求是否超出预定范围达成一致这些都是很大的风险,要靠经验和感觉。外包的人无法主导项目过程,所以也不能对这一部分做出估算。而这正是本地咨询公司可发挥的地方,也是盈利能力的控制点。   但既然是谈生意,不可能一句“我估不出来”了事的。我忽然想到用厦门的空调公司作为参照。当时是客户的老板主导,我做平均每天2小时(不含周末)的在线支持,在不做二次开发的前提下从开始合作到上线用了一个月的时间。这样按照我报出的每小时价格就有一个月内的大致估算。泰国朋友提出是否厦门人的需求不像这个新项目这么复杂,我说其实大体看起来相差不多。只是因为他是老板主抓,下面的人会服从系统的流程和使用习惯,即使绕路也没有怨言。而您是供应商,对客户底层的用户没有这么强的推动力,可能阻力会体现在刚性需求的确认和商讨上。这些会给我的远程支持带来额外的工作量,但我相信可以控制在项目总量的1/3,也就是最多每天买我3个小时的时间够了。而客户一般要最多三个月得上线,两个月左右肯定要有一个可供集成测试和最终用户培训的系统跑起来,所以我们的合作期限也就是2-3个月。这样40-60天每天2-3小时按最终实际工作量结算的话,100多个小时而已,不会超过200小时。这个成本被那个固定额度的合同吃掉肯定太容易了。   知道了我的上限,他应该就可以放心地去和客户确认和签单了。还谈了一下请他国内的亲戚帮忙付我款以节省汇率的细节。   做云团队以来先后与至少30个人做过这种接洽,有些是一去不返,有些是一拍即合。基本上凡是有合作的都成了朋友。这种模式不仅让我的团队得到了物质回报,也让这些能找到项目机会的人最终把项目做成了。这就是双赢。   这个项目有个需求是比较关键的,可能在openerp里要二次开发才能实现。就是产品的平行计量单位。比如苹果保存和销售肯定按个数的,但每个苹果的价格是按重量的。因为每两个苹果重量都有差异,这个差异累积起来可能也不小,所以对苹果这个产品,单位个和单位克没有固定的换算关系。在每次移库时都要同时记录个数和重量。客户的产品类似金苹果,些微的误差都是不能接受的。

November 19, 2011

Shine ITOpenERP Group “Useability / No One”

事情起源,我新建了一个数据库,安装了email_template这个模块,然后创建一种用户组。该组不能访问email 所有的菜单,但是可以通过里面的workfolow发送邮件,所以在Administration->Users->Groups->Access Rights 添加相应的读写权限。 但是我不想在该用户组里面出现这个email的Tool菜单。 然后我就查看了Administration->Customization->User Interface->Menu Items 找到Tools,发现如果一个菜单你没有给他分配一个group,他就会无条件地显示出来,所以Openerp默认有个Useability / No One 这个组只有administrator才在这个组里面,所以只要在这里添加了 这个组,在上面的用户组就不会在看到Tools菜单。

November 18, 2011

Shine IT深入解说OpenERP的各种提前期和时间

转自:http://shine-it.net/index.php/topic,2673.0/topicseen.html 1)Product的提前期 Customer Lead Time(sale_delay):客户提前期,指SO确认到向客户发货的天数,由于销售数量不同该时间也不同,因此,这里是一个平均时间。 Manufacturing Lead Time(produce_delay):生产提前期,指该产品从生产下单到生产完工的天数,由于生产数量不同,该时间也不同,因此,这里是一个平均时 间。这个时间必须包含其子部件的produce_delay,以及其零部件的采购提前期。OpenERP没有提供根据其BoM表及各零件的采购提前期自动 计算这个时间的功能。这个时间必须预先计算好,而后恰当设置。 Delivery Lead Time(seller_delay):指该产品采购下单到采购收货的天数,因为不同供应商,这个时间不同,因此这个时间是针对供应商而设的。又由于采购数量不同,这个时间也不同,因此这个时间是采购数量的一个平均时间。 2)Company的提前期 Scheduler Range Days(schedule_range):MRP运算的时间范围(天数),MRP运算时候,只计算Scheduled date在today + schedule_range之前的Procurement。 Purchase Lead Time(po_lead):全体采购提前期,该公司的所有产品的采购都加上这个天数。 Manufacturing Lead Time(manufacturing_lead):生产提前期,该公司的所有产品生产都加上该天数。 Security Days(security_lead):销售提前期,该公司的所有产品的销售都加上该天数。 3)SO的时间 Confirmation Date:SO确认时间 Creation Date:SO创建时间 Delivery Lead Time(delay):这个在每个SO Line上设置,指该产品行从SO确认到向客户发货需要的天数,默认值是产品的sale_delay加上公司的security_lead。 4)Procurement Order的时间 Scheduled date(date_planned):产品行预计供应时间。也即产品行预计的收货、发货时间。 如果是SO确认而产生的Procurement,该时间是:SO确认日期 + SO Line上的delay。 5)PO时间 Expected Date(minimum_planned_date):预计的采购下单时间,默认值是各PO Line上的date_planned的最小值,如果修改该值,系统自动修改PO Line上的date_planned,使得所有date_planned时间不早于该值。 Date Ordered(date_order):SO创建时间。 Date Approved(date_approved):SO确认时间。 Scheduled [...]

November 17, 2011

Shine IT同行评审是开源的核心竞争力

还是从开源的定义说起,这次发中文版:开源是充分利用分布式同行评审和流程透明化的一种软件开发方式。开源有助于更好的质量,更高的可靠性、灵活性,更低的成本,避免掠夺性的厂商锁定。   OSI把分布式同行评审放在开源定义里,因为这正是开源的核心竞争力。   前不久,我的一个朋友,某openerp在中国区合作伙伴签下了一个订单,竞争对手是一家行业软件供应商。两家公司拿出的软件从功能、架构上不分伯仲,在 最后PK过程中我的朋友说了这样一句话 —— 开源软件的质量要优于作坊软件。据说这是最后取胜的决胜关键。撇开市场因素,我觉得这个论断是有根据的。   之前看到 @出版人周筠 关于吴军先生建议让新人code review的微博及其评论,发现很多人并不知道什么是同行评审。这里分享一个链接, 同行评审常见问题解答。很喜欢开头的一段话 技术工作之所以需要接受同行评审就好比铅笔需要橡皮一样。   可见,同行评审是保证成果工作质量的重要手段。做过外包项目的都知道code review的重要性。而在开源项目里,这个流程更是至关重要。常见的开源项目平台都提供code review的功能,而且作者一般在申请review的时候并不指定具体的reviewer,而是通告给所有人。这就叫 分布式同行评审 。   在googlecode里有Request code review的功能,会建立一个issue,描述是 Purpose of code changes on this branch: When reviewing my code changes, please focus on: After the review, I’ll merge this branch into: /branch,也就是说代码只有经过评审才能进入发布仓库。   googlecode还支持项目组外的人在代码上添加评审意见,并提交,googlecode会自动给作者发邮件提示查看评审结果并修改。我对 launchpad研究不多,但我所在的openerp-community邮件列表总是收到社区成员申请merge代码到官方的review request,然后官方的review意见也会自动发送到邮件列表里。   当然,开源项目的同行评审不只限于code [...]

November 16, 2011

Shine ITKafkaDB用于数据迁移

好像项目刚刚开始,基于Kettle,目标是在openerp不同版本数据库间做迁移。 项目地址

Shine ITOpenERP手册:理解复式记账的库存管理

原文地址:Understanding Double-Entry Stock Management 翻译:fisher 校对:openerp群 为了讲解存货管理的这个概念,我们先来看看以下业务会产生什么样的库存移动, 从供货商处收货 发货给客户 材料遗失盘亏处理 库位结构基于系统初始安装后的库位层次结构图,假定还没有任何存货,也没有尚在进行中或计划了的库存相关操作 如果你从供货商那里定购了30辆自行车,在接收了产品后,OE会做以下操作表20.1 自供货商处收货后的库存移动操作库位 产品伙伴库位 >供货商 -30 自行车 物理库位->OE>存货 +30 自行车 如果你将2辆自行车出售给欧洲的客户,对应出货你将会得到以下交易数据 表20.2 出货给欧洲客户的库存移动库位 产品物理库位->OE->存货 -2辆自行车 伙伴库位->客户->欧洲客户 +2 辆自行车 当以上两个作业完成后,你可以在每个库位看到以下库存数表20.3 存货状态库位 产品伙伴库位->供货商 -30 自行车 物理库位->OE->存货 +28自行车 伙伴库位->客户->欧洲客户 +2 自行车 至此,你可以看到一个产品在所有库位中的总库存始终为0. 相当于会计帐中的所有借方与所有贷方相等(译者注:会计记帐原则有借必有货,借贷必相等). 伙伴库位(客户和供货商)并不归属于你公司库位层级结构中,因此在此类库位中的存货也就不是贵公司自有存货的一部份.因此如果你只看贵公司内部的物理库位,那两辆自行车就不再属于贵公司了.虽然它们已经不是贵公司物理存货,而是存在于客户库位里,这样的信息对于进行详细的库存管理分析是十分有用的. 提示:寄售库存 要管理寄售库存,你需要为寄售客户或供应商定义作为你公司里面的物理库位,而不是业务伙伴库位 注:科目 在管理存货时,往往很难避免在软件中的存货数量与仓库中实际的存货数量之间出现偏差.库存管理使用复式记帐法使得发现差错的机会增加了一倍.比如说你忘记了在某库位中的两个物料,此种差错会容易地在该库位相关的对方库位中反映出来. 可以和会计记账比较一下,从一个科目及其相关对方科目的异常现象中可以很容易找出错帐,比方说如果银行户头(科目)钱少了很可能就是有人忘了将客户付款事项入帐到银行科目了. 与此类似, 不论是会计帐还是OE的库存管理都遵循所有借方与所有贷方相等的原则. 在会计帐中,所有凭证都会产生会计分录,这些分录就是会计管理的基础.如果你创建发票或对账单,这些业务活动的结果就是产生对相关科目的会计分录.在OE 中的库存管理也类似.所有库存业务活动均作为简单的库存移动进行记录.不管是对物料进行包装,或制造,抑或是进行库存盘点,每次都是在进行库存移动. 前文中你已经看到了一个相对简单的产品收货与出货的案例,但是有些库存业务并不那么显而易见-比如说存货盘点.存货盘点是你在比较记录在系统内的存货数量与实际库房里实物存货的真实数量时进行的. 在OpenERP中,基于其复式记帐原则,你可以使用库存移动来记录此种存货盘点业务.这样的记帐方式有助你管理库存可追溯性.假设实物存货有26辆自行车, 但是在OE系统内记录的是28辆,那么你需要将系统内的存货数量减少为26,这个被减少的2辆将被视为产品盘亏,对系统数据的更正动作会产生以下系统记录: 表20.4 调整存货的库存操作 [...]

November 15, 2011

Shine ITOpenERP开发文档 2.1.模块开发

原译者:北邮学生 review:OpenERP qq群(69195329) wiki在这里生长着 整理:JoshuaJan ———————————————————————- 2.1 模块开发 模块-介绍 OpenERP采用三层架构(数据库、应用服务器、客户端)。应用层本身被设计成一个核心模块和许多附加模块。可以选择是否安装某些附加模块来创建一个openerp的特定配置。 OpenERP的核心和其他不同的模块都是用python写的。模块的功能通过XML-RPC(或是NET-RPC,这取决于服务器的配置)提供给客户端调用。模块也采用OpenERP对象关系映射在关系型数据库(PostgreSQL)中来保存数据。模块中可以包含XML(CSV 或者 YML)文件以便在模块安装过程中向数据库中插入数据。 模块化不仅是构建复杂系统的一个简洁的方式,在OpenERP中模块还用于扩展现有系统。模块也叫附加项(也可以叫做插件)。 在典型的OpenERP配置,通常有以下模块: base:最基本的模块。它无论何种情况下都必须安装,被认为是OpenERP核心的一部分。定义了ir.property , res.company, res.request, res.currency, res.user, res.partner等等。 crm:客户/供应商关系管理 sale:销售管理 mrp:制造资源管理 通过使用Python, XML文件,依赖OpenERP的ORM和它的扩展机制,可以快速开发新的模块。OpenERP的开源特性和它众多的模块也为新模块的开发提供了很多的参考实例。 安装最小化必须有的模块 5.x base、base_setup 6.x base、base_setup board、hr、process、resource 模块结构 模块 介绍 文件和目录 __openerp__.py __init__.py XML文件 操作 菜单 报表 向导 3.Profiles(配置文件) 模块 – 文件和目录 下面是创建一个新模块所必须的几个步骤: 1.在addons目录下新建一个子目录。 2.新建一个模块描述文件文件:__openerp__.py(__terp__.py),新建一个初始化文件:__init__.py 3.新建一个包含对象的Python文件 4.新建xml文件来加载数据(包括视图,菜单, 示例数据,…) 5.创建报表,向导,或是工作流。 [...]

SajolabOpenERPv6.0贸易公司的一个简单销售过程

现在来模拟一下贸易公司的一个简单销售过程 首先创建一个帐套,装了如下模块 product,sale,purchase,mrp 然后创建一个新产品而且

November 14, 2011

Shine ITOpenERP手册:仓库

原文地址:Your Warehouse 翻译:fisher 校对:openerp群 —————————————————————————— OpenERP的存货管理看似非常简单,实则很灵活且功能全面。它基于带给会计领域革命性变化的复式记帐原理。系统特点正如 拉瓦锡的名言:“ 什么也没有失去,一切都改变了”, 或者说“一切皆为移动”。在Open ERP中你不会说物料不见了,消耗了或丢失了,而是说物料从一个库位移动到了另一个库位。 正如会计复式记帐一样,openerp管理主要业务活动(如采购收货、销售发货、盘盈盘亏、材料消耗等)的对方库位。库存移动始终是指物料从一个库位移动到另一个库位。为了确保每次库存移动都有一个对应库位,软件支持以下不同类别的库位: 物理库位 伙伴库位 虚拟库位(作为计划、生产、盘点的对方库位) 物理库位代表仓库及其层次结构.实际上就是指通常由传统库存管理系统管理的库位。 伙伴库位代表你的客户和供货商的存货.在与你的这些伙伴们进行对帐时,这些库位就扮演了往来科目的角色.从供货商收货在系统内就被表示为物料由伙伴库位移动到了你自己公司的物理库位. 所以你会看到供货商库位通常都会显示负库存而客户库位通常显示为正存货. 与生产对应的虚拟库位通常使用在制造流程中。制造的特性是消耗原材料,产出成品.虚拟库位就用作上述两个移动的对应库位。 盘点库位是贵公司对存货进行盘盈和盘亏操作的对应库位。 下图是系统初始安装后的库位层次结构图(菜单:库存-库存管理-库位) 注:结构化库位在OE中,库位是结构化的.你可以将库位作成基于父子关系的树状结构.这样的组织方式可以使你对仓库各种库存移动及仓库组织架构进行各种明细层级的分析。 提示:库位与仓库在OE中仓库代表物理存货的实际地理位置,可以将仓库组织成由多层级库位组成.库位是用来管理各种类别的存货地点,比如说客户和生产库位. 本章中你可以使用上一章用过的带示例数据的数据库,也可以新建一个数据库。安装库存管理及相关模块,使用任意一个科目表。 本章中我们要用以下模块: stock 仓库管理功能 stock_location  管理推式或拉式库链 delivery  管理运输方法和运费 account_anglo_saxon  按盎格鲁-萨逊模式记账 sale_journal  库存日记账 mrp_jit  即时生产 sale_supplier_direct_delivery  供应商直发客户  

November 12, 2011

Shine ITOpenERP6.0里的property类型字段

这两天海飞在处理property字段批量更新的问题。根据对OpenERP5.0的了解,我觉得property是集中管理的,更新时只要修改一条property记录,而不需要逐个更新宿主记录。 在海飞的提醒下,我到我的demo系统里看了一下,在系统管理-设置-参数-配置参数菜单下搜索property_stock_procurement竟然有24条,而且这些记录指向的库位是相同的。只是有2条没指定具体resource id,其他22条指定了具体的产品id。更奇怪的是,我的系统里有66个产品。也就是说,同一个系统里有些产品模版使用了默认值,有些产品使用了和默认值相同的另一个property记录。这样一旦需要修改的话,直接update产品记录是不行的,要update对应的property记录才行。 在5.0里,按理说只有两种情况会为资源生成特定的property记录:新建或修改资源(记录)时,这个字段手工输入了和默认值不同的值。 为什么6.0多出这么多记录,还没找到原因。

November 10, 2011

Shine ITOpenERP更新关系型字段的特殊赋值语法

many2many (0,0,{values}) 根据values里面的信息新建一个记录。 (1,ID,{values})更新id=ID的记录(写入values里面的数据) (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系) (3,ID) 切断主从数据的链接关系但是不删除这个数据 (4,ID) 为id=ID的数据添加主从链接关系。 (5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID) (6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID)) 例子[(6, 0, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4] one2many (0, 0,{ values })根据values里面的信息新建一个记录。 (1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据) (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系) 例子: [(0,0,{'field_name':field_value_record1,...}),(0,0,{'field_name':field_value_record})] many2one的字段比较简单,直接填入已经存在的数据的id或者填入False删除原来的记录。

November 09, 2011

Shine IT网站活跃度报表项目结束

9月初论坛上的一个新的活跃用户找到我,咨询云实施团队的价格和交付进度。然后发给我一个excel文件让估计一下进度。 基本需求是从网站上下载一些客户访问网站的次数统计数据到openerp,然后根据这些数据做几个统计报表。 看了一下他的表样: 1、按极活跃、一般活跃、不活跃列出总览(饼图) 2、按区域等条件列出客户活跃度(柱形图) 3、按客户名称列出客户活跃度的历史记录(折线图) 感觉是BI的需求,但他要求用报表打印出来给老板看。因为openerp的bi模块还不能用,另外界面上直接显示的话,openerp只支持饼图和柱形图,连最简单的折线图都不支持。所以给出的方案是仿照scrum模块的燃尽图用pychart实现pdf输出。 最后确定的需求去掉了1和3,只剩下了下载网站数据和打印柱状图。报了3天的工作量。需求几经修改确认,做了差不多三周才完成。中间有个大问题,报表功能都测试好以后,发现一有中文就报错。单元测试和用户测试都是用英文的,实际数据里都是中文。网上搜了一下,pychart竟然不支持中文。pychart网站上把支持双字节作为将来要实现的功能,等待contributor。。。看来oe自带的燃尽图也不能出中文了。不过那不重要,重要的是我们的报表要交工。 十一期间一直在搞这个事情,最后发现了relatorio支持在odt中插入pycha图形对象,而pycha是支持中文的。于是这个报表用pxgo_openoffice_report引擎重写。最终交付了。 教训:对国内用户的需求,一定要注意先测试中文是否支持,是否乱码。

November 07, 2011

Shine ITOpenERP 的XML-RPC的轻度体验+many2many,one2many,many2one创建方式

每当夏秋之交,我们都有展会,展会完后,都有很多的新的潜在客户要添加,我们收了一大堆名片,想入openERP还是需要一定时间的,而且名片的图片导入没有什么简洁的方法,所以我就想写个script来进行导入这些名片以及相关的客户信息。 XML-RPC是一个远程过程调用(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制。 需求是这样的,想通过一个script来将一个excel表格的partner连同他们的联系人一起导入 # -*- encoding: utf-8 -*- import xmlrpclib import xlrd import base64 DB = ´TESTDB´#帐套名 USERNAME = ´admin´#用户名 USERPASS = ´1´#密码 IMAGELOCATION=´E:\\IMG´ #图片的根目录地址 #读取excel文件 fname = &amp;quot;E:\TEST.xls&amp;quot; #excel表格地址 bk = xlrd.open_workbook(fname) #按名字取sheet sh = bk.sheet_by_name(&amp;quot;JOSHUA&amp;quot;) #登陆取uid sock_common = xmlrpclib.ServerProxy (´http://localhost:8069/xmlrpc/common´) uid = sock_common.login(DB, USERNAME, USERPASS) sock = xmlrpclib.ServerProxy(´http://%s:%s/xmlrpc/object´ % (´localhost´,8069)) for [...]

Shine ITOpenERP手册:管好仓库,搞定生产

原文地址:Manage your Warehouse and Get your Manufacturing Done 翻译:fisher 校对:openerp群 本章节着重讲物料。包括物料的转移和通过组装或生产将物料进行转换。 存货是指真实存在的物料,而不是产品明细表。存货需要仓储、移库、按批或按单件跟踪。还有尺寸、重量、成本等属性。OpenERP 用一种有效且独特的方式对存货进行管理。生产是把一些物料和组件,以及一些可计量的能力资源,转换成其他产品或服务的过程,此过程中公司资产增值了。

November 05, 2011

Shine ITOpen ERP 开发实施人员面试题

Python基础(10*2分) 有一个列表a=[2, 3,3,1,3,5,7,5,7] 请使用Python语言用最简洁的方式根据此列表创建列表b=[1,2,3,5,7],即去除重复项并排序 有一组电话号码,其格式如右:(021)66664324-01, 其中021为地区码,66664321是电话号码,01是分机号,要考虑的因素有:电话号码的长度不尽相同,另外分机号可能没有,比如: (0551)321444。请试着写一个正则表达式,分别能取出地区码,电话号码,和分机号(如果有的话) Linux 基础(10*2 分) ls命令在Linux中是用来显示目录中的内容的,请写出如何用ls命令显示出隐含文件或目录(即文件或目录名称以.开头的) 请试着说出至少一个类似bzr这样的DVCS版本控制系统,试说出至少两点与svn版本控制系统的不同点 Open ERP基础(共60 分) 默认情况下Open ERP中的stock.move对象上的state字段中有哪些选项,或者说“库存移动”有哪几种状态? (10分)  Open ERP 是如何计算某个stock.location上的某产品的虚拟库存和实际库存的数量的?(20 分)  某个生产企业有一个灯具产品由灯罩和灯座构成,灯罩的颜色有10种,灯座相同,在只定义一个灯具产品的前提下,用户如何可以在销售订单中确定灯罩的颜色,同时系统能自动选取对应颜色的BOM进行灯具生产?(30 分)

November 04, 2011

Shine IT春天来了

最近openerp中文社区好事不断。 老肖开了新的咨询公司并马上拿到了几个大订单。 有10年erp从业经验的奔尼加入社区,决定推广openerp在中小企业的应用。 有10年SAP经验的fisher加入社区,翻译了oebook的库存管理部分,并主动提出校对现有的中文翻译。 有了这些项目和erp专家的参与,openerp的爆发指日可待。

November 03, 2011

Shine IT欢迎路过的高手给我们做code review

code review在开源软件领域发挥着至关重要的作用,它是开源软件保证质量的关键,也是开源软件要求附带源代码发布的原因。 为了保证openerp中国团队交付的模块质量,我们把code review这个流程众包到社区内,为code review提供有偿支持。按模块实际工作量人天数每人天支付给 reviewer 100元人民币作为回报。同时对review结果也有定量的要求:每10行代码至少提1个改进建议。 googlecode为code review过程提供了很好的平台,10分钟的尝试即可学会操作。接下来,就是看代码赚钱了……

November 01, 2011

Shine IToecn_account_report

国外的ERP软件到了国内都会遇到政府规定的三大报表格式的问题。 国外的报表是列表式,像上市公司的财报。这样实现上只需要把科目或科目组汇总循环输出即可。国内的报表是表格式,上一行的单元格和下一行的单元格可能适用不同的规则。而且这些规则随着公司科目表的变动还要做出调整。所以国内财务软件一般都有自定义报表的功能,在类似excel的界面上在单元格内设置一些简单的取数公式和函数,由程序调用这个模版运算后打印计算结果。 OpenERP中官方的设计在5.0中是用 account_report 模块,在openerp界面上输入每个报表行的描述和取数公式,最后以pdf文件方式输出。但这样对取数规则可以定义,但对报表的具体格式如字体、图片、页眉页脚等无法自定义。 非官方的模块 account_balance_report 基于 pxggo_openoffice_reports模块,可以把这个自定义报表模版在openoffice里画好。我最近为一个客户实现的现金流量表就结合了两者的设计思路,实现了在openoffice里设置格式和公式,在openerp上调用打印。因为和pxgo公司不熟,这个模块依赖我们革命兄的 relatorio_report 报表引擎。 下载这两个模块并安装后,在会计主菜单的内部报表树下增加了三个菜单项:cashflow report、profit and loss report 和 cogs report。点击cash flow report弹出一个向导。因为现金流量表是年报,这里选择当年的最后一个期间。点击print。直接打开odt文件(需要本机有openoffice)。 工作表2的第一个单元格是公式计算的结果。工作表1是客户要的报表。这就是输出的结果。除最后一列的数字是公式算出来的,其他都是固定的文本。如果要增加一个报表行或者改一个行的取数规则要怎么做呢? 在服务器的addons/oecn_account_report/report目录下,打开cashflow.odt文件进行修改。保存后重新打印就是用新模版了。不需要更新模块或重启服务器。 在要更改的单元格点菜单 插入->超链接 relatorio://    这段是固定的 get_year 是我写的一个python函数,此模块中可用的有三个函数: get_year  取本年累计数 get 取本月数 get_text 取期间的名称 例如: get(‘debit(1001),1002,-1003′,-1,1)就是:取id是1的公司,上个月的数字,1001科目的借方 + 1002科目的借减贷 - 1003科目的借减贷。这里的1001 1002 1003 1122 都是科目代码。 所以此报表模块可以取某个指定月的 借方、贷方或借减贷数字并做加或者减的运算。 也可以取本年累计的借方、贷方或借减贷数字并做加或者减的运算。不足之处 算余额并非从科目的最早凭证行算起,而是只考虑本年的。所以必须要用系统的年度结转功能数字才对。

October 29, 2011

Shine IT开源要革的是作坊软件的命

日前有新入openerp中文社区的资深SAP顾问提出应将SAP的“T-CODE功能”和“IDE集成在软件内部”的特性加入openerp技术架构。我个人觉得这是无意义的建议。莫说我们现在的技术积累和影响力都不足以对架构做出改动,即使有人力财力,这种也是优先级比较低的需求。 模仿商业软件的功能比较靠谱,模仿商业软件的操作习惯让我不禁想起邯郸学步。一个项目的最大风险控制点在于清晰的范围界定,为了项目的高效和可控,决定不做什么比决定做什么更重要。那决策的标准是什么呢?愿景。这个项目要解决什么问题。开源软件是居于自主开发和购买通用软件之间的一个可选项。 那么现在的软件市场上,居于这个市场范围的软件是什么,这些才是开源的竞争对手。而不是大家耳熟能详可以左右行业标准的通用软件,或是企业内部技术力量贴身支持的自主开发。在这个市场范围内,是那些七八个人,三五条枪的软件作坊,就是 @阿朱 描述的那些做项目的软件公司。 我们在中国推广OpenERP不是为了取代SAP或者用友金蝶的市场地位,而是为了取代长不大、活不长的作坊软件的市场地位。如果说竞争力体现在人无我有、人有我优之上,那我们一定是跟作坊软件比,而不是跟通用软件比。 关于软件作坊这个名词,。@阿朱 先生在《走出软件作坊》及其博客上给出了解决方案,就是提高内部管理水平继而提升竞争力,慢慢做大(希望没有误读)。但是对于这些游击队来说,要走上这条路,并在这条道路上坚持(吕先生走了十年?)到成功那一天,本身就是最大的困难。如《浪潮之巅》中吴军先生所说,一个成熟的行业容不下更多巨头。这注定了不是所有软件作坊都能成为通用软件巨头,而市场注定要由一家领头羊、一个挑战者和大量的小公司组成。寄希望于让这些小公司长大,不如发挥他们的优势,做到小而强。因为小有小的优势,是大比不了的。 软件作坊转型做开源软件的咨询公司,我觉得是一条切实可行的路。 要想说服老板们调整,必须得用SWOT分析。发挥优势、补足劣势、抓住机会、迎接挑战。 S 优势:软件作坊有什么优势?这些小公司资金和技术都拼不过大企业,价格也不见得比别人低多少,为什么能拿到项目?这些公司的销售都是老板兼职,人脉就是资 源。所谓智子疑邻,信任是合作的基础。这个优势在幅员辽阔的中国将长期存在,也是软件作坊不断涌现和继续存活的根基。 W 劣势:资金和技术。这个看起来是鸡和蛋的问题。通用软件公司靠规模优势聚集资金,招聘能人或购买技术搞研发形成技术优势,在通过产品回笼资金。软件作坊做 不到。既然有了人脉优势能拿到项目,资金和技术就不是主要矛盾了。所以没有投入,所以没有积累,所以带不来效益,所以更没必要投入了。。。 O 机会:个性化需求。随着信息化的不断推进,用户对软件的不断加深了解,深化应用及个性化定制的需求也越来越多。通用软件的投资者很容易看出投入等额的人力 成本研发产品卖拷贝比为某个客户定制利润更高。而软件作坊基本上是靠老板维护的几个大客户养着的,他们的个性化需求必须关注。 T 挑战:缺人才。二十一世纪最贵的是什么?人才!有能力把客户伺候好又对老板忠诚的人才不仅可贵,而且昂贵。刚从非名牌院校或培训学校毕业的新手,屈尊在软 件作坊做三年,刚刚从毛头小子做成了猴精,就找机会跳槽去大城市、大公司了。而从那些地方回流的凤毛麟角,而这些特例也往往自立门户搞作坊了。 开源能改变什么?作为地头蛇,软件作坊仍旧利用人脉优势接项目,而把资金和技术的劣势交给开源项目来解决,抓住优质客户深化应用有个性化定制需求的机会, 通过开源社区化解发现和培养人才的挑战。不做自己的产品(告别自主知识产权作坊软件的维护噩梦),而是在开源软件的基础上提供实施、培训、增强开发和运维。 是时,这些小软件作坊转身成为了IT咨询公司,向更高利润的产业链末端靠近。而开源软件,也由于这些有商业利益的实体参与而获得了长足发展的动力和支持。 客户使用的软件功能大部分是由开源软件提供的,而开源软件的承诺就是,通过大规模协作和同行评审、透明运作保证软件质量。这是一个多赢的局面。