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)一笔收款可以对应到多张发票(核销多张发票)。