每个程序员都必读的10篇文章

  1. 程序员必知之内存篇

这是篇非常经典的文章,它将会带领你走入内存的各个方面,有老的,也有新的,有知道的,也有不知道的。尽管内存十分常见,无处不在,但并不是每个程序员都足够了解它。如果你正在编写高性能的应用程序的话,了解现代系统中的内存尤为重要。硬件设计师们带来了更复杂的内存处理及加速的技术,比如说CPU缓存,但如果离开了程序员它们也无法发挥出最大的价值。我仍在阅读这篇文章,很难说清楚我到底从中学到了多少关于随机访问内存(RAM),CPU缓存,包括1级,2级缓存,不同类型的内存,直接内存访问,内存控制器设计及普通内存的知识。简而言之,它是各个层次的程序员都必读的文章。

  1. 每个计算机科学家都必知之浮点数运算

浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多Java程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。许多人在使用float/double进行货币计算的时候经常会犯错。这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下。随着你经验的增长,你肯定想去深入了解一些常见的东西的细节,浮点数运算就是其中之一。作为一名Java高级开发人员,你必须了解如何进行货币运算,何时使用float,double或者BigDecimal,如何对浮点数进行舍入运算等等。就算你知道了浮点数运算的一些基础知识,读下这篇文章,你肯定还会学到一些新的东西。

  1. 每个程序员必知之Unicode篇

字符编码是另一个许多程序员痛苦挣扎的领域,”每一个程序员都绝对绝对应该了解Unicode以及字符集(不许找任何借口!)“填补了这一空白。标注一下,是的,这就是这篇文章的标题。它是由stackoverflow.com的创始人之一,Joel Spolsky所写的。Joel10年前就在他的博客上发表了这篇文章,不过对于现在而言仍然适用。这篇文章会告诉你什么是Unicode,什么是字符编码,字符是如何通过字节来表示的等等。这篇文章最赞的一点就是它的语言及行文,尽管你根本不知道什么是Unicode,你也能够很容易地看懂。一句话,这又是一篇程序员,码农,软件工程师必读的文章。

  1. 每个程序员必知之时间篇

除了字符编码外,时间和日期又是另一个程序员经常栽倒的领域,包括我自己在内。甚至是高级开发人员也会被格林尼治标准时间(GMT),世界标准时间(UTC),夏令时,闰秒这些东西搞的死去活来。坦白地说,在处理时区这个问题上,很难不踩一些坑,更别说再加上夏令时什么的。如果你想要试错法的话则更糟糕,因为这么做永远也解决不了你的问题。这里有许多可能出错或者产生误解的地方。比方说,日期是否包括时区可能就会困扰到你,将UNIX时间转化成其它的时区可能会让你崩溃,你还是忘了时钟同步和延迟这些事吧。我希望读完这篇经典的文章后,你的许多关于时间的误解都能够消除,自己能够巩固一些关于日期的基础常识。

  1. 每个WEB开发人员必知之URL编码篇

这篇文章介绍了Uniform Resource Locator(URL)编码中的一些常见的误解,然后试图阐明什么是HTTP的URL编码,最后列举了一些常见的错误及解决方案。尽管这篇文章的内容并不特定于某种编程语言,但它是用Java来进行问题的描述,并修复URL编码中存在的问题。你会学习到URL的基础语法,HTTP及其它协议中通用的URL格式。这篇文章还介绍了URL中的一些常见错误,比如字符编码,URL不同部分的保留字符,以及URL编解码问题。如果你是一名Java开发人员,你会学习到如何在Java中正确地处理URL,如何构造URL,以及如何使用Apache Common Http client库。最后它还提供了一些最佳实践的建议,比如你应该在构建URL的时候进行编码,确保你的重写URL的过滤器正确地处理了URL,等等。这是任何WEB开发人员必读的文章 。

  1. 每个程序员必知之WEB开发

这是programmers.stackexchange.com上的一篇非常有趣的文章,它讲的是程序员在将网站对外发布之前需要实现的技术细节。这包括接口设计及用户体验,安全性,WEB标准,性能,搜索引擎优化(SEO),以及一些重要的资源。当今世界严重地依赖于互联网,很多程序员都有自己的网站,通常是一个博客。这篇文章中学到的东西可能对你的专业没有帮助,但它对你个人的事情肯定会有所帮助。你会了解到一些关键的技术,比如HTML,HTTP,XML,CSS,JavaScript,浏览器兼容性,减少网站加载时间的技巧,XML站点地图,W3C规范,以及许多其它的关键的细节。

  1. 每个程序员必知之SEO

这对WEB开发人员,程序员,博主而言又是一篇很重要的文章。由于很多程序员同时也是博主,你无法对SEO视而不见,学一个搜索引擎优化的基础知识还是非常重要的,这能帮助Google检索到你的内容并推荐给其它程序员。在今天这个网络互联的时代,没有任何公司可以脱离WEB而存在,SEO变得尤为重要。如果你有一家初创企业在卖一些产品,那么SEO就是你要关注的事情。所有程序员,尤其是WEB开发人员,都可以从这篇文章中受益良多。记住,SEO是一个很宽泛变化的题目,不同的搜索引擎,比如Google,Yahoo等,它们的SEO都各不相同。因此,要想掌握这项技能你得经常更新你的知识库。

  1. C程序必知的未定义行为

C语言有一个未定义行为的概念。未定义行为是一个很宽泛的主题,它有许多细微的差别,这就是为什么我喜欢Java的一个原因,没有这么多的未定义行为,没有这么多的困惑,更稳定也更消停。很多人看起来很自然的事情在C里其实是未定义的行为,这也是程序BUG的一个常见的来源。除此之外,C中的任何未定义行为都由具体实现来决定(编译器和运行时),它们生成的代码会格式化你硬盘,做一些意想不到的事情,甚至更糟。读下这篇文章,到未定义行为的海洋里遨游吧。

  1. 程序员必知之网络

这段话摘自这篇文章,”你是一个程序员。你有想过多玩家的游戏是如何实现的吗?从外面看起来它是:两个或多个玩家通过网络共享相同的经验,就像他们在同一个虚拟世界中一样。不过作为程序员,我们知道底下的真相和你看到的东西是有所区别的。事实上这都只是一个错觉“。这是篇关于网络的非常有趣的文章,它是为游戏开发人员而写的,不过我认为每个程序开发人员都能从中受益。

  1. Java程序员必知之String

这是我自己关于java.lang.String的一篇文章,我个人认为每个Java开发人员都应该了解一下。String在日常的Java开发中非常重要,这就是为什么每个Java程序员都应该对它非常了解。这篇文章涉及到了String的许多重要的领域,包括String池,字符串常量,使用==和equals比较字符串,将字节数组转化成String,为什么字符串是不可变的,如何正确拼接字符串,等等。高级程序员应该都知道这些东西了,不过回顾一下也是不错的。

  1. 程序员必知之安全

有一个计算机系的学生在StackOverFlow上问了这个问题。就像我们了解到的一些常见编程概念比如操作系统,算法,数据结构,计算机体系结构,以及其它东西一样,了解安全也同样重要。安全是一个很大的话题,包括加密解密,SSL,WEB安全,混淆,认证,授权,等等,它是每个程序员都应该了解的基础知识。刚进这行的时候,我个人对安全这块还不是很了解,这时候我就开始基于Servlet/JSP写一些的Java WEB程序,后来我才了解到EWB安全性以及一些安全威胁比如SQL注入,拒绝服务,XML注入,跨站脚本,等等。作为一名Java开发人员,我现在遵循fortify, PMP,以及其它一些静态代码分析器提供的Java安全编码规范进行编码。这篇文章是关于安全这个主题的一个很好的合集,不管你现在还写不写代码,这些资源对你来说都非常有用。

  1. 程序员必知之延迟时间

这篇文章是一份额外的福利,但也是每个程序员都应该读的。不管用的是什么语言,Java还是C++都好,要写出高性能的应用程序,你都得了解延迟时间的基础常识,比如从内存中读取一个变量需要多久,从一级缓存中读取又需要多久,二级缓存呢,SSD硬盘中随机读又需要多久,还有要是从磁盘中读呢?互斥锁的加锁解锁需要多长时间,从一个城市发送一个数据包到另一个城市需要多长时间,在同一个数据中心又需要多久?这些延迟的数字是独立于任何编程语言的,开发人员必须要想写高频低延迟的应用程序,它们是核心知识库中的一部分。这篇文章还有一个好消息就是,它会告诉你这些年以来这些延迟时间的变化。你可以看到2006年的延迟时间是多少,而现在又是多少。

这就是所有程序员必读文章的列表。看到这些文章的标题,每个程序员都应该知道的XXX,你能了解到关于某个主题的一些比较有深度的知识。坦白说程序员有太多东西要学了,像学习Java语言这种只是冰山的一角,但并不是所有人都有热情去学习。写程序是一份很有挑战的工作,在你的职业生涯中,能帮忙到你的就是这些基础知识,比如,内存,Unicode,浮点数,时间,安全,这些对任何程序员来说都非常重要。有些文章是和语言相关的,比如我自己那篇关于String的文章,还有每个C程序员都应该了解的未定义行为,不过对于许多初学者来说学习一下也有好处。

译注:我觉得还有一个必读的,就是数数,这里一共是12篇了。。有几篇访问不了的,我也搬运到自己的博客上了。

英文原文链接
原文地址:
 http://www.php100.com/html/it/focus/2014/0515/6881.html

友谊第一法则

友谊第一法则:尽量不要让你的朋友感到孤单,所以有事没事放心大胆去烦烦他们

WordPress让PHP更加流行

TIOBE 7月编程语言排行榜的榜单明星为PHP,文中曾提及PHP流行背后似乎得益于最新发布的PHP Zend Framework,但并未做具体的缘由阐述。然而,促使PHP份额上升背后真正的推动者却是WordPress而并非PHP Frameworks。作者Manuel Lemos执笔详细阐述了WordPress推动PHP更加流行的七大理由。译文如下:
1.  WordPress是目前最流行的PHP应用
大多数人会选择使用几大流行的搜索网站来对比衡量目前相对流行的技术、语言、应用或者产品。然而这种方式似乎并不靠谱。因为当某个搜索网站改变其算法后,搜索结果也会随之而改变。
因此,最为靠谱的方法就是采用Google Trends,Google会根据关键字进行检索显示相关结果。如下图所示,与其他的PHP应用相比,包括Joomla、 Drupal、Magento WordPress,WordPress无疑最流行的一款。
2.  WordPress比其他PHP框架更流行
利用Google Trends,可以将不同的PHP框架进行对比。如下图所示,WordPress 与Zend Framework、Symfony PHP及CakePHP的对比情况,WordPress流行趋势则遥遥领先。
3.  WordPress不使用第三方PHP框架
此前,WordPress也使用第三方组件,但并非全栈框架都在使用。这就意味着WordPress从不需要创建全栈框架,而像这样的框架也很难流行起来。
4.  应用让技术变得更加流行,而非组件
在上面的图表中,你可能会注意到Magento要比Zend Framework更受欢迎。Magento是基于Zend Framework创建而来。这似乎暗示着,促使该技术流行的背后是能否解决用户问题,而不是基于此搭建而来的组件。
同样地,WordPress也很受欢迎,这是因为对于很多用户来说它的用处很大。当用户需要托管安装WordPress,需要寻求PHP主机服务。因此,在此基础上用户至少要知道什么是PHP以及所需要的PHP主机。
也就是说,是WordPress促使PHP更加流行。越多人安装WordPress,PHP就越流行。
5.  可扩展的WordPress插件系统
促使WordPress流行的最重要的原因之一就是各种插件支持额外功能。有了WordPress插件,你几乎能创建任何你想要的东西,包括嵌入到其他应用中,比如,论坛、电子商务网站、故障通知单系统等,除了博客系统。
倘若WordPress能够在博客应用中普及,那么其势必将成为更受欢迎的一个平台。
6.  非程序员开发PHP,只因WordPress
如果你需要创建某个网站,而这些特性却是WordPress所没有的,那么你可以通过开发一款新的插件来扩展WordPress从而满足你的需求。
许多WordPress用户并非是程序员,他们开始接触编程只是因为他们需要的某些功能在WordPress 中没有合适的插件。
也就是说,许多非程序员必须去学习PHP,才能够开发出新的WordPress 插件。这也是促使PHP更为流行的一大原因。
7.  实用优于虚构
用一句话来说,WordPress和PHP流行背后主要是因为它解决了众多用户的实际需求。无论是WordPress还是PHP的软件项目案例都是值得称赞的,它们始终遵循良好的项目计划采取超赞的设计模式。
原文出自:PHPClasses

MYSQL–事务处理

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
     删除的SQL语句
delete from userinfo where ~~~
delete from mail where ~~
delete from article where~~
~~
   如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作)

   一般来说,在商务级的应用中,都必须考虑事务处理的!

 

查看inodb信息
      shell> /usr/local/mysql -u root -p
      mysql> show variables like “have_%”
系统会提示:
+——————+——-+
| Variable_name     | Value |
+——————+——-+
| have_bdb          | YES    |
| have_crypt        | YES    |
| have_innodb       | YES    |
| have_isam         | YES    |
| have_raid         | YES    |
| have_symlink      | YES    |
| have_openssl      | NO     |
| have_query_cache | YES    |
+——————+——-+
8 rows in set (0.05 sec)
如果是这样的,那么我们就可以创建一张支持事务处理的表来试试了。

 

MYSQL的事务处理功能!

作者:Feifengxlq   Email:feifengxlq@sohu.com
一直以来我都以为MYSQL不支持事务处理,所以在处理多个数据表的数据时,一直都很麻烦(我是不得不将其写入文本文件,在系统重新加载得时候才写入数据库以防出错)~今天发现MYSQL数据库从4.1就开始支持事务功能,据说5.0将引入存储过程^_^
      先简单介绍一下事务吧!事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
      原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
     一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
     隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
     持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
   
   MYSQL的事务处理主要有两种方法。
   1、用begin,rollback,commit来实现
        begin 开始一个事务
        rollback 事务回滚
        commit  事务确认
    2、直接用set来改变mysql的自动提交模式
       MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
      set autocommit=0   禁止自动提交
      set autocommit=1 开启自动提交
   来实现事务的处理。
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
   MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!)

下次有空说下MYSQL的数据表的锁定和解锁!

       MYSQL5.0 WINXP下测试通过~   ^_^

mysql> use test;
Database changed
mysql> CREATE TABLE `dbtest`(
     -> id int(4)
     -> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> select * from dbtest
     -> ;
Empty set (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest value(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+——+
| id    |
+——+
|     5 |
|     6 |
+——+
2 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+——+
| id    |
+——+
|     5 |
|     6 |
+——+
2 rows in set (0.00 sec)

mysql>

*******************************************************************************************************************

[PHP]
function Tran( $sql ) {
         $judge = 1;
         mysql_query(‘begin’);
         foreach (sql asv) {
                 if ( !mysql_query($v) ) {
                         $judge = 0;
                 }
         }
         if ($judge == 0) {
                 mysql_query(‘rollback’);
                 return false;
         }
         elseif ($judge == 1) {
                 mysql_query(‘commit’);
                 return true;
         }
}
[/PHP]

************************************************

<?php
$handler=mysql_connect(“localhost”,”root”,””);
mysql_select_db(“task”);
mysql_query(“SET AUTOCOMMIT=0”);//设置为不自动提交,因为MYSQL默认立即执行
mysql_query(“BEGIN”);//开始事务定义
if(!mysql_query(“insert into trans (id) values(‘2’)”))
{
mysql_query(“ROOLBACK”);//判断当执行失败时回滚
}
if(!mysql_query(“insert into trans (id) values(‘4’)”))
{
mysql_query(“ROOLBACK”);//判断执行失败回滚
}
mysql_query(“COMMIT”);//执行事务
mysql_close($handler);
?>

如何学习php框架

关于PHP框架的问题,是我们很多的一个方面。推荐一篇文章,详细介绍使用PHP框架的原因,供大家参考。

如今的PHP框架层出不穷,其中有些比其他的更加惹人耳目。我不是这方面的专家,甚至不能熟练地使用其中的一种,所以我不做推荐,也不想讨论哪些算是框架哪些不算框架(我本文的前提是所有自称为PHP框架的皆是框架)。这里我要讨论的是如何才能更快地开始使用某个新的框架。

首先你当然必须选择一个框架,比如ZF、Cake、Symfony、atk、Yii、CodeIgniter、Solar、PRADO等。选择哪个呢?有些框架提供了非常好“step-by-step”入门教程,另一些则比较难入门了。

我很喜欢这篇文章:《学习一种新的编程语言所需做的练习》,但我因为已经很熟悉PHP了,所以这个方法不能用在学习框架上。所以我想列举一些类似的练习用以学习PHP框架。

如果你还不知道怎么使用框架,何不按照本文的练习来学呢?

1、你好世界(hello world)

这里练习的必要性我就不多作说明了。在一个新的框架上构建一个应用,在页面中显示“‘hello world”。当然,做起来不会那么简单。

2、计算器(calculator)  

写一个简单的计算器程序,结合表单,对两个操作数进行加减乘除等运算,并把结果输出到页面上。你需要为每一种运算设置单独的动作,或者说方法(每个框架的叫法不一样),而且还要用到框架中的表单验证功能(如果框架提供了这一功能的话)。

3、留言板(guestbook)

让我们回到1998年——建立一个留言本程序,在页面上显示一个表单让用户填写,然后提交到这个应用程序里,继而存储到数据库或文本文件中(视你自己的情况而定),并把用户留言的内容显示到页面上。如果框架提供了创建HTML表单、对象模型或层等功能,就用上它们吧。

4、解析和分页(parse and paginate)  

选一个RSS源或其他XML源,解析其中的条目并显示出来。同时添加一个分页的功能,让用户可以五条五条地浏览,并在页面的顶部或底部添加页码。如果框架里提供了这样的功能,就使用它吧。

完成以上的练习后,你应该就可以清楚地知道如何使用这个框架了,并能用它完成更复杂的工作,或是继续探索这个框架的其他功能。如果你还是不会用,或者花了很多时间来完成以上练习,那么我觉得这个框架不适合你,还是找些其他的来用吧。

记住,如果在使用框架的过程中遇到困难,记得去该框架的社区里寻求帮助。一个有这强大社区支持的框架会为你未来的工作带来很大帮助,同时也表明这个框架是个不错的框架。没有人希望在使用某框架后的六个月,框架的开发者就宣布停止开发,这就太气人了。

希望通过本文的介绍,能给你带来帮助。

XMLRPC编码中文乱码问题解决办法

[原创]XMLRPC编码中文乱码问题解决办法

终于搞定了,整整一天,都在写XMLRPC的程序,之前测试,都直接随便打点英文

刚才试了用长的HTML代码做string提交,居然不成功

郁闷了半天,不管我怎么encode都不行,GBK,UTF-8,ASCII我都试了,还是不行.

资料也找不到,网上关于XMLRPC的资料实在太少了,WordPress官方更是少得可怜.

原来,xmlrpc.inc会自动转换编码,但提交后是乱码,是因为默认指定的是ISO-8859-1编码,我说怎么看着像MYSQL乱码,打开找编码的地方,发现有好多个编码的设置参数,试了半天才找到对的.就是 xmlrpc_internalencodeing

我的XMLRPC编码中文乱码解决办法:

贴图上瘾了,再来一张,不看图的直接看下面代码

[原创]XMLRPC编码中文乱码问题解决办法 image16

打开 xmlrpc.inc 第222行, 将

$GLOBALS[‘xmlrpc_internalencoding’]=’ISO-8859-1′;

改成

//GLOBALS[‘xmlrpc_internalencoding’]=’ISO-8859-1′;GLOBALS[‘xmlrpc_internalencoding’]=’UTF-8′;

提交的数据用UTF-8,搞定
本文由21andy.com原创

Eclipse运行时提示failed to create the java virtual machine 如何解决

突然就遇到了这个问题,打开Eclipse就提示“failed to create the java virtual machine”,分析了一下,感觉应该是由于分配的内存过大引起的,果断更改,成功了!

更改方法:

找到Eclipse的安装目录,打开ZendStudio.ini文件

然后将-Xmx1024M这里面的1024改小点,我改为了512,不知道会不会出现其他的问题,但是打开就提示“failed to create the java virtual machine”的问题解决了。

OpenERP中销售订单的预收款及多次开票的处理

现实的销售、收款、发货的关系有些复杂。常见的关系有:1)收到全款后发货;2)预收部分款后发货;3)先发货再收款;4)分批收款,分批发货。每一笔收款都有对应的发票/收据,1)、3)两种情况,一张销售订单只要开一张票据(发票或收据,OpenERP中是Invoice),2)、4)两种情况,一张销售订单有多张票据。

1)收到全款后发货
这种情况比较简单,在OpenERP的Sales Order中,字段Shipping Policy 选择“ Payment Before Delivery”,表示先付款再发货。选择这个选项,销售订单确认时候,OpenERP会自动生成SO对应的Invoice,但不会自动生成SO对应的发货单(Picking List)。当财务人员确认Invoice,并确认收到该Invoice的款项时候,系统自动生成SO对应的发货单,允许发货。

2)预收部分款后发货
在Sales Order中,有个按钮“Advance Invoice”,表示预收款票据。点击它,选择预收款对应的产品项目,填入预收金额,系统会自动生成预收票据,并将该票据关联到SO上(在SO 的History属性页上显示出来)。“预收款对应的产品项目”是指,必须事先定义一个用于预收款的产品名称(诸如 销售预收款 之类的)。
控制预收款再发货,有两个办法,一个是,SO上的Shipping Policy 选择 “Shipping & Manual Invoice”,这表示,SO确认时候,系统不会自动生成对应的Invoice,而是要手动点击按钮“Create Final Invoice”生成发票。如果选择这种方式,预收款收到前,销售人员不要确认SO,这样,系统就不会自动生成发货单。
另一种办法是,Shipping Policy 选择“ Payment Before Delivery”,这样,如果确认SO时候,预收款发票尚未支付,则系统不会自动生成发货单,而是要待到确认收到款额时候系统才会自动生成发货单。

3) 多次开票的处理
SO上的Shipping Policy 选择 “Shipping & Manual Invoice”。如果点击SO上的按钮“Create Final Invoice”,系统会自动一次性生成SO的余额的发票,而不允许拆分金额多次开票。不过系统提供了“Lines to Invoice”的功能,该功能会列出所有已确认但未开票的SO明细行,允许对每一个明细行开票,并将明细行的发票自动关联到SO上。
如果一张发票对应多个SO,或者,对SO上的一个明细行开多张发票。那么,就必须在Account的Invoice界面上手工新建发票,且该发票不能与SO关联起来。建议严格基于SO开发票,革除根据收款额开销售发票的习惯。

4)收款和发票的关系
建议开票严格基于SO,但收款不必严格基于SO。即1)一个SO可以多次开票,但开票的最小单位是SO上的一个明细行;2)不允许一张发票包含多个SO的内容;3)一笔收款可以对应到多张发票(核销多张发票)。

OpenERP 7 默认值详解

1.激活开发者模式

在OpenERP 7目前的版本中,设置默认值必须进入开发者模式。

2.设置默认值

然后在你要配置默认值的表单里面,先填入对应的数据然后,在表单左上方的调试视图里面选择设置默认值。

OpenERP设置默认值步骤1

默认值的配置界面很直观。

OpenERP设置默认值步骤2

  • 默认:就是你要设置的默认值,下拉列表里面已经根据你当前表单显示出相应的字段和值,你只需要选取
  • 条件:   就是你的默认值生效的条件。例如下图意思就是,当产品类别是服务的,产品类型默认值为服务。(这里涉及到一个bug1112232不过在最新的版本里面已经修复好了)。

OpenERP设置默认值步骤3

怎么样的字段才能成为默认值的条件呢?字段定义里面的 change_default属性为True。

'categ_id': fields.many2one('product.category','Category',
required=True, change_default=True, domain="[('type','=','normal')]" ,
help="Select category for the current product"),
  • 仅用于你个人/所有用户:此默认值是只对当前用户生效还是对于所有用户生效。

 

3.删除默认值

到 设置->技术->动作->用户设定默认值 就能看到目前已经设定的默认值。

4.更多默认值

OpenERP的默认值还可以通过代码的方式来实现。例如下图就是产品模块的默认值

_defaults = {
 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'product.template', context=c),
 'list_price': 1,
 'cost_method': 'standard',
 'standard_price': 0.0,
 'sale_ok': 1,
 'produce_delay': 1,
 'uom_id': _get_uom_id,
 'uom_po_id': _get_uom_id,
 'uos_coeff' : 1.0,
 'mes_type' : 'fixed',
 'categ_id' : _default_category,
 'type' : 'consu',
 }

问题:如果我既配置了_defaults 又在界面上配置了默认值那么怎么办?
答案:界面的优先级大于代码里面的。

问题:如果在界面上配置了多次默认值,那么会取哪个默认值呢?
答案:取最新的。

原文链接:http://cn.openerp.cn/openerp-7-set-dafault/