odooodoo 在线演示支付完成后调用的哪个方法

<table width="730" height="64" border="0" cellspacing="0" cellpadding="0"OpenERP(45)
因为用户业务量增加,在使用Odoo时开始有出现性能问题,暂时还没有进行其它方面的性能诊断和调优,先了解一下odoo的处理机制,根据网上的说明,odoo有一个workers的参数来开启多进程作业模式,查网上说开了多进程以后,系统的cron job会停止启动,这样子也会影响一些自动化任务处理。
后来找谷歌了解了一下有关workers和cron的问题,其中有一遍文章进行了一些说明,并且给出了一个修改建议,先记录如此,找个时间调整一下。
在openerp/service/server.py中找到调用load_server_wide_modules()的位置,在此代码后增加一行ThreadedServer(None).cron_spawn()
参考原文:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:119622次
积分:2187
积分:2187
排名:第11263名
原创:88篇
转载:16篇
评论:55条
(1)(1)(1)(3)(5)(1)(1)(6)(1)(2)(2)(3)(4)(3)(1)(3)(1)(1)(4)(3)(2)(1)(3)(2)(22)(18)(2)(1)(8)linux su和sudo命令的区别
作者:佚名
字体:[ ] 来源:互联网 时间:04-13 11:02:50
一. 使用 su 命令临时切换用户身份
1、su 的适用条件和威力
  su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出beinan用户
一. 使用 su 命令临时切换用户身份
1、su 的适用条件和威力
  su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出beinan用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出beinan用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。我们可以看到当然通过su 切换是一种比较好的办法;
  通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证;
  2、su 的用法:
  su [OPTION选项参数] [用户]
  -, -l, &&login 登录并改变到所切换的用户环境;
  -c, &&commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境;
  至于更详细的,请参看man su ;
  3、su 的范例:
  su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境;用户默认的登录环境,可以在/etc/passwd 中查得到,包括家目录,SHELL定义等;
  [beinan@localhost ~]?$ suPassword:[root@localhost beinan]# pwd/home/beinan
  su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;
  [beinan@localhost ~]?$ pwd/home/beinan[beinan@localhost ~]?$ su -Password:[root@localhost ~]# pwd/root
  su 参数 - 用户名
  [beinan@localhost ~]?$ su - root 注:这个和su - 是一样的功能;
  Password:
  [root@localhost ~]# pwd
  [beinan@localhost ~]?$ su - linuxsir 注:这是切换到 linuxsir用户
  Password: 注:在这里输入密码;
  [linuxsir@localhost ~]?$ pwd 注:查看用户当前所处的位置;
  /home/linuxsir
  [linuxsir@localhost ~]?$ id 注:查看用户的UID和GID信息,主要是看是否切换过来了;
  uid=505(linuxsir) gid=502(linuxsir) groups=0(root),500(beinan),502(linuxsir)
  [linuxsir@localhost ~]?$
  [beinan@localhost ~]?$ su - -c ls 注:这是su的参数组合,表示切换到root用户,并且改变到root环境,然后列出root家目录的文件,然后退出root用户;
  Password: 注:在这里输入root的密码;
  anaconda-ks.cfg Desktop install.log install.log.syslog testgroup testgroupbeinan testgrouproot
  [beinan@localhost ~]?$ pwd 注:查看当前用户所处的位置;
  /home/beinan
  [beinan@localhost ~]?$ id 注:查看当前用户信息;
  uid=500(beinan) gid=500(beinan) groups=500(beinan)
  4、su的优缺点;
  su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;&没有不安全的系统,只有不安全的人&,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的;
二. sudo 授权许可使用的su,也是受限制的su
  1. sudo 的适用条件
  由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
  通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
  sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
比如我们想用beinan普通用户通过more /etc/shadow文件的内容时,可能会出现下面的情况;
  [beinan@localhost ~]?$ more /etc/shadow/etc/shadow: 权限不够
  这时我们可以用sudo more /etc/shadow 来读取文件的内容;就就需要在/etc/soduers中给beinan授权
  于是我们就可以先su 到root用户下通过visudo 来改/etc/sudoers ;(比如我们是以beinan用户登录系统的)
  [beinan@localhost ~]?$ su
  Password: 注:在这里输入root密码
  下面运行visodu;
  [root@localhost beinan]# visudo 注:运行visudo 来改 /etc/sudoers
  加入如下一行,退出保存;退出保存,在这里要会用vi,visudo也是用的vi编辑器;至于vi的用法不多说了;beinan ALL=/bin/more 表示beinan可以切换到root下执行more 来查看文件;
  退回到beinan用户下,用exit命令;
  [root@localhost beinan]# exit
  [beinan@localhost ~]?$
  查看beinan的通过sudo能执行哪些命令?
  [beinan@localhost ~]?$ sudo -l
  Password: 注:在这里输入beinan用户的密码
  User beinan may run the following commands on this host: 注:在这里清晰的说明在本台主机上,beinan用户可以以root权限运行more ;在root权限下的more ,可以查看任何文本文件的内容的;
  (root) /bin/more
  最后,我们看看是不是beinan用户有能力看到/etc/shadow文件的内容;
  [beinan@localhost ~]?$ sudo more /etc/shadow
  beinan 不但能看到 /etc/shadow文件的内容,还能看到只有root权限下才能看到的其它文件的内容,比如;
  [beinan@localhost ~]?$ sudo more /etc/gshadow
  对于beinan用户查看和读取所有系统文件中,我只想把/etc/shadow 的内容可以让他查看;可以加入下面的一行;
  beinan ALL=/bin/more /etc/shadow
  题外话:有的弟兄会说,我通过su 切换到root用户就能看到所有想看的内容了,哈哈,对啊。但咱们现在不是在讲述sudo的用法吗?如果主机上有多个用户并且不知道root用户的密码,但又想查看某些他们看不到的文件,这时就需要管理员授权了;这就是sudo的好处;
  实例五:练习用户组在/etc/sudoers中写法;
  如果用户组出现在/etc/sudoers 中,前面要加%号,比如%beinan ,中间不能有空格;%beinan ALL=/usr/sbin/*,/sbin/*
  如果我们在 /etc/sudoers 中加上如上一行,表示beinan用户组下的所有成员,在所有可能的出现的主机名下,都能切换到root用户下运行 /usr/sbin和/sbin目录下的所有命令;
  实例六:练习取消某类程序的执行:
  取消程序某类程序的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法;
  beinan ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk 注:把这行规则加入到/etc/sudoers中;但您得有beinan这个用户组,并且beinan也是这个组中的才行;
  本规则表示beinan用户在所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外;
  [beinan@localhost ~]?$ sudo -l
  Password: 注:在这里输入beinan用户的密码;
  User beinan may run the following commands on this host:(root) /usr/sbin/*(root) /sbin/*(root) !/sbin/fdisk[beinan@localhost ~]?$ sudo /sbin/fdisk -lSorry, user beinan is not allowed to execute '/sbin/fdisk -l' as root on localhost.
  注:不能切换到root用户下运行fdisk 程序;
如果有sudo 的权限而没有su的权限:
大家感兴趣的内容
12345678910
最近更新的内容Odoo 8.0深入浅出开发教程(十) 附录
&#xe614;博客专家
Odoo 8.0深入浅出开发教程(十) 附录
Tutorial教程
Odoo&OpenERP
13.1&Odoo里老的API
_name 点号记法 对应具体SQL表名 _columns {
} 表述SQL表头
_defaults 字典&#20540; 描述默认&#20540;
_inherits 委托继承
13.2&PostgreSQL数据库命令行操作
13.2.1&命令行数据库备份
13.3&反向代理(reverse proxy)
反向代理如下图所示【图片来自wiki】
Figure 31:&反向代理
其之所以叫做反向是相对于我们常见的代理翻墙软件而言的,翻墙软件叫做前向代理,其代理是给客户端用的,而反向代理具体是给服务器端用的。反向代理的用途有加密,安全,缓存,压缩负载均衡等等。有名的Apache软件就是一个反向代理软件,此外还有ngnix软件也是一个不错的反向代理软件。
13.3.1&安装ngnix软件
13.3.1.1&释放http默认端口号
http的默认端口号是80,这不应该被占用,可使用curl命令检测之。
其应该返回连接不上的错误:
$ curl http://localhost
curl: (7) Failed to connect to localhost port 80
如果有响应,则需要将对应的服务停用掉。然后再安装ngnix软件。
在ubuntu下安装ngnix软件很简单,使用apt-get安装即可:
sudo apt-get install ngnix
安装完了之后再&curl http://localhost&应该返回ngnix的一些信息了。
然后人们一般把默认的配置文件给删除了:
sudo rm /etc/nginx/sites-enabled/default
在&/etc/nginx/available-sites/&编写可用网站的配置文件,如果想具体使用该网站的配置文件,就创建一个符号连接到目录&/etc/nginx/enabled-sites/&。
具体创建一个odoo的配置文件如下:
sudo touch /etc/nginx/sites-available/odoo
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
然后开始编辑配置avilable-sites文件夹下的那个odoo文件。初步将文件修改如下:
upstream backend-odoo {
server 127.0.0.1:8069;
location / {
proxy_pass http://backend-
这里upstream 可看作上传流,名字,然后具体对应的端口号。然后服务器server的location应该是入口点,然后proxy_pass这里的http://backend-odoo 应该就具体对应前面upstream的那个backend-odoo。具体细节后面再慢慢了解。
sudo nginx -t
来测试下nginx是否工作正常,正常的话再重启下nginx服务。
sudo /etc/init.d/nginx reload
然后进入浏览器输入localhost,我们已经能够正常登入odoo了。
13.3.2&强制https连接
13.3.3&nginx优化
13.3.4&轮询机制
13.4&跟踪项目源码初始化进程
首先我们看到odoo.py的main函数,正常的输入&./odoo.py&前面的if语句都没有执行,直接跳转到openerp.cli.main()&那里。
然后接下来执行一个&openerp.cli.server.Server&对象,并调用这个对象的run方法,继而执行cli文件夹下server.py的main函数,然后args参数也传递过来了(比如&['--addons-path=addons,myaddons'])。
接下来执行&check_root_user&函数,检查当前用户是不是root用户,如果是这样很不安全,程序终止。
首先是初始化这个对象,在openerp.tools的config.py文件中,初始化class configmanager 。一些基本的参数设置和命令行选项帮助信息等的设置。接下来处理传递过来的参数openerp.tools.config.parse_config(args)&,实际的刷参数和设置参数。
然后是&check_postgres_user&检查数据库用户是不是 postgres,如果是太过于危险,程序退出。
然后是&report_configuration&报告配置情况。
配置初始化之后,根据配置进行了一些基本的抉择,然后执行&setup_pid_file&函数,为进程创建一个文件,还不太懂。
然后是这个:
rc = openerp.service.server.start(preload=preload, stop=stop)
具体是openerp的service文件夹的server.py的start函数,参数我们假设这里都是默认&#20540;None,这个函数就是启动openerp的http服务器和cron处理器。
server这个服务器变量被定义为了一个全局变量,然后开始执行&load_server_wide_modules&这个函数,
然后接下来是:
INFO:root:now i am load the module web
INFO:root:now i am load the module web_kanban
通过调用openerp→modules文件夹下的module.py的&load_openerp_module&函数来加载某个模块。
这是避免重复加载:
global loaded
if module_name in loaded:
接下来就是具体处理模块的路径问题,这里有些细节先略过,然后就是将其作为一个python模块加载进来,然后读取模块的基本信息。
作为python模块大家都清楚必须要有&__init__.py&文件,然后模块的基本信息是写在__openerp__.py&文件里面的。然后模块那边还有很多细节问题,比如&__init__.py&里面一般有
import controllers
也就是本文件夹下应该有个 controllers.py 文件,其内代码将被加载或说被执行。 然后__openerp__.py&里面描述了包的依赖,从其中我们可以看到,它们都依赖于openerp→addons里面的base&模块,这个base模块里面的细节也需要详细讨论。这些细节在这里我们先略过。现在假设web和web_kanban这两个模块都加载好了。
if openerp.evented:
server = GeventServer(openerp.service.wsgi_server.application)
elif config['workers']:
server = PreforkServer(openerp.service.wsgi_server.application)
server = ThreadedServer(openerp.service.wsgi_server.application)
我们再看到openerp→service的&wsgi_server.py&文件的application函数。
假设没设置代理的话,其对应的是&application_unproxied(environ, start_response)&这就是WSGI接口层的一些东西,这里的细节先略过,其中还进行了线程封装等等,然后就是:
rc = server.run(preload, stop)
就是具体开始运行服务器了。至此程序进入和用户交互的环节了。
在服务器进入和用户交互之后,如果你输入&127.0.0.1:8069&,程序要处理两个handler:
08:40:16,875 6807 INFO ? root: i found the handler &function wsgi_xmlrpc at 0xb56d2614&
08:40:16,876 6807 INFO ? root: i found the handler &openerp.http.Root object at 0xb54f69ec&
第一个是wsgi_xmlrpc,第二个就是openerp.http.Root的一个实例。其中第一个我估计和具体xml rpc通信有关,然后第二个就是具体刷新根目录需要做的工作。然后我们看到
08:40:17,011 6807 INFO ? openerp.addons.bus.bus: Bus.loop listen imbus on db postgres
08:40:17,246 6807 INFO ? openerp.addons.report.models.report: You need Wkhtmltopdf to print a pdf version of the reports.
08:40:17,329 6807 INFO ? openerp.http: HTTP Configuring static files
08:40:17,336 6807 INFO odoo openerp.modules.loading: loading 1 modules...
08:40:17,344 6807 INFO odoo openerp.modules.loading: 1 modules loaded in 0.01s, 0 queries
08:40:17,361 6807 INFO odoo openerp.modules.loading: loading 47 modules...
08:40:17,443 6807 INFO odoo openerp.modules.loading: 47 modules loaded in 0.08s, 0 queries
08:40:18,040 6807 INFO odoo openerp.modules.loading: Modules loaded.
08:40:18,041 6807 INFO odoo openerp.addons.base.ir.ir_http: Generating routing map
08:40:18,643 6807 INFO odoo werkzeug: 127.0.0.1 - - [11/May/:18] &GET / HTTP/1.1& 200 -
程序一是建立和数据库的连接,然后进行HTTP的相关配置,然后加载模块,然后是生成寻址map,然后就是通过werkzeug进行WSGI通信,GET /。后面的内容就会更加琐碎了,就是具体什么路径什么模块,什么WSGI通信和响应等等了。这一块我们先暂时略过,先看看web和web_kanban这两个模块。这两个模块在服务器还没有启动之前就加载了,所以是些什么内容呢?然后还有base模块肯定也已经加载进去了。
13.4.1&base模块
因为其他所有的模块都依赖于base模块,所以base模块的一些内容会被其他模块调用,比如在web的controllers下的main.py中就有这样的导入语句:
from openerp.addons.base.ir.ir_qweb import AssetsBundle, QWebTemplateNotFound
这个&openerp.addons.base.ir&里面有很多py文件,要了解起来是要花费一定的时间的,这个ir_qweb.py看起来和QWEB模板系统有关。然后还有其他很多内容。。
13.4.2&web模块
随便翻翻web模块的controllers文件夹下的main.py文件,其主要和数据库管理页面还有登录页面有关。
13.4.3&web_kanban模块
这个模块没什么python代码,&#20284;乎就是前面web模块的一些数据补充?
13.5&配置会计科目
13.5.1&配置会计科目类型
看到会计→设置→科目→科目类型。
新建下面四项:
P&L/BS分类
不结转(None)
损益表(收益)[Profit & Loss (Income Accounts)]
结转未核销往来明细(unreconciled)
损益表(费用)[Profit & Loss (Expense Accounts)]
结转未核销往来明细(unreconciled)
资产负债表(资产)[Balance Sheet (Assets Accounts)]
结转余额(Balance)
这里的P&L/BS分类还有一个Balance sheet(Liability account) 中文翻译是负债和权益类,觉得应该翻译为 资产负债表(负债) ,以后核实之后再说。
然后结转方式,参考了&&,中文翻译一&#30524;看过去估计只有那些专业人员才看得懂。
None 原翻译是不结转, 我觉得应该翻译为无 ,意思是年末结转的时候不会考虑这个类型的科目。balance 翻译为结转余额 ,还行吧,意思是年末结转时会将这个科目的余额转为下年的期初余额。details 翻译为结转所有往来明细,还行,。意思是年末结转时会把该科目的凭证行逐行转入下年。unreconciled 翻译为结转未核销往来明细,意思是年末结帐时会把该科目未对账的凭证行逐行转入下年。可简单翻译为未对账。
13.5.2&配置会计科目
看到会计→设置→科目→科目。
需要会计科目来处理未付款的销售订单和采购订单,货物的收发两个以上,资金的收付款一个。还有一个 组织 科目视图。所以需要如下6个会计科目。
这个分录也就是所谓的Journals 日记帐。在会计→设置→分录→分录那里。
新建下面三个条目:
日记账名称
对象实体序列
默认借方科目
默认贷方科目
采购日记账
采购日记账(Purchase Journal)
销售日记账
账户默认销售日志(Account Default Sales Journal)
银行日记账
账户日记(Account Journal)
13.7&新建业务伙伴
13.7.1&新建业务伙伴标签
在销售→设置→地址薄→合作伙伴标签那里。
新建两个业务伙伴标签: 供应商 和 客户。
13.7.2&新建客户
在销售→销售→客户那里。
点击创建来新建一个客户:
13.8&创建新的产品
在仓库→产品→产品那里或者销售→产品→产品那里可以创建新的产品。
在需求→cost price 那里输入成本价;在标价那里输入销售价。
13.9&设置会计年度
在会计→设置→会计期间→会计年度那里。
设置好一年之后可以点击创建季度从而自动生成几个季度的会计期间。
13.10&向供应商下单
在采购→采购→询价单那里。
新建一个询价单。
13.11&会计学入门
会计系统反映了企业的两个基本方面: 自己有什么和欠别人什么。资产(assert)是企业拥有或控制的能够给企业带来未来经济效益的资源。例如: 现金,物料,设备和土地等。负债(liabilities)是企业欠非其所有者(债权人)的债务,未来需要用现金、产品或服务来偿还。权益(equity)是指企业所有人对企业资产所享有的求偿权。
总的来说有:
资产 = 负债 &#43; 所有者权益
负债已经放在所有者权益前面,因为负债应该先被满足。此外还有一个扩展的会计公式:
资产 = 负债 &#43; 所有者名下的资本 - 所有者提取 &#43; 收入 - 费用
其中收入减去费用的部分便是净利润(net income),如果费用大于收入,则会产生净损失(net loss)。
常见的经济业务:
所有者投资 谁成立了一家公司,然后以该公司的名义存了多少钱,创始人的这笔钱叫做所有者投资,属于前面的所有者权益中的所有者名下的资本。用现金采购物料 这是将公司的现金资产转变成为另一种资产(物料),这项经济业务仅仅改变了资产形式。用现金购买设备 这和上面类&#20284;,也仅仅改变了资产形式,公司资本总数量还是没变。赊购物料 公司资产增加,赊的钱属于公司的负债。提供服务赚取现金 资产现金部分增加,右边属于收入增加。用现金支付费用 资产现金部分减少,右边费用增加,然后减去。用赊销的方式提供服务或出租设备 左边资产应收款项部分增加,右边收入部分增加。应收账款变现 左边资产由应收款变为现金,右边没有变化。支付应付款项 应付款项在左边属于现金减少,在右边属于负债减少。所有者提取现金 在左边资产现金减少,右边所有者权益减少。
13.11.1&财务报表
利润表 所有者权益表 资产负债表 现金流量表
13.11.2&原始凭证
原始凭证可以是纸质的也可以是电子版的,主要有: 销售发票,支票,订货单,供货商签发的账单,员工收入记录,银行对账单等。
13.11.3&账户
资产类账户 = 负债类账户 &#43; 所有者权益账户
13.11.3.1&资产类账户
资产是指企业拥有或控制的预计在未来能够给企业带来一定的经济效益的资源。大多数会计系统都包含以下账户:
现金账户(cash) 反映企业的现金金额,现金的增减变动情况都要记录在现金账户中。应收款项(account receivable) 是指卖方持有的买房对卖方的付款承诺。应收票据(note receivable) 也称为期票,是一种书面承诺,承诺在未来某个特定时间还款。预付款项(prepaid accounts) 代表着提前支付的未来费用。物料(supplies) 在被使用完之前属于资产,使用完之后成本将被记入费用账户。设备(equipment) 也是一项资产,随着设备的使用和耗费,其成本将一点点列为费用,这种费用成为折旧。建筑物(buildings)土地(land)
13.11.3.2&负债类账户
比较常见的负债类账户有:
应付款项(account payable) 口头的或暗含以后要付款的承诺。应付票据(note payable) 较为正式的未来付款承诺。预收账款(unearned revenues) 未来企业提供产品或劳务才能清偿的负债。应计负债(accrued liabilities) 企业所欠的尚未偿还的负债。
13.11.3.3&所有者权益账户
按照前面提及的扩展会计公式,所有者权益账户分为: 所有者名下资本,所有者提取,收入和费用。
13.11.4&分类帐
信息系统中所有账户的集合叫做分类帐。
13.11.5&会计科目表
企业所使用的所有账户名称及其编号的列表叫做会计科目表。
具体编号中的科目号有国标的规定,然后子目号有的省市有规定,如果没有则自己内定。 比如按照&&的介绍,资产类编号首位科目号是1,负债是2,所有者权益是3等等。
13.11.6&报告期间
比如有年度财务报表,报告期为一年的会计报告,或者还有一个月,一季度等中期财务报告。
13.12&参考资料
&ERP不花钱, 作者: 老肖(OSCG), 版本: 1.0 .Odoo Development Essentials , author: Daniel Reis , date: April 2015Odoo new API guideline Documentation , author: Nicolas Bessi , date: April 13, 2015 .OpenERP 应用和开发基础 , 作者: 老肖 , 版本: 0.2 .会计学原理 第19版 作者: John J.Wild , Ken W. Shaw 等. 崔学刚译, 中国人民大学出版社.
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 手机网页调用微信支付 的文章

 

随机推荐