分类 [ 应用 ] 下的全部文章

目录

1.      概述

2.      安装ubuntu操作系统

3.      安装jdk

4.      安装odoo

5.      安装pgAdmin

6.      准备odoo源代码

7.      安装pycharm

8.      调试odoo后端python代码

§8.1  进入odoo.py的shell命令模式(odoo v9才有)

§8.2 服务启动过程跟踪

§8.3 跟踪后端网页动作

§8.4 调试模块

9.       调试odoo前端js代码

§9.1 安装和配置chrome浏览器

§9.2 配置goagent翻墙工具

§9.3 调试前端js脚本

10.       防火墙配置

 

 

1.     概述

Pycharm是一个全功的的python和Web开发集成工具,支持Django、Flask、Google App Engine、Pyramid、web2py框架和JavaScript、CoffeeScript、TypeScript、CSS、Cython和模板语言等,以及数据库和SQL, UML & SQLAlchemy Diagrams。而且能实现远程开发和调试。本人曾经尝试在windows搭建,但是安装python的各种软件包时问题很多,最后在Linux操作系统上成功完成。

本文件讲述如何在ubuntu 14.04操作系统上搭建odoo的调试开发环境,我们采用如下的软件:

⑴、VMware-workstation-full-11,                             可从http://www.vmware.com/products/workstation/workstation-evaluation下载使用版,然后去网上搜索密钥产生器,或者采用个序列号:VA7HH-44W0Q-0818Y-RYZEV-WVRGA

⑵、ubuntu-14.10-desktop-i386,      可从http://mirrors.aliyun.com/ubuntu-releases/14.10/ubuntu-14.10-desktop-i386.iso下载。

⑶、jdk-8u40-linux-i586.tar.gz,采用命令下载:wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u40-b25/jdk-8u40-linux-i586.tar.gz

⑷、chrome最新版浏览器,可从https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb下载。

⑸、开发调试工具pycharm-professional,                     可从https://www.jetbrains.com/pycharm/download/下载Linux版本的。

⑹、翻墙工具goagent,可从https://github.com/goagent/goagent下载,此网站上有详细的安装配置文档。

⑺、odoo最新源代码,可从https://github.com/odoo/odoo/archive/8.0.zip下载。

⑻、odoo_8.0.latest_all.deb,可从https://www.odoo.com/page/download下载最新版。

 

2.     安装ubuntu操作系统

 

首先在windows上安装VMWare workstation 11,然后再创建虚拟机,给2GB内存,桥接网卡,20GB硬盘即可。

安装ubuntu 32位的桌面版,版本号是11.10,选择中文语言、重庆时区,并创建普通用户moodisk,机器取名为OdooDev。安装完后重启进入图形桌面,打开终端窗口,输入命令做如下配置:

⑴、切换到超级用户:

moodisk@OdooDev:~$ sudo -s

⑵、把系统升级到最新:

root@OdooDev:~# sed -i ‘s|cn.archive.ubuntu.com|mirrors.aliyun.com|g’ /etc/apt/sources.list

root@OdooDev:~# apt-get update -y && apt-get upgrade -y

⑶、允许root登陆:

root@OdooDev:~# passwd root

root@OdooDev:~# echo “greeter-show-manual-login=true” >> /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

root@OdooDev:~# reboot

重启之后采用root用户登陆图形桌面,打开一个终端窗口。

⑷、安装vmware tools:

点击VMware虚拟机管理软件的菜单“虚拟机à安装VMware Tools(T)…”,这样就在虚拟机里挂载了虚拟光盘,在终端里输入如下命令安装VMware Tools:

root@OdooDev:~# tar -zxf /media/root/VMware\ Tools/VMwareTools-9.9.2-2496486.tar.gz -C /tmp

root@OdooDev:~# cd /tmp/vmware-tools-distrib

root@OdooDev:~# ./ vmware-install.pl

此后一路按回车键即可,安装完了再次重启,此后的图形桌面充满整个屏幕。

⑸、安装一些必要的软件:

root@OdooDev:~# apt-get -y install vim openssh-server

root@OdooDev:~# vim /etc/ssh/sshd_config

把PermitRootLogin参数的值改成yes

⑹、配置网卡:

root@OdooDev:~# vim /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 192.168.0.12

netmask 255.255.252.0

gateway 192.168.0.1

dns-nameservers 8.8.8.8 8.8.4.4

root@OdooDev:~# reboot

Ubuntu 14.04自带的图形桌面不好看且不好用,建议更换成经典的gnome桌面,采用如下命令安装:

root@OdooDev:~# apt-get -y install gnome-session-fallback

重启系统后在图形登陆画面参见如下图操作:

 

把上面提到的软件下载到目录/root/install_softwares下,为以下各步做好准备。不过建议采用如下的命令直接安装gnome桌面:

tasksel -y install ubuntu-gnome-desktop

 

3.     安装jdk

root@OdooDev:~# cd install_softwares

root@OdooDev:~/install_softwares# tar -zxf jdk-8u40-linux-i586.tar.gz -C /opt/

root@OdooDev:~/install_softwares# cd /opt/jdk1.8.0_40/

root@OdooDev:/opt/jdk1.8.0_40# ln -s /usr/bin/update-alternatives /usr/sbin/alternatives

由于后续的一些软件安装时要用到命令alternatives,在ubuntu下此命令被命名为update-alternatives。

root@OdooDev:/opt/jdk1.8.0_40# alternatives --install /usr/bin/java java /opt/jdk1.8.0_40/bin/java 2

root@OdooDev:/opt/jdk1.8.0_40# alternatives --config java

There are 3 programs which provide 'java'.

Selection    Command

-----------------------------------------------

*  1           /opt/jdk1.8.0/bin/java

+ 2           /opt/jdk1.8.0_25/bin/java

3           /opt/jdk1.8.0_40/bin/java

 

Enter to keep the current selection[+], or type selection number: 3

 

root@OdooDev:/opt/jdk1.8.0_40# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_40/bin/jar 2

root@OdooDev:/opt/jdk1.8.0_40# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_40/bin/javac 2

root@OdooDev:/opt/jdk1.8.0_40# alternatives --set jar /opt/jdk1.8.0_40/bin/jar

root@OdooDev:/opt/jdk1.8.0_40# alternatives --set javac /opt/jdk1.8.0_40/bin/javac

root@OdooDev:/opt/jdk1.8.0_40# cd

root@OdooDev:~# java -version

java version "1.8.0_40"

Java(TM) SE Runtime Environment (build 1.8.0_40-b25)

Java HotSpot(TM) Server VM (build 25.40-b25, mixed mode)

验证版本。

root@OdooDev:~# cat >$HOME/.bash_profile <<E”O”F

export JAVA_HOME=/opt/jdk1.8.0_40

export JRE_HOME=/opt/jdk1.8.0_40/jre

export PATH=$PATH:/opt/jdk1.8.0_40/bin:/opt/jdk1.8.0_40/jre/bin

EOF

这个命令就是设置三个环境变量JAVA_HOME、JRE_HOME、PATH。重启系统。

 

4.     安装odoo

安装一个生产环境的odoo,以便与调试环境的odoo做比较。先安装postgresql 9.4。

root@OdooDev:~# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

root@OdooDev:~# wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add -

root@OdooDev:~# apt-get update

root@OdooDev:~# apt-get install -y postgresql-contrib-9.4 postgresql-9.4

root@OdooDev:~# cd $HOME/install_softwares

root@OdooDev:~/install_softwares# dpkg -i odoo_8.0.latest_all.deb

会报错,因为缺少很多依赖软件包,别怕,我们再执行下面的命令安装这些软件包。

root@OdooDev:~/install_softwares# apt-get -f install

下面安装最新版的wkhtmltopdf,这是odoo 8打印报表时要求的。

root@OdooDev:~/install_softwares# wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-i386.deb

如果是64位操作系统,那么下载wkhtmltox-0.12.2.1_linux-trusty-amd64.deb

root@OdooDev:~/install_softwares# dpkg -i wkhtmltox-0.12.2.1_linux-trusty-i386.deb

会报缺少依赖的文件包,再执行下面的命令即可安装这些包:

root@OdooDev:~/install_softwares# apt-get -f install

root@OdooDev:~/install_softwares# wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-i386.deb

root@OdooDev:~/install_softwares# update-rc.d odoo disable

odoo的主要文件被安装在目录/usr/lib/python2.7/dist-packages/openerp/下,启动脚本文件/etc/init.d/odoo,配置文件/etc/odoo/openerp-server.conf,创建的数据库用户和操作系统用户都是odoo。操作系统用户odoo用于启动odoo服务,所以为了加快网站前段的访问速度,需要把/usr/lib/python2.7/dist-packages/openerp的主人改为odoo,这样第一次访问的*.py文件就会编译成*.pyc程序,此后访问时速度就会明显加快,使用如下命令修改:

root@OdooDev:~/install_softwares# chown -R odoo: /usr/lib/python2.7/dist-packages/openerp

为了支持在线通信,还需要安装额外一些软件:

root@OdooDev:~/install_softwares# apt-get -y install python-pip python-gevent python-coverage python-coverage-dbg ttf-wqy-microhei ttf-wqy-zenhei

root@OdooDev:~/install_softwares# pip install psycogreen

为了支持我购买的功能强大的odoo website在线开发主题包theme_clean(可以在这里购买:https://www.odoo.com/apps/themes),还需要安装另外一些软件:

root@OdooDev:~/install_softwares# wget -qO- https://deb.nodesource.com/setup | bash -

root@OdooDev:~/install_softwares# apt-get install -y nodejs

root@OdooDev:~/install_softwares# npm install -g less less-plugin-clean-css

把theme_clean主题包拷贝到odoo的addons目录:

root@OdooDev:~/install_softwares# tar -xjf theme_clean.tar.bz2

root@OdooDev:~/install_softwares# cp -r theme/* /usr/lib/python2.7/dist-packages/openerp/addons/

root@OdooDev:~/install_softwares# chown -R odoo: /usr/lib/python2.7/dist-packages/openerp

通过下面命令修改数据库用户odoo的密码为123456:

root@OdooDev:~/install_softwares# su - postgres

postgres@OdooDev:~$ psql -c “alter user odoo with password ‘123456’;”

postgres@OdooDev:~$ exit

修改odoo的配置文件

root@OdooDev:~# vim /etc/odoo/openerp-server.conf

[options]

addons_path = /usr/lib/python2.7/dist-packages/openerp/addons

admin_passwd = A1B2C3

data_dir = /var/lib/odoo/.local/share/odoo

db_host = localhost

db_template = template1

db_user = odoo

db_password = 123456

dbfilter = %d_db

lang = zh_CN

list_db = False

logfile = /var/log/odoo/odoo-server.log

timezone = Asia/Shanghai

workers = 2

xmlrpc_interface = 192.168.0.12

xmlrpc_port = 8069

 

以上一些重要参数说明如下:

⑴  admin_passwd = A1B2C3:odoo超级管理员的密码修改为A1B2C3,安装完的默认密码是admin。

⑵  db_user = odoo,db_password = 123456:odoo后端连接数据库的用户名和密码。

⑶  dbfilter = %d_db:根据前段访问odoo的域名来自动选择套帐,其中%d代表域名,比如用户通过www.weisuan.com访问odoo,那么选择的套帐就是weisuan_db,同理通过www.moodisk.com访问,那么选择的套帐就是moodisk_db了。此参数配合list_db = False,在odoo的登陆界面不会出现选择套帐的列表,这样就能轻松实现SaaS部署odoo了。当然也可以通过http://www.moodisk.com:8069/web/database/selector和http://www.moodisk.com:8069/web/database/manager来手工选择套帐或管理套帐。

⑷  workers = 2:odoo服务在启动的时候产生多个服务子进程,子进程的个数是这样计算的:4+n,假如参数定义workers=n。其中有一个子进程执行/usr/bin/openerp-gevent程序,专门用于实现在线聊天的功能,其他的子进程都是执行/usr/bin/odoo.py。如果屏蔽了workers参数,那么就只有与一个odoo服务进程,没有openerp-gevent进程,所以不能在线聊天了,除非直接启动openerp-gevent服务进程,此进程同时也支持ERP业务操作。注意:odoo8如果要打印报表,workers的值必须大于或等于2。

⑸  xmlrpc_port = 8069:定义端口,由于启动odoo服务的用户是普通odoo用户,所以端口不能改成小于1024的端口号,1~1024的端口只有超级用户权限才允许监听。那么到底如何让odoo监听80端口呢?方法有两种:

①  利用iptables做端口转发,具体参见后面的防火墙部分,或者在/etc/rc.local的exit 0之前加入下面一行。

/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8069

②  以root用户运行odoo服务:修改odoo配置文件/etc/odoo/openerp-server.conf,加入参数定义“xmlrpc_port = 80”;修改文件/usr/lib/python2.7/dist-packages/openerp/cli/server.py,在def check_root_user():行之下加入return;修改/etc/init.d/odoo,把里面的“USER=odoo”改为“USER=root”。

⑹  的

 

5.     安装pgAdmin

pgAdmin是图形化的postgresql数据库管理工具,为了便于操作数据库,建议安装它。

root@OdooDev:~# apt-get -y install pgadmin3

点击操作系统的菜单“应用程序à编程àpgAdmin III”启动pgAdmin,见下图:

 

6.     准备odoo源代码

root@OdooDev:~# unzip odoo-8.0.zip

root@OdooDev:~# cd odoo-8.0

root@OdooDev:~/odoo-8.0# cp /etc/odoo/openerp-server.conf ./

然后修改openerp-server.conf成如下所示的内容:

[options]

;addons_path = /usr/lib/python2.7/dist-packages/openerp/addons

admin_passwd = A1B2C3

;data_dir = /var/lib/odoo/.local/share/odoo

db_host = localhost

db_template = template1

db_user = odoo

db_password = 123456

dbfilter = %d_db

lang = zh_CN

list_db = False

;logfile = /var/log/odoo/odoo-server.log

timezone = Asia/Shanghai

;workers = 2

xmlrpc_interface = 192.168.0.12

xmlrpc_port = 8069

 

行首是“;”的为注释。修改openerp/cli/server.py,在def check_root_user():行之下加入return,这样root用户也能运行odoo服务了。参照之前的内容把theme_clean主题拷贝到$HOME/odoo-8.0/addons下。

源码根目录下有一个文件requirements.txt,里面包含了所依赖的软件包,采用下面的命令安装这些依赖包:

root@OdooDev:~/odoo-8.0# pip install -r requirements.txt

 

7.     安装pycharm

登陆Linux图形桌面并且打开一个终端窗口:

执行如下命令:

root@OdooDev:~/odoo-8.0# cd $HOME/install_softwares

root@OdooDev:~/install_softwares# tar -zxf pycharm-professional-4.0.5.tar.gz -C ../

root@OdooDev:~/install_softwares# cd ../pycharm-4.0.5/bin/

root@OdooDev:~/pycharm-4.0.5/bin# ./pycharm.sh

 

 

下面开始导入odoo的源代码,指定其目录即可。

 

点击上图中右上角的“Configure Python Interpreter”,配置python解释器为python2.7,然后pycharm根据python2.7建立索引,几分钟后出现如下的界面:

点击右上角的“Install requirements”安装依赖的python插件,安装过程很可能报错。配置openerp-server的启动参数,见下图:

 

 

如下图所示定义数据源:

      

下面的图直接点击“OK”。

 

到此,pycharm安装完毕,并且导入了odoo工程项目,以后启动pycharm的方法是:操作系统菜单“应用程序à编程àPycharm”。

最后我们来汉化pycharm,从这里http://yunpan.cn/cZML53YDGHskx(访问密码 03a4)下载,汉化的官方网站是https://github.com/Jythoner/pycharm。解压之后把resources_zh_CN.jar拷贝到pycharm安装目录下的lib目录下,重启pycharm即可。

 

快捷键:

 

8.     调试odoo后端python代码

在调试odoo8之前,不要单独启动odoo8服务。

§8.1 进入odoo.py的shell命令模式(odoo 9才有)

./odoo.py shell -d odoo9_db -r odoo -w pass123 --db_host=127.0.0.1  -c openerp-server.conf

>>> dir()        ----返回当前脚本的所有名字,其中openerp和self,可以进一步列,如dir(openerp)、dir(self)

>>> print self       ----查看当前模块,默认是res.users。

>>> dir(openerp)         -----查看模块openerp定义的名字和函数。

>>> help()                     ----进入帮助界面。

>>> help(openerp.osv.orm.Model.browse)                 ----获取browse()函数的帮助

>>> self.search_read([('id','=',1)],['name'])      ----查看表res_users中id为1的用户的名字。

>>> self.pool.get('neon.asset').browse([1,2])

 

§8.2  服务启动过程跟踪

Odoo.py定一了一系列的函数,最后两条语句是执行总路口,我们在main()处设置断点,然后开始跟踪调试,结果如下:

odoo.py>main():导入openerp,然后执行openerp/cli/__init__.py>main(),然后执行openerp/cli/server.py>main(args),>check_root_user()检查是否是根用户,如果是,则退出。由于我们是用root用户登录linux并做调试工作的,所以openerp/cli/server.py有一条语句改为 “if pwd.getpwuid(os.getuid())[0] == 'root1' :”,这样root用户也能运行odoo服务了。

openerp/tools/config.py>parse_config(args)分析配置文件(--config=/opt/dev/odoo8/odoo-config/openerp-server.conf)。

check_postgres_user()检查是否是postgres数据库用户,如果是则退出。

report_configuration()打印OpenERP版本信息,addons路径,数据库登录信息。

openerp/service/server.py>start(preload=None,stop=False):

装载全局模块(模块由--load命令行参数或server_wide_modules指定,默认模块是web,web_kanban),执行run(),执行start(),再执行http_spawn(self),开始监听80或者8069端口了,在执行run()时传递了application函数(在openerp/service/wsgi_server.py中定义)。服务器有三种(默认是ThreadedServer),在windows下只有ThreadedServer支持:

GeventServer if sys.modules.get("gevent").

PreforkServer if workers is defined in configuration.

ThreadedServer if none of the above are true.

 

文件openerp/service/server.py中定义了ThreadedServer服务器对应的类,类中方法run()完成:调用start()产生一个http线程和2个cron线程。http线程调用http_thread产生Werkzeug wsgi 守护服务进程,所有的web请求被传递给application函数(在openerp/service/wsgi_server.py中定义)。cron线程为每个数据库(套帐)每隔60秒钟调用_acquire_job(db_name)方法(方法的类ir_cron定义在openerp/addons/base/ir/ir_cron.py中)来处理后台任务。启动大概流程见下面的图。

 

§8.3  跟踪后端网页动作

在用pycharm 4调试odoo8时,odoo服务程序监听8072端口,而不是80,但当在pycharm里运行odoo8时又是监听80端口。我们都知道8072端口是支持在线聊天的。既然监听8072,那么我们就干脆访问http://<ip>:8072,但是网页长时间打不开。我们在/root/odoo-8.0/openerp/service/wsgi_server.py的application()函数内第一条语句处设置断点,然后debug运行odoo服务,并且在浏览器打开网页,可以开始跟踪了。有外国朋友说修改文件/root/odoo-8.0/openerp/__init__.py,参照下图注释掉两行:

然后调试odoo就是监听80端口了,而且浏览网页也正常,跟踪也顺利。但是又产生了一个新的问题:在pycharm中运行odoo,监听8072端口了。下图供参考。

 

§8.4 调试模块

模块名就是模块文件所在的目录名,当调试模块时,需要不断地修改代码,并在odoo中升级模块,才能看到修改后的效果。升级模块有两种方式,一种是在odoo的“设置”菜单中完成,一种可在启动odoo服务时升级,后一种方法比较快捷,带参数 -u 模块名 启动Odoo服务即可,比如:

./odoo.py -c openerp-server.conf -u neon_asset

其中neon_asset是我开发的资产管理模块。

 

9.     调试odoo前端js代码

前端调试要结合chrome和其插件,同时最好配置goagent翻墙软件,因为后续的js调试插件JetBrains IDE Support需要翻墙才能下载。

§9.1  安装和配置chrome浏览器

root@OdooDev:~/install_softwares# dpkg -i google-chrome-stable_current_i386.deb

如果此时直接启动chrome浏览器,那么就会报错:

我们的解决办法是:

root@OdooDev:~/install_softwares# mkdir $HOME/.chrome

root@OdooDev:~/install_softwares# vim /usr/bin/google-chrome

这样就可以正常启动chrome浏览器了。

 

§9.2  配置goagent翻墙工具

从这里http://t.cn/RwuUMo2下载(密码29b9),然后解压到/opt/GoAgent-323/目录下。参照里面的操作说明配置,对于Linux系统,注意以下几点:

root@OdooDev:~# apt-get -y install python-vte

root@OdooDev:~# python2.7 /opt/GoAgent-323/local/addto-startup.py

这一步是添加开机自动启动翻墙软件,也可以手工启动,采用命令python2.7 /opt/GoAgent-323/local/goagent-gtk.py或者python2.7 /opt/GoAgent-323/local/proxy.py

下面还要手工导入证书:

打开 Chrome 浏览器 >设置 > 显示高级设置… > HTTPS/SSL > 管理证书… > 授权中心> 导入… > 导入/opt/GoAgent-323/local目录下的 CA.crt 证书 > Edit trust settings 全部选中 > 重启浏览器

PS: goagent目前不稳定,我直接采用蓝灯(lantern)翻墙工具,速度快,还比较稳定,本博客的第一篇文章中有下载链接。

 

§9.3  调试前端js脚本

参照下图增加js调试配置:

点击“OK”后会提示需要在chrome浏览器中安装插件JetBrains IDE Support。调试时在pycharm中正常运行或者调试运行odoo8或者在系统命令窗口运行odoo8服务(root@OdooDev:~/odoo-8.0# ./odoo.py -c openerp-server.conf),然后在pycharm中调试运行js debug:

pycharm会自动启动chrome浏览器,如下图所示:

对于网站的前端调试,我还是喜欢使用chrome开发者工具或者与firefox集成的FireBug,后者有中文版,使用更人性化一些。下面简单介绍下安装和使用FireBug。先从http://download.firefox.com.cn/releases/stub/official/zh-CN/Firefox-latest.exe下载Firefox下载浏览器并安装它,安装完之后启动firefox浏览器,点击右上角的菜单(那个“三”的小图标),然后点击“添加组件”,再然后搜索firebug,搜到之后直接安装这个组件即可。最后在firefox浏览器的靠近右上角的地方出现一个小虫子的图标就是FireBug了,见下图:


现在进入odoo的商城下单,直到如下付款的界面:

选择不同的付款方法,那个“现在支付”按钮下的信息就会改变,那么现在我们来找找改变这些信息的代码在哪里。

第一种方法:点击那个小虫子打开firebug界面,然后依次参照图中的1、2、3操作:

 

上图中已经告诉我们执行的js函数,我们双击这个函数打开包含这个函数的那个js文件,并定位到目标函数。js文件一般是经过压缩的,可读性极差,点击“{}”整理代码,如下图所示:

第二种方法:参见下图操作。

 

然后再点击“PayPal”前的那个点,这样就触发了事件了,见下图:

 

10、防火墙设置

如果服务器放在公网上,等于就暴露在不安全的外部世界,合理设置防火墙规则就显得至关重要了。

安装需要的软件包:
root@OdooDev:~# apt-get -y install iptables iptables-persistent

root@OdooDev:~# update-rc.d iptables-persistent defaults

root@OdooDev:~# cat >/etc/iptables/rules.v4 <<E"O"F

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
-A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 22,80,443,8069,8072 -j ACCEPT
-A OUTPUT -p udp --sport 53 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
-A OUTPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 22,80,443,5432 -j ACCEPT
COMMIT
# Completed on Fri Mar 27 00:30:59 2015
*nat
:PREROUTING ACCEPT [2:467]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [15:1045]
:POSTROUTING ACCEPT [15:1045]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8069

EOF

对于这个配置,说明如下:

(1)、放行进来的端口22,80,443,8069,8072,22号端口是ssh登陆的端口,不能禁止,否则没法远程登陆管理机器;80和443是网站服务端口,分别对应http和https协议,如果禁用了没法登陆odoo;8069是odoo的服务端口,尽管做了端口转发,还是要开启的;8072是在线聊天端口。

(2)、放行出去的端口22,80,443,5432,因为在登陆服务器后当然还希望再登陆到其他电脑,所以出去的22不能封;同时安装软件需要访问外部的80和443端口;5432是本机上的postgresql数据库,本机的odoo服务要访问数据库,对它来说当然是要出去了。

(3)、80端口转向到8069端口,采用nat技术。这样外面的人访问odoo时不用指定8069端口,直接访问域名如www.duse.com就行啦。

重启系统。
#COMMIT

 

10、模块开发

注意,如果用vim编辑,建议在文件末尾放上下面一行:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

一些提醒:

1)、继承:首先继承一个旧类以增加字段或方法,然后添加视图内容,如:

class pet_Animal(osv.Model):
_name = 'pet.animal'
_columns = {
……
'res_partner_id':fields.many2one('res.partner','Owner'),
}

class pets_res_Partner(osv.Model):
_inherit = "res.partner"
_columns = {
'animal_ids':fields.one2many('pet.animal','res_partner_id',string="Pets"),
} #继承res.partner类,增加字段animal_ids。在写本类时考虑的角度与res.partner一样。

如果重载了方法,那么一般首先会调用super()函数。下面再来集成并修改视图:

<record id="base_view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form.inherit.pet_animal</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<!--Adds a new page (tab) to the view after the tab Information -->
<xpath expr="//page[@string='Information']" position="after">
<page name="pets" string="Animal Pets">
<group>
<field name="animal_ids"/>
</group>
</page>
</xpath>
</field>
</record>

关于xpath expr更详细的参见Xpath expressions in Odoo 8

可以在windows或者Linux平台上履行odoo8的开发和调试任务,工具可以选择ecplise+pydev或者pycharm+java sdk,前者是免费的,而pycharm专业版是收费的,社区版是免费的,但是社区版功能要弱一些,pycharm专业版允许无偿使用1个月,之后就必须购买序列号,不过破解它也是容易的。pycharm是专门针对python语言的集成可视化开发环境,相对于ecplise的pydev插件更专业一些,但是ecplise的开发界面更通用一些,因为只要安装相应的插件,ecplise可以用来开发任何语言的程序了,比如c, c++, java, php, python,......

本文搭建采用:ubuntu 14.04 LTS 32位桌面版,  pycharm 4.0.3专业版, jdk-8u25-linux-i586.rpm

 

1、安装基本的包

# sed -i 's|cn.archive.ubuntu.com|mirrors.aliyun.com|g'  /etc/apt/sources.list

# apt-get update && apt-get -y upgrade && apt-get -y install vim python-pip

# apt-get install -y python-dateutil python-feedparser python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 python-pypdf python-decorator python-passlib

# pip install gdata

# apt-get install python-gevent
# pip install psycogreen                                                ---- odoo的在线聊天要使用这个包和上一步安装的python-gevent包
# echo 'LANG="zh_CN.UTF-8"'>/etc/default/locale #解决文件的修改日期乱码的问题
# echo 'LANGUAGE="zh_CN:zh"'>>/etc/default/locale
# update-grub2

 

2、安装和配置数据库

# apt-get -y install postgresql

# /etc/init.d/postgresql restart

# sudo -u postgres psql -e --command "CREATE USER odoo WITH SUPERUSER PASSWORD 'odoo_pass'"

 

3、准备odoo8源码

# mkdir -p  /opt/dev/custom-addons && cd /opt/dev && git clone -b 8.0 https://github.com/odoo/odoo.git

# mv odoo odoo8 && mkdir /opt/dev/odoo8/odoo-config

# cp /opt/dev/odoo8/debian/openerp-server.conf /opt/dev/odoo8/odoo-config/

# cat >/opt/dev/odoo8/odoo-config/openerp-server.conf <<E'O'F

[options]
; This is the password that allows database operations:
; admin_passwd = admin
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo_pass
addons_path = /opt/dev/odoo8/addons,/opt/dev/custom-addons
timezone = Asia/Shanghai
list_db = False
xmlrpc_port = 80
workers = 2
db_template = module_db
dbfilter = %d_db

EOF

如果没有xmlrpc_port参数,那么默认就是8069(参见程序/opt/dev/odoo8/openerp/tools/coonfig.py中的语句group.add_option("--xmlrpc-port", dest="xmlrpc_port", my_default=8069,help="specify the TCP port for the XML-RPC protocol", type="int"))。

参数list_db = False、db_template = module_db和dbfilter = %d_db主要用来把odoo配置成SaaS模式,list_db=False参数使得用户不能在登录界面上看到全部的套帐(数据库),因此无法选择套帐;dbfilter = %d_db参数指定:根据访问域名选择套帐,比如域名是www.xyz.com,那么选择的套帐就是xyz_db,另外的选择器%h表示整个域名,这对于SaaS形式的odoo非常有用。

 

4、安装pycharm

Pycharm需要JAVA JDK,从http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=ocomen下载最新的JDK到/opt/dev/,比如jdk-8u25-linux-i586.rpm

# apt-get install -y alien                                ----在ubuntu上需要采用工具alien来安装rpm格式的包

# alien -i -c /opt/dev/jdk-8u25-linux-i586.rpm                        -----注意:本命令要根据下载的具体文件名来定。

# java -version           ----查看java的版本信息

 从http://www.jetbrains.com/pycharm/download/下载最新专业版的Pycharm到/opt/下,可以试用30天,之后可以破解。

# cd /opt/ && tar -xzf pycharm-professional-4.0.3.tar.gz

# mv pycharm-4.0.3 pycharm

以后在图形的Linux桌面上运行/opt/pycharm/bin/pycharm.sh就可以启动可视化的python开发界面了。

注意:直接在Lisence server里输入

server选项里边输入 http://elporfirio.com:1017/就可以了。
不行再尝试:
server选项里边输入 http://idea.imsxm.com/

 

5、在pycharm中导入odoo项目

初始启动pycharm,在图形命令窗口中执行/opt/pycharm/bin/pycharm.sh

点击“Open…”打开并导入目录/opt/dev/odoo8,在集成开发环境中点击菜单“Run-->Resume Program”或者直接按F9,出现:

点击Edit Configurations…,新建一个启动配置:

这样在pycharm中启动odoo,对应的命令就是/opt/dev/odoo8/odoo.py --config=/opt/dev/odoo8/odoo-config/openerp-server.conf

下面是pycharm的集成开发调试界面。

 

 

6、odoo服务启动分析。

由于启动服务的命令是/opt/dev/odoo8/odoo.py --config=/opt/dev/odoo8/odoo-config/openerp-server.conf,所以我们从跟踪odoo.py开始,在pycharm集成环境中双击odoo.py打开文件:

Odoo.py定一了一系列的函数,最后两条语句是执行总路口,我们在main()处设置断点,然后开始跟踪调试,结果如下:

odoo.py>main():导入openerp,然后执行openerp/cli/__init__.py>main(),然后执行openerp/cli/server.py>main(args),>check_root_user()检查是否是根用户,如果是,则退出。由于我们是用root用户登录linux并做调试工作的,所以openerp/cli/server.py有一条语句改为 “if pwd.getpwuid(os.getuid())[0] == 'root1' :”,这样root用户也能运行odoo服务了。

openerp/tools/config.py>parse_config(args)分析配置文件(--config=/opt/dev/odoo8/odoo-config/openerp-server.conf)。

check_postgres_user()检查是否是postgres数据库用户,如果是则退出。

report_configuration()打印OpenERP版本信息,addons路径,数据库登录信息。

openerp/service/server.py>start(preload=None,stop=False):

装载全局模块(模块由--load命令行参数或server_wide_modules指定,默认模块是web,web_kanban),执行run(),执行start(),再执行http_spawn(self),开始监听80或者8069端口了,在执行run()时传递了application函数(在openerp/service/wsgi_server.py中定义)。服务器有三种(默认是ThreadedServer),在windows下只有ThreadedServer支持:

GeventServer if sys.modules.get("gevent").

PreforkServer if workers is defined in configuration.

ThreadedServer if none of the above are true.

文件openerp/service/server.py中定义了ThreadedServer服务器对应的类,类中方法run()完成:调用start()产生一个http线程和2个cron线程。http线程调用http_thread产生Werkzeug wsgi 守护服务进程,所有的web请求被传递给application函数(在openerp/service/wsgi_server.py中定义)。cron线程为每个数据库(套帐)每隔60秒钟调用_acquire_job(db_name)方法(方法的类ir_cron定义在openerp/addons/base/ir/ir_cron.py中)来处理后台任务。

 

application(environ, start_response)函数调用application_unproxied(environ, start_response)函数,这是WSGI服务的总入口,它又调用environment.manage()方法创建本地环境数据集(如数据库访问参数和本地缓存),其中数据库参数:cr-数据库游标,uid-用户id号,context-当前上下文的字典。

7、odoo.py的运行参数

打开文件openerp/tools/config.py,可以看到很多服务启动时用到的参数,这些参数可以在配置文件中定义,也可以在odoo.py的命令行上指定,一些重要的参数如下:

参数名 命令行参数名 说明 默认值 举例
addons_path --addons-path 指明额外的addons目录,多个目录用逗号分隔
admin_passwd 管理员密码

admin

auto_reload

--auto-reload

是否自动重载:true|false

false

config

--config, -c

指明配置文件
data_dir

--data-dir,-D

定义Odoo数据存放目录 $HOME/.local/share/Odoo
db_host

--db_host

定义postgresql数据库的ip地址

localhost

db_maxconn
db_name

--database,-d

指定数据库名称

False

db_password

--db_password,-w

数据库密码

db_user

--db_user,-r

数据库用户名

db_port

--db_port

数据库端口
db_template --db-template 指定模板数据库

Template1

dbfilter --db-filter 定义数据库过滤器,%h表示主机名,%d表示域名(除掉www和最后的部分),如通过www.duse.com访问odoo,那么自动选择duse_db套帐。

.*

 dbfilter=%d_db
debug_mode

--debug

是否以调试方式启动

False

email_from --email-from 发送邮件的地址

False

list_db

--no-database-list 不列出全部数据库

True

当指定False时,登录时要输入数据库名,适合于odoo的SaaS应用。
logfile --logfile 日志文件
publisher_warranty_url 'http://services.openerp.com/publisher-warranty/')

root_path

指明odoo的根目录 /opt/dev/odoo8/openerp/__init__.pyc的basename
smtp_password,smtp_port, smtp_server,smtp_user
server_wide_modules --load 指明odoo服务启动时需要装入的全局模块 web,web_kanban
timezone --timezone ,-t 指明服务器的时区,如Asia/Shanghai

False

timezone = Asia/Shanghai

workers --workers odoo服务的进程个数,一般等于cpu的核心数。当大于0时,会自动产生在线聊天的后台进程并监听8072端口

0

xmlrpc_interface --xmlrpc-interface 监听的网卡ip 默认监听全部网卡
xmlrpc_port --xmlrpc-port 监听端口,当端口小于1024时必须以root用户运行odoo服务。如果仍以普通用户运行且端口为8069,但是用户又要以80端口访问时,可以运行以下命令转发:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8069

8069

xmlrpc_port = 80 或者 --xmlrpc-port=80。

一般我们设计好一个具备基本功能的数据库(套帐),比如module_db,作为数据库模板,并定义在配置文件中。

db_host = localhost

db_port = 5432

db_user = odoo

db_password = odoo_pass

db_template = module_db

addons_path = /opt/dev/odoo8/addons,/opt/dev/custom-addons

publisher_warranty_url = False

timezone = Asia/Shanghai

list_db = False

; xmlrpc_interface = 192.168.0.12

xmlrpc_port = 80

workers = 4

 

8、用户浏览网页的过程

打开网页http://hostname:8069被自动重定向到http://hostname:8069/web,这是由/opt/dev/odoo8/addons/web模块处理的,我们重点检查文件controllers/main.py,看到里面的代码:

@http.route('/', type='http', auth="none")

def index(self, s_action=None, db=None, **kw):

return http.local_redirect('/web', query=request.params, keep_hash=True)

 

@http.route('/web', type='http', auth="none")

def web_client(self, s_action=None, **kw):

ensure_db() #选择和管理数据库

if request.session.uid:

if kw.get('redirect'):

return werkzeug.utils.redirect(kw.get('redirect'), 303)

if not request.uid:

#在同一台电脑上已经登录的用户

request.uid = request.session.uid

menu_data = request.registry['ir.ui.menu'].load_menus(request.cr, request.uid, context=request.context)   #获取菜单数据

return request.render('web.webclient_bootstrap', qcontext={'menu_data': menu_data})    #调用模板webclient_bootstrap渲染成网页并返回给用户

else:

#还没有登录的用户

return login_redirect()

由此可见,渲染会调用web.webclient_bootstrap模板(在/opt/dev/odoo8/addons/web/views/webclient_templates.xml中定义),模板中采用的样式定义在文件/opt/dev/odoo8/addons/web/static/src/css/base.css中。

 

9、附录

9.1)、在列表和表单界面上,隐藏系统的“create”:

在tree 和form 后直接加  create="false", 例如
〈tree string="XXX" create="false"〉
〈form string="YYY" create="false"〉

9.2)、在系统的print和more下拉菜单下添加子菜单:

方法一:
use key2="client_action_multi" in act_window to add submenu to "More" button
<act_window name="New Sub menu"
res_model="product.product"
src_model="product.product"
key2="client_action_multi"
view_mode="form" target="new"
view_type="form"
id="act_new_sub_menu" />

方法二:
You can goto Settings >> Technical >> Action >> Action Bindings. Then in search Group By Model and Type. Find the model product.product and expand it. You can see two types, client_print_multi (for items under Print button)and client_action_relate (for items under More button). You can choose the one you want and delete those entries which you want to hide in that type.
These action bindings are stored in "ir_values" table in your database.

OpenERP 7.0 安装与配置 2013年2月27日

转载时请注明以下内容:
本文来自非常开源博客www.veryopen.org
作者QQ: 2475729264 

对于中小企业来说,OpenERP 7.0比6.1更简化了,而且操作更人性化了,默认菜单非常简洁,但是现在还没有正式放出7.0版本,目前稳定性有点欠缺,存在一些BUG。实施与6.1相比界面有较大的变化。建议各位首先参考我的另一篇博文《OpenERP 6.1 实施手册》。特殊的地方列举如下:

*** 业务数据导入的顺序:会计科目类型、科目、会计账簿、业务伙伴分类、业务伙伴(客户和供应商)、产品分类、产品、BOM ***

1、首先安装后创建一个新的套帐(database),然后注销出来,再次登陆,打开管理员的“技术特性”:点击“用户|用户”,双击管理员用户,点击“编辑”按钮-->切到“访问权限”页,勾选“技术特性”。然后刷新页面就会发现设置菜单下多了很多字菜单项。

 

2、修改公司信息,点击“公司|公司”:上传公司logo、修改公司名称、地址、网站、开户行信息、联系电话等。

 

3、设置收发送邮件服务器:“设置》设置|常规设置”,点击“配置邮箱发件服务器”和“配置收取邮件网关”:主要设置SMTP服务器:smtp.ym.163.com,安全连接“SSL/TLS”,输入用户发送邮件的用户和密码。接受收件服务器:pop.ym.163.com,安全“SSL/TLS”,同样要输入用户名和密码。

 

4、安装更多的模块。每一个模块,存在两个位置的设置菜单,一是在“设置》设置”下,二是在具体的模块菜单的设置下,前者设置开启或关闭一个模块中的的更多菜单项,如:勾选“设置》设置》仓库”中的“管理多仓库和库位”,那么在仓库模块中会出现多库位操作的菜单项,系统默认是单库位。点击“模块|应用”-->在右上角的搜索框中选择按Category分类显示。安装模块“Purchase Management”,会自动连带安装会计和仓库模块;再安装“Sales Management”、“CRM”、“Accounting and Finance”。这样一个进销存系统需要的功能就都齐了。

 

5、进一步汉化:存在一些英文菜单需要进一步汉化。

1)、重新导入一个翻译,“设置|翻译》导入一个翻译”,在弹出的窗口中:选择“Chinese (CN)/简体中文”,勾选“覆盖已存在的术语”,最后点击“加载”按钮,并注销、重启OpenERP服务、再次登陆,就会发现少了一些英文菜单。

2)、登陆页面汉化:把 base.xml 下载下来,覆盖Server\server\openerp\addons\web\static\src\xml\下的同名文件(windows系统),或/usr/share/pyshared/openerp/addons/web/static/src/xml/base.xml (ubuntu系统)。

3)、点击“设置》翻译|应用程序术语》已翻译术语”,然后在搜索框中搜索需要翻译的词条,比如:Sales Receipts,点击输入框自动下拉的“搜索 原文: Sales Receipts”,找到“已经翻译字段”为“ir.ui.menu,name”和“语言”为“Chinese(CN)/简体中文”的行,在该行“翻译”列中输入“销售票据”,然后点击保存,点击菜单“会计”并刷新屏幕,就可看到翻译的结果。

4)、“消息》我的群组”下的“Whole Company","Company News"和"Company Jobs"翻译有点特殊,方式如下:

设置》技术|用户界面》菜单项,然后搜索“Companyy Jobs”,点击搜索出来的行-->“编辑”按钮-->点击“Company Jobs"右边的语言小图标,接下来的操作很简单。

5)、解决报表的中文乱码:
执行命令:python -c "import reportlab; print reportlab.__file__",返回如下:
/usr/lib/python2.6/site-packages/reportlab/__init__.pyc
cd  /usr/lib/python2.6/site-packages/reportlab
mkdir fonts
cp  /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc  ./fonts/
注意:如果没有这个字体,就用命令yum install wqy-zenhei-fonts 安装
从这里(http://v6apps.openerp.com/addon/8563)下载oecn_base_fonts.zip,解压后放在addons目录下(ubuntu 下为/usr/lib/pymodules/python2.7/openerp/addons和/usr/share/pyshared/openerp/addons下,如果是bzr安装,那么在目录openerp/addons下),然后执行“设置》模块|更新”和设置》模块|可安装的模块”搜索并安装oecn_base_fonts模块,安装时提示要替换的字体,全部选择“WenQuanYiZenHei”,并勾选CJK Wrap即可。以后也可以通过“设置》设置|常规设置”进入字体替换界面。
重启OpenERP即可。注意:如果不行的话,重新卸掉再安装一般是没问题了。在“设置|技术|参数|系统参数”里查看fonts_map参数,验证字体替换正确否。

6、新增销售用户salse1、采购用户purchase1、仓库用户stock1、财务用户account1,点击“设置》用户|用户”,第一次创建用户不要输入邮件地址,保存之后再来修改,把邮箱地址加进去,就不会报错。

一、会计模块

1、全局参数设置:设置|设置|会计,在这里设置币种=CNY,日记账分录小树精度=2,勾选“全部会计特性:分类账,税务报表,会计科目表 等等”,设置公司银行账户

1、调整科目类型:

2、科目调整:会计科目是财务核算的基础,需要遵循中国的会计准则,安装完会计模块后会自动导入中国的会计科目表,但是导入的会计科目存在一些问题,需要手工调整:所有一级科目内部类型全改为“视图”(view),开设的账簿对应各个子科目。

1)、采用下面的命令把科目编号后面的0去掉:

update account_account set code=rtrim(code,'0') where code!='0' and code not like 'X%' ;

2)、采用下面的命令把一级科目内部类型改为视图:

update account_account set type='view' where level=1 and code not like 'X%' ;

下面统一在“会计》设置|科目》科目”中操作:

3)、把“100201 现金”、“100202 银行”等多余的科目删除。

4)、在需要开设账簿的业务科目下,创建需要的二级子科目,如:

100201 农业银行存款  资产类

100202 中国银行存款  资产类

100203 工商银行存款 资产类

100101 现金  资产类

112201  应收账款(A公司)  应收款  资产类

140101 材料采购  资产类

140201 在途物资  资产类

140601 库存商品  资产类

140701 发出商品 资产类

220201  应付账款(B公司)  应付款 负债类

400101 实收资本金-A股东

400102 实收资本金-B股东

600101 主营业务收入 损益类

690101 以前年度损益调整  损益类

注意:科目调整了,参数也要调整(在“设置|技术|参数|设置参数”里做)。

8、调整账簿:账簿是凭证记账的基础。默认系统中存在一些基本账簿,但是由于科目内部类型经过调整(参考上面内容),所以这些账簿归属的科目需要修改。点击“会计》设置|账簿》账簿”:主要修改各个账簿的借、贷方科目。

8、调整参数:设置|技术|参数|设置参数,修改设计会计科目的参数

9、设置公司的银行科目:这里设置的银行科目只是录入公司的银行账号开户信息。点击“会计》设置|科目》设置银行科目”,由于在前面修改公司信息的时候已经设置了公司的开户行,这里只要设置开户行对应的账簿即可,如“农业银行存款(CNY)”账簿。

**安装oecn_account_print中国格式的报表模块:bzr branch lp:openerp-china/7.0 && cp -a 7.0/oecn_account_print /opt/openerp/addons/ && chown -R openerp.openerp /opt/openerp/addons/oecn_account_print,然后再去ERP系统里安装。这个模块不能直接从网上下载zip文件,安装时报错。

10、期初余额的输入:会计》会计凭证,在“账簿开账分录”账簿上记一笔多借多贷分录,确保借贷相等,如果借贷不等,那么就报错。账簿“账簿开账分录”没有对应的科目。如:

借:现金  100000
借:中行存款 50000
贷:实收资本 150000

11、对全部用户隐藏一个菜单
首选创建一个组“易用性/NoUsers”,然后把隐藏菜单所关联的对象授权给“易用性/NoUsers”组,并且没有“读/写/删/建”权限。具体操作:设置|安全设置|访问控制列表,找到那个对象点击编辑即可。

12、添加合作伙伴分类和合作伙伴:创建分类-->销售|设置|地址簿|合作伙伴标签;创建合作伙伴-->销售|销售|客户,客户、供应商等都在这里创建(参数不同)。

13、创建产品分类和产品:创建分类-->销售或仓库|设置|产品|产品分类,会计记账信息会影响到归属此类的产品(如果产品没有记账科目);创建产品-->销售或仓库|产品|产品

14、库房库位:要求出入库都要质检。

然后在“设置|设置|仓库”上勾选“管理多库位和仓库”和“Create push/pull logistic rules”,新建“质检区”,结果如下:

物理库位 / 您的公司 / 库房
物理库位 / 您的公司 / 出库区
物理库位 / 您的公司 / 质检区

然后建立两条库位链:
质检区 --> 库房。建立质检区时输入的参数有:连锁库位类型:固定库位,下级库位:物理库位/您的公司 库房,库链类型:手动操作,移库单类型:收货
出库区 --> 业务伙伴库位/客户。修改出库区的参数: 连锁库位类型:客户,库链类型:手动操作,移库单类型:送货

注意“库链类型:手动操作”,就是说都要由质检员手工确认后货物才移动到下级库位。

库房货物初始化:仓库|盘点控制|实物盘点表,对于每一种货品输入一个处置。上面这种库位链是针对全部商品的,也就是说所有的商品都是经过同样的链。如果要针对特定的商品、达到一定数量后才质检,其他的不质检直接入库,又如何实现呢,这时就要安装模块stock_location了,此模块实现“推/拉”库位链,模块装完后会在产品的表单视图的盘点页上添加“推/拉”流。定义在产品上的“推”流规定:当改产品到达一个库位(称为“源”库位)后手动(或者在等待一定天数后自动)推送到目标库位,这样就可以实现针对特定商品的质检了。定义在商品上“拉”流对于集中采购或者生产(总公司)而分散销售(每个销售点有一个库)特别有用,比如一个分销点销售若干商品给客户,这个分销点库存不足,那么就产生一个向总部要货的内部调拨单,总部库存不足,又会产生一个采购单(采购补货)或者生产单(生产补货);即:

客户<---n件A商品---分销点<---m件A商品---总部<---k件A商品---A商品供应商(或者生产部)。

那么结合产品的库存规则,配置如下:

仓库|设置|再订购规则:
产品=A,库位=物理库位/您的公司/库房,最小数量=5,最大数量=10
产品=A,库位=物理库位/分销点,最小数量=2,最大数量=4

仓库|产品|产品:打开A产品的编辑表单,在盘点页上添加两条“拉”流:

(1)、名字=从总部要货,目标库位=物理库位/南门分销点,需求类型=调拨,源库位=业务伙伴库位/内部调拨,货运类型=收货
(2)、名字=配送, 目标库位=业务伙伴库位/内部调拨,需求类型=调拨,源库位=物理库位/你的公司/库房,货运类型=送货

注意:需要先创建“物理库位/南门分销点”库位和“南门分销点”仓库(入库库位和存货库位都是“物理库位/南门分销点”,出库库位为“物理库位/你的公司/出库区”);

现在假设南门分销点确认了一份销售1件A商品的订单,然后运行“仓库|排程|计划运行”,然后检查商品A的库位移动记录(仓库|课追溯的|库存调拨)就会发现一条从“物理库位/你的公司/库房” 到 “业务伙伴库位/客户” 的移动记录。

分批发货:仓库|按订单接收发送产品|送货单,打开要发货的单子,输入本次送货的数量即可。实际上就是拆分了两个单子。
退货处理:仓库|按订单接收发送产品|送货单,打开被推货物所在的那个单子,点击“退货”按钮,在弹出的画面上进行处理即可。产生一条从“业务伙伴库位/客户” 到“物理库位/你的公司/库房”的移动记录。
多计量单位:一种商品可以采用多种计量单位,比如克、千克、吨 等,在“设置|设置|仓库”页上勾选“管理产品的不同计量单位”,然后就可以在“仓库|设置|计量单位”里设置了。但如果要支持两种属于不同类型的计算单位(比如长度和重量),则要勾选“产品开票计量单位可与销售订单上的计量单位不同”,然后在产品表单的销售页上增加了“计量单位 -> 销售单位的系数”。
多种包装方式:在“设置|设置|仓库”勾选“允许定义产品的多种包装方式”,然后在“仓库|设置|产品|包装” 下定义各种包装方式。最后可在产品表单视图的销售页中添加包装方式了。

补货方式:生产补货的产品必须事先定义其BOM,采购补货的产品必须事先定义其供应商且供应商必须定义了地址,同时产品必须定义了上下线库存量,否则单子被阻塞。在“仓库|排程|需求异常”下可以查看所有的被阻单子,在这里还可以手工创建一个补货单子并安排将来某个时刻运行。

 

15、采购:创建询价单并发送到供应商-->供应商反馈-->确认询价单(自动转为采购单)-->领导批准采购单-->接受商品-->根据发票付款

这里重点是理解发票开具方式,系统里提供了三种选择:基于采购单行开票(针对部分商品开票)、基于采购单开票(产生采购单的同时生产草稿发票)和货到开票(仓管员确认收货单据时产生发票草稿)。采购开票方式供应商,但是作为甲方,也必须要在ERP里跟踪记载发票内容。

16、销售:从报价单开始。这里关键是要理解价格表,一个价格表可以包含多个版本,但是同一时刻只有一个版本有效,每一个版本都有一个生效日期区间,如果省略,表示永久有效。这样通过版本号和生效日期区间来划分空间域和时间域。

12、及时调度:默认情况下,后台任务是一天调度一次,且一般安排在深夜以减轻服务器的负担(在“设置|技术|计划|计划的动作”下修改调度时间)。但是也可以及时调度,安装模块mrp_jit,及时调度存在缺陷:订单间的优先级没法控制,增加库存(如一个月之后发货的订单由于现在就处理了,所以要在仓库中锁定一定数量的货品)。

12、审计模块audittrail,可以用来跟踪所有用户对全部对象的操作,慎重开启审计功能,因为会消耗大量的计算机资源

13、打印一种业务的流程:在开发者模式下,勾选一条记录(比如报价单或者订单),然后点击屏幕左上角的下拉框并选择“打印工作流”。

14、查看流程视图:在开发者模式下,点击视图界面上的高进屏幕左上角的小问号图标即可查看得到。

19、默认下,财务人员(包含经理)没有给用硬伤付款的权力,报没有对purchase.order对象写的权限,因为给供应商付款需要修改订单的状态。所以需要给“会计与财务 / 发票与付款”组赋予读和写的权限:设置|技术|数据库结构|模型,搜索“purchase.order”,进入其表单视图的编辑状态,点击“权限”页上,添加“会计与财务 / 发票与付款”组的读写权限。

 

附录A:问题处理。

1、chrome浏览OpenERP 7报错Script error :0,禁用金山词霸的chrome扩展即可:工具-->扩展程序-->禁用金山词霸。如果还不行,一个个扩展禁用看看。

2、Uncaught TypeError: Cannot call method 'get_title' of undefined

处理: vim addons/web/static/src/js/views.js

-        this.$el.find('.oe_breadcrumb_title:first').html(this.get_action_manager().get_title());

+        if(this.get_action_manager())

+            this.$el.find('.oe_breadcrumb_title:first').html(this.get_action_manager().get_title());

 

附录B:Linux下的OpenERP 7.0 自动安装脚本

1、在CentOS 6.3 X64位上安装OpenERP 7.0的脚本(最终安装在/usr/lib/python2.6/site-packages/openerp-7.0_xxxxxx下):

install_openerp.bash

也可以 采用以下命令下载:
wget  http://www.veryopen.org/wp-content/uploads/install_openerp.bash
然后执行它即可安装:
chmod +x install_openerp.bash
./install_openerp.bash

最后浏览网址:http://ip:8069/
ip要具体输入centos 6.3机器的ip地址。

2、在ubuntu 12.04 X64上安装的脚本:install_openerp7_ubuntu.bash,执行这个脚本前要求机器连上因特网,同时还要修改脚本里的openerp用户的密码。

 

附录C:查看一个菜单被授权给哪个组
设置|用户界面|菜单项,搜索到目标菜单,转到表单视图,“组”页上列出了全部的被授权组。

第一部分:IT设备监控模块介绍。

在现代企业中,IT环境变得越来越庞大,用到的设备、系统和服务也是各种各样。如果不采用一些自动监控方法,那么人工监控将变得越来越困难,甚至是不可行的。为此,人们开发一些监控软件,有的是商用的,也有开源的,商用的监控软件价格普遍比较贵,但是他们能提供良好的售前、售后服务,相反,开源的监控软件免费使用,源代码开放,而且性能和功能上跟商用监控软件几乎旗鼓相当。可为什么开源的监控软件使用量并不多呢?原因主要有:大公司不用是因为没有第三方提供技术支持,比如华为规定不用免费的软件;小公司不用是因为自身技术人员缺乏,当然他们也买不起商用监控软件,当然小型公司需要监控的设备也不多,所以他们的需求本身也不强烈;中型公司使用开源监控软件的比率稍微高一些,缺乏技术人员仍然是主要原因。

阅读全文

环境:CentOS 6.0 X86_64,OpenERP 6.1-1

1、准备源码包
# cd /tmp
# wget http://nightly.openerp.com/6.1/nightly/src/openerp-6.1-20120512-233338.tar.gz

阅读全文

OpenERP 6.1 实施手册 2012年5月01日

众所周知,ERP是三分技术,七分实施,可见任何一个ERP,实施是关键。对OpenERP 6.1,经过两个月的测试,加上本人以前多年的ERP实施经验,总算圆满完成了业务操作前的全部工作,包括安装、汉化、BUG修改、初始化以及数据导入等,也就是只要你参照本手册,您就能把系统带入到业务发射点位置。

阅读全文

Basic color schemes 2012年1月04日

With colors you can set a mood, attract attention, or make a statement. You can use color to energize, or to cool down. By selecting the right color scheme, you can create an ambiance of elegance, warmth or tranquility, or you can convey an image of playful youthfulness. Color can be your most powerful design element if you learn to use it effectively.

阅读全文

企业即时通讯市场研究 2011年12月11日

企业即时通信,简称EIM(Enterprise Instant Messaging),它是一种面向企业终端使用者的网络沟通工具服务,使用者可以通过安装了即时通信的终端机进行两人或多人之间的实时沟通。交流内容包括文字、界面、语音、视频及文件互发等。

阅读全文

OpenERP号称是最容易部署的开源erp,这话是针对windows安装的——只要下载一个安装包,然后一路点击“下一步”就可以搞定。但是在Linux操作系统上,安装却并不容易,开发者也专门写了一个在ubuntu上安装的指导,这个指导也是寥寥数语,如果您的Linux功底不行,是很难安装成功的,而在CentOS上安装几乎是一个噩梦,但不管怎么样。下面我把在Ubuntu Server 10.04和CentOS 6.0上安装的步骤写出来,供大家参考。

常见开源协议 2011年7月20日

先上图:

 

 

常见的五种简介: