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

news2025/1/16 5:13:34

文章目录

  • 前言
  • 一、拿到这样的一张表
  • 二、实现过程
    • 1. 控制器(Controller)
    • 2. 模型(Model)
    • 3. 视图(View)
    • 4. 返回生成的凭证号
  • 最后


前言

这是一个小功能。
财务小姐姐每个月需要不少的时间去手录费用凭证,这个功能可以实现将半天一天时间内完成的事情,在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使用的一个场景,但实际使用过程中,还可以处理更多的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

204:vue+openlayers 学习Attribution各种API,示例展示自定义版权信息

第204个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中个性化修改版权信息,这里主要涉及到Attribution各种属性的设置,所以这里先列出属性的信息,然后用示例来展示如何使用。 名称类型说明classNamestring (默认为“ol-attribution”)CSS 类名。targetH…

Acwing---1219.移动距离

移动距离1.题目2.基本思想3.代码实现1.题目 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。 其楼房的编号为 1,2,3… 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为 6 时,开始情形如下&#xff1a…

使用Anaconda(3-5.1.0对应 python3.6.3)搭建OpenCV(3.5.1.15)环境和Jupyter Notebook

使用Anaconda搭建python和OpenCV环境1、 Anaconda3-5.1.0下载Anaconda3-5.1.0下载链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载 Anaconda3-5.1.0-Windows-x86_64.exe 对应 python3.6.32、安装Anaconda全程下一步,修改了一下默认安装…

如何学习C++图像处理?

学习C图像处理前首先的明确图像处理是什么,它是如何定义的?它能给我们带来哪些便利?之后根据需求选择合适的编程语言,C or python?图像处理(image processing),用计算机对图像进行分析,以达到所…

你还不知道怎么实现财富自由吗?一篇文章手把手教你入门!

程序猿作为互联网行业的翘楚,压力多多收获也多多。 如果想在上班之余还有外快拿,最好的方法就是利用业余时间做做兼职赚外快,不仅可以充实自己的钱包,还可以磨练自己的技术,一举两得。 找外快可是一门技术活&#xf…

三万秃发人群撑起一个IPO,大麦植发能成功上市吗?

不断壮大的“脱发”大军正撑起植发这一条黄金赛道。据弗若斯特沙利文报告,2020年中国毛发医疗服务的市场规模已达到184亿元,预计到2030年将达到1381亿元,CAGR为22.3%。 由于市场规模增长较快,资本也加强了对植发行业的关注&#…

python实现给pdf文件加骑缝章效果

骑缝章是在合同上经常看到的一种盖章方式,如下图所示。现在电子合同的应用已经越来越广泛,合同上如何实现骑缝章的效果 ,也是有必要研究一下的。本文几乎Python的方式,讲述了如果对印章图片进行处理,然后,实…

JAVA校园闲置物品交易系统源码+数据库,为在校师生提供闲置物品发布、物品查询、物品交易等功能

校园闲置平台 校园闲置物品交易系统,为在校师生提供闲置物品发布、物品查询、物品交易等功能。 使用JAVA编写的(javaweb和ssm) Summary 项目的技术栈项目功能介绍项目运行环境部署项目 项目的技术栈 IoC容器:Spring web框架:SpringMVC (PHP版为ThinkPHP) orm…

不会数学的程序员,只能走到初级开发工程师!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 在我还是初级程序员时,每天也都粘贴着代码和包装着接口。那个阶段并没有意识到数学能在编程中起到什么作用&#xff…

【Java基础】-【集合类】

目录Java中的容器(集合类)Java中的容器,线程安全和线程不安全的分别有哪些?Map接口的实现类Map put的过程如何得到一个线程安全的Map?HashMap的特点JDK7和JDK8中的HashMap有什么区别?HashMap底层的实现原理…

【年度总结】2022回首瞻望 | 2023大展宏“兔“

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计专业大二本科在读,阿里云社区专家博主,华为云社区云享专家,CSDN SAP应用技术领域新兴创作者。   在学习工…

GO语言配置和基础语法应用(三)

C语言是直接影响Go语言设计的语言之一。 Go是一门编译型语言,Go语言的工具链将源代码及其依赖转换成计算机的机器指令(译注:静态编译)。 package mainimport "fmt"func main() {fmt.Println("Hello, 世界")…

一行代码加速Pytorch推理速度6倍

一行代码加速Pytorch推理速度6倍 Torch-TensorRT 是 PyTorch 的集成,它利用 NVIDIA GPU 上的 TensorRT 推理优化。 只需一行代码,它就提供了一个简单的 API,可在 NVIDIA GPU 上提供高达 6 倍的性能加速。 话不多说, 线上代码, 再解释原理!!…

【论文精读】Scaling distributed machine learning with the parameter server

Scaling distributed machine learning with the parameter server前言Abstract1. Introduction1.1 Contributions1.2 Engineering Challenges1.3 Related Work2. Machine Learning2.1 Goals2.2 Risk Minimization2.3 Generative Models3. Architecture3.1 (Key,Value) Vectors…

设计模式简要汇总

一、面向对象设计原则 开闭原则:一个软件实体(类、模块、函数)应该对扩展开放,对修改关闭。依赖倒置原则:高层模块不应该依赖底层模块,它们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依…

语义分割——FCN模型pytorch实现

FCN网络简介 全卷积网络(Fully Convolutional Networks,FCN)是Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图像语义分割的一种框架,是首个端对端的针对像素级预测的全卷…

BIGEMAP APP离线卫星地图数据应用

离线包(高清卫星图): 1、一次下载永久可用,访问更快,下载更快 2、离线包数据可自动更新,无需重新下载,更新3到6个月一次 3、离线包可在无网络离线环境下使用,不受网络限制 4、离线包…

Springboot打成JAR包后读取配置文件

Springboot的默认配置文件为:application.properties或者是application.yml 如果这两个配置文件都存在,不冲突的话,就互相补充。冲突的话,则properties优先级高。 当我们使用IDEA创建出一个Springboot项目上时,配置文…

Git从入门到精通

目录 Git 配置 1. 在安装完成 Git 后,开始正式使用前,是需要有一些全局设置的,如用户名、邮箱。 2. 除了用户名、邮箱之外,还有很多的配置可以用来自定义 Git,如: 3. 查看所有的已经做出的配置&#xff…

Python3 常用内置函数解析(共28个函数)

文章目录一:Python3 操作符(大全)二:函数带括号与不带括号的区别三:不可变数据类型与可变数据类型四:Python3 内置函数(大全)1、input():用于获取控制台的输入。2、print…