【魅力开源】第5集:通过Odoo实现将EXCEL表费用明细,快速导入到ERP总账系统生成凭证


前言

这是一个小功能。
财务小姐姐每个月需要不少的时间去手录费用凭证,这个功能可以实现将半天一天时间内完成的事情,在1小时内(或者更快)完成
涉及如下9项费用类型:汽油费、维修保养费、停车费、运杂费、邮寄费、名片费、手机费、福利费、机票。
特点是:涉及大多数职工,工作量相对重复,并且工作量会随职工人数增加面增加。
下面将展示,快速对这一类凭证快速登账的方法。


一、拿到这样的一张表

拿到财务小姐姐的一张EXCEL表,包括如下表头内容。
在这里插入图片描述
先来对上面进行分析,将涉及几个关键内容。
首先,费用类型分解:汽油费、维修保养费、停车费、运杂费、邮寄费、名片费、手机费、福利费、机票。
其次,辅助帐名分解,按费用类型与辅助帐名对应关系,如下表:
在这里插入图片描述

第三,凭证类型分别为:现金、银行、转账。涉及费用挂账凭证及费用支付凭证

接下来,我们看如何实现将EXCEL表内容导入快速生成总账凭证。

当然,优秀的业务实践是通过报销系统填报及审批,实现业务财务一体化联动处理

二、实现过程

系统集成关键点:

  1. 数据格式统一 (统一数据模板)
  2. 数据推送前检验 (将检验信息提醒到操作人员)
  3. 数据同步成功后双方能相互校对(凭证号与单据号系统间存档、相互校验)

整个系统模块架构还是遵循MVC【模型(Model)、视图(View)、控制器(Controller)】方式处理。

1. 控制器(Controller)

url链接下载模板 把导入模板放到系统中并提供统一下载链接,并提供简要说明,可以避免模板不统一而产生的各种导入不正常问题。
在这里插入图片描述controllers模块 EXCEL模板的代码实现:

# -*- coding: utf-8 -*-
from odoo.http import Controller, content_disposition
from odoo import http

...
@http.route('/account/account_template_excel', auth='user', method=['get'])
def account_template_excel_download(self):
    path = r"./dyaddons/account_dy/template/account_template.xlsx"
    with open(path, 'rb') as f:
        data = f.read()

    return http.request.make_response(
        data,
        [('Content-Type', 'application/octet-stream'),
         ('Content-Disposition', content_disposition('辅助帐导入模板.xlsx'))]
    )

该处使用的ur去请求系统预置的下载模板。

2. 模型(Model)

在这里插入图片描述
Model实现导出分录功能,点一下“导出”按钮,将会在ERP系统生成一张完整凭证,关键代码如下:


 ('1', '汽油费'),
 ('2', '维修保养费'),
 ('3', '停车费'),
 ('4', '运杂费'),
 ('5', '邮寄费'),
 ('6', '名片费'),
 ('7', '手机费'),
 ('8', '福利费'),
 ('9', '机票')
        
def create_assist_line(self, cur):
	""" 导出凭证分录 """
    if cur:
        ostate = cur.var(cx_Oracle.NUMBER)
        oretmsg = cur.var(cx_Oracle.STRING)
        if not self.hfid:
            if self.bill_id.fusage in ('1', '2', '3'):
                sp_name = "Pdy_NewAHG_Fleet"  	# 辅助帐横表记录,[0012]用途+部门+职员+车牌号  
            	...
           elif self.bill_id.fusage in ('8', '9'):
                sp_name = "Pdy_NewAHG_Usage"  	# 辅助帐横表记录,[0010]部门+职员  	
                ...
           else:                    
                sp_name = "Pdy_NewAHG"  	# 辅助帐横表记录,[0011]用途+部门+职员  	
                ...
                try:
                    cur.callproc(sp_name, [self.bill_id.atype, self.bill_id.name, self.emp, self.dept,
                                           self.usage or '', self.fleet or '', oretmsg, ostate])    
		....
						
                    
def import_vassist(self):
    """ 导出凭证主方法 """
    config = self.env['api.synch.server'].search([('name', '=', 'eas_db')])[0]
    conn = cx_Oracle.connect(config.synch_user, config.synch_pwd, '%s:%s/%s'
                             % (config.synch_server, config.synch_port, config.synch_db))
    cur = conn.cursor()
    for rs in self:
        if not rs.active:
            continue
        all_done = True
        for line in rs.assist_line:
            if not line.note or line.note == 'ERROR':
                ret = line.create_assist_line(cur)	# 执行凭证导出主方法调用
                all_done &= ret
        if all_done:
            rs.write({'state': 'OK', 'active': False})
        else:
            rs.write({'state': 'Fix -> Retry'})
    conn.commit()
    cur.close()
    conn.close()        
    return {'type': 'ir.actions.act_window_close'}

3. 视图(View)

视图(View)层代码如何实现可联系作者或参考
https://www.odoo.com/documentation/16.0/developer/reference/backend/views.html?highlight=views

4. 返回生成的凭证号

这个是很重要的一步。有不少系统只做到单向传递,没有返回对方系统信息(即忽略了双方相互校验逻辑)。

在这里插入图片描述导出数据后,将返回凭证号信息到ODOO系统。


最后

重要事情说三遍:

  1. 统一数据模板,你可以解决关于导入的50%问题;
  2. 将检验信息提醒到操作人员,你又可以解决关于导入的40%问题;
  3. 数据同步成功后双方能相互校对,如果前面90%问题都做了控制,注意返回数据,双方校验就行了

以上就是今天要讲的内容,本文仅仅简单介绍了Odoo集成ERP使用的一个场景,但实际使用过程中,还可以处理更多的场景。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值