SAP CAP篇十五:写个ERP的会计系统吧,Part II

本文目录

  • 本系列文章
  • 目标
  • 开发步骤
    • 数据库表设计
    • 初始数据
      • 初始数据:AccountCategories
      • 初始数据:AccountUsages
      • 初始数据:ChartOfAccounts
      • 初始数据:AccountSubjects
    • Service 定义
    • 生成Fiori App
    • App运行

本系列文章

SAP CAP篇一: 快速创建一个Service,基于Java的实现
SAP CAP篇二:为Service加上数据库支持
SAP CAP篇三:定义Model
SAP CAP篇四:为CAP添加Fiori Elements程序(1)
SAP CAP篇五:为CAP添加Fiori Elements程序(2)
SAP CAP篇六:为CAP添加Fiori Elements程序(3)
SAP CAP篇七:为CAP添加Fiori Launchpad入口 (Sandbox环境)
SAP CAP篇八:为CAP添加App Router并支持Fiori Launchpad (Sandbox环境)
SAP CAP篇九:升级为SAP CDS 7.0, CAP Java 2以及Spring Boot 3
SAP CAP篇十:理解Fiori UI的Annoation定义
SAP CAP篇十一:支持Media Object:图片、附件等
SAP CAP篇十二:AppRouter 深入研究
SAP CAP篇十三:拥抱TypeScript
SAP CAP篇十四:写个ERP的会计系统吧,Part I

目标

基于前一篇的基础继续开发ERP系统。

本篇侧重于会计科目表,同时也会更新之前的公司主数据

会计科目表是基于会计准则的。譬如US GAAP,IFRS以及我国国内的企业会计准则。会计科目表由会计科目项组成。

开发步骤

数据库表设计

从数据库层面来定义会计科目表。

namespace finsys.db;using {sap,
} from '@sap/cds/common';@cds.odata.valuelist
entity AccountCategories : sap.common.CodeList {key ID : Integer;
}@cds.odata.valuelist
entity AccountUsages : sap.common.CodeList {key ID : Integer;
}entity ChartOfAccounts : sap.common.CodeList {key ID    : String(20);Accounts : Association to many AccountSubjectson Accounts.ChartOfAccounts = $self;
}entity AccountSubjects : sap.common.CodeList {key ID    : String(20);ChartOfAccounts : Association to one ChartOfAccounts not null;ParentID : String(20);Category : Association to one AccountCategories not null;Level    : Integer;
}

同时,更新Companies的数据:

@cds.odata.valuelist
entity Companies: managed, cuid, sap.common.CodeList {    ParentCompany: Association to one Companies;    Currency: Currency;Country: Country;Address: String(100);Deleted: Boolean;ChartOfAccounts: Association to one ChartOfAccounts not null;
}

其中:

  • AccountCategories:科目的属性;
  • AccountUsages:科目使用场景;
  • ChartOfAccounts: 会计科目表;
  • AccountSubjects:会计科目信息;
  • Companies:公司主数据,增加了Deleted属性用来表示该主数据是不是已经被删除,另外增加了ChartOfAccounts的引用。

初始数据

再次运行下述命令来插入初始数据:

cds add data

该命令会自动在db文件夹下添加data文件夹,并会自动跳过已维护了数据库csv文件。

初始数据:AccountCategories

文件finsys.db-AccountCategories.csv

ID;name;descr
1;资产类科目;资产类科目
2;负债类科目;负债类科目
3;共同类科目;共同类科目
4;所有者权益类科目;所有者权益类科目
5;成本类科目;成本类科目
6;损益类科目;损益类科目

初始数据:AccountUsages

文件finsys.db-AccountUsages.csv

ID;name;descr
1;银行专用;银行专用
2;证券专用;证券专用
3;金融共用;金融共用
4;保险专用;保险专用
5;银行债券共用;银行债券共用
6;农业专用;农业专用

初始数据:ChartOfAccounts

文件finsys.db-ChartOfAccounts.csv

ID;name;descr
2013;企业会计准则(2013);企业会计准则(2013)

初始数据:AccountSubjects

文件finsys.db-AccountSubjects.csv

ID;ParentID;Level;Category_ID;name;descr;ChartOfAccounts_ID
1001;;1;1;库存现金;库存现金;2013
1002;;1;1;银行存款;银行存款;2013
1003;;1;1;存放中央银行款项;存放中央银行款项;2013
1011;;1;1;存放同业;存放同业;2013
1012;;1;4;其他货币资金;其他货币资金;2013
101201;1012;2;1;外埠存款;外埠存款;2013
101202;1012;2;1;银行本票存款;银行本票存款;2013
101203;1012;2;1;银行汇票存款;银行汇票存款;2013
101204;1012;2;1;信用卡存款;信用卡存款;2013
101205;1012;2;1;信用证保证金存款;信用证保证金存款;2013
101206;1012;2;1;存出投资款;存出投资款;2013
1021;;1;1;结算备付金;结算备付金;2013
1031;;1;1;存出保证金;存出保证金;2013
1101;;1;1;交易性金融资产;交易性金融资产;2013
110101;1101;2;1;本金;本金;2013
11010101;110101;3;1;股票;股票;2013
11010102;110101;3;1;债券;债券;2013
11010103;110101;3;1;基金;基金;2013
11010104;110101;3;1;权证;权证;2013
11010105;110101;3;1;其他;其他;2013
110102;1101;2;1;公允价值变动;公允价值变动;2013
11010201;110102;3;1;股票;股票;2013
11010202;110102;3;1;债券;债券;2013
11010203;110102;3;1;基金;基金;2013
11010204;110102;3;1;权证;权证;2013
11010205;110102;3;1;其他;其他;2013

具体可以参阅财政部的企业会计准则附录中的会计科目编码设计。
限于篇幅,本文不会贴出全部会计科目的编码。

Service 定义

更新FinanceService,添加如下Entities。

    @readonlyentity AccountCategories as projection on dbchartofaccount.AccountCategories;@readonlyentity AccountUsages as projection on dbchartofaccount.AccountUsages;@readonlyentity ChartOfAccounts as projection on dbchartofaccount.ChartOfAccounts;@readonlyentity AccountSubjects as projection on dbchartofaccount.AccountSubjects;

生成Fiori App

通过Fiori: Open Application Geneator来创建Fiori App。

Application Info
添加基于AccountSubjectsTable
Add Table Section

App运行

App运行如下,没有Column定义:
Screenshot 1
修改annotations.cds来添加Column定义:

annotate service.AccountSubjects with @(UI.LineItem #AccountSubjects : [{$Type : 'UI.DataField',Label : 'ID',Value : ID,},{$Type : 'UI.DataField',Label : 'Level',Value : Level,},{$Type : 'UI.DataField',Label : 'Name',Value : name,},{$Type : 'UI.DataField',Label : 'Description',Value : descr,},{$Type : 'UI.DataField',Label : 'ParentID',Value : ParentID,},{$Type : 'UI.DataField',Label : 'Category',Value : Category.name,},]
);

再次运行该App:
ScreenShot 2

后续的文章里面,会继续对这个App进行进一步增强。

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

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

相关文章

P8597 [蓝桥杯 2013 省 B] 翻硬币 Python

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果…

mysql 学习

本文来自于《sql必知必会》 所需要的文件教程连接 本站其他的小伙伴 第一课 了解sql 数据库基础 什么是数据库 数据库(database) 保存有组织的数据的容器(通常是一个文 件或一组文件)。 表 表(table)…

npm常用命令详解

npm(Node Package Manager)是 Node.js 的包管理器,用于管理项目中的依赖(libraries, frameworks, tools)。以下是一些 npm 的常用命令及其详解: 1. npm init 作用:初始化一个新的 Node.js 项目…

MQTT Keep Alive机制

MQTT 协议是承载于 TCP 协议之上的, 而 TCP 协议以连接为导向, 在连接双方之间, 提供稳定、 有序的字节流功能。 但是, 在部分情况下, TCP 可能出现半连接问题。 所谓半连接, 是指某一方的连接已经断开或者…

【ppt技巧】PPT转换为图片,方法有哪些?

想要将ppt文件转换为图片,其实很简单,一起来看一下如何操作吧! 方法一: 使用格式转换器,有些文件格式转换器,支持ppt转换为图片。 方法二: 不需要转换器,直接在ppt中进行操作即可…

Java基础知识总结(9)

快速排序 3 1 2 5 4 6 重复第一轮的过程,应该得到如下序列: 2 1 3 5 4 6 OK,现在3已经归位。接下来需要处理3左边的序列: 2 1 3 6 处理之后,2已经归位,序列“1”只有一个数,也不需要进行任何…

可观测性体系建设后,该如何挖掘数据及工具价值?

在现代企业的运维管理中,构建高效且可靠的可观测性体系是保障系统稳定性和业务连续性的关键。然而,运维团队成员的技术能力参差不齐往往成为实现这一目标的障碍。尤其在处理复杂系统故障时,高度依赖专业知识和经验的可观测性工具很难被全员有…

j-vxe-table设置

1.设置按键回车箭头tab健设置 :mouse-config"{selected: true}" :keyboard-config"{ isArrow: true, isEnter: true, isEdit: true,isTab:true}" 2 表格编辑设置 :edit-config"{trigger: this.triggerFlag, mode: row, showIcon: false , active…

Java 基础 反射

什么是反射? 反射是各类框架的灵魂,允许我们在JVM运行时提供分析类,操作类的能力。 反射是一种在运行时检查和修改类、方法、属性等程序结构的能力。通过反射,可以动态地获取和操作程序的元数据,包括类的字段、方法、…

如何用 C++ 部署深度学习模型?

深度学习模型通常在诸如Python这样的高级语言中训练和验证,但在实际生产环境部署时,往往需要更高的执行效率和更低的资源占用。C作为一款性能卓越、低级别的编程语言,是部署深度学习模型的理想选择之一。本文将详细介绍如何在C环境下加载和运…

opengl日记11-opengl的transformtions变换示例

文章目录 环境代码CMakeLists.txt文件内容不变。vertexShaderSource.vsmain.cpp 总结参考 环境 系统&#xff1a;ubuntu20.04opengl版本&#xff1a;4.6glfw版本&#xff1a;3.3glad版本&#xff1a;4.6cmake版本&#xff1a;3.16.3gcc版本&#xff1a;10.3.0 在<opengl学…

电子资金转账系统的分类、应用及其对银行业的影响

科技的飞速发展&#xff0c;计算机网络技术已广泛应用于各个领域&#xff0c;其中之一就是电子资金转账&#xff08;Electronic Funds Transfer&#xff0c;简称EFT&#xff09;系统。EFT系统作为金融业务电子化的重要实现手段&#xff0c;正逐步改变着传统银行业务的运作方式&…

Blender 3D建模要点

3d模型可以为场景的仿真模拟带来真实感&#xff0c;它还有助于更轻松地识别场景中的所有内容。 例如&#xff0c;如果场景中的所有对象都是简单的形状&#xff0c;如立方体和圆形&#xff0c;则很难在仿真中区分对象。 1、碰撞形状与视觉形状 像立方体和球体这样的简单形状&a…

开发指南015-前端缓存的信息

平台前端架构启动后&#xff0c;在store里存储了很多信息&#xff0c;可以通过getter取到&#xff1a; 1)访问token import { getToken } from /utils/qlm_auth getToken()可以获取该值 为空则没有登录 2) 用户信息 this.$store.getters.userId // 用户ID this.$sto…

大厂面试-- [VueReact] 对虚拟DOM的理解?虚拟DOM主要做了什么?虚拟DOM本身是什么?

什么是虚拟DOM ​ 从本质上讲&#xff0c;Virtual Dom是一个Javascript对象&#xff0c;通过对象的方式来表示DOM结构。将页面的状态抽象为JS对象的形式&#xff0c;配合不同的渲染工具&#xff0c;将使跨平台渲染成为可能。通过事物处理机制&#xff0c;将多次DOM修改的结果一…

鸿蒙Harmony应用开发—ArkTS-属性动画

组件的某些通用属性变化时&#xff0c;可以通过属性动画实现渐变过渡效果&#xff0c;提升用户体验。支持的属性包括width、height、backgroundColor、opacity、scale、rotate、translate等。布局类改变宽高的动画&#xff0c;内容都是直接到终点状态&#xff0c;例如文字、can…

Linux 标准IO介绍

一、Linux文件的种类 常规文件r目录文件d字符设备文件c块设备文件b管道文件p套接字文件s符号链接文件(相当于Windows快捷方式&#xff09;l 二、标准I/O 1、概念 I&#xff1a;input 输入设备 比如键盘鼠标都是Input设备 O&#xff1a;output 输出设备 比如显示器 优…

英国政府发布云SCADA(数据采集与监控系统)安全指南

近期&#xff0c;英国国家网络安全中心 (NCSC) 发布了安全指南&#xff0c;用以帮助使用运营技术 (OT) 的组织确定是否应将其监控和数据采集 (SCADA) 系统迁移到云端。 出于安全原因&#xff0c;SCADA 系统传统上与互联网甚至本地企业网络隔离&#xff0c;但云可以提供许多好处…

在家有电脑手机怎么赚钱?整理了六种在家做副业的方法

如果你在家空闲时间比较多&#xff0c;有电脑有手机&#xff0c;一定要做的六种副业&#xff01; 无论你现在是什么身份&#xff0c;如果能够利用自己的空余时间&#xff0c;去做一份副业&#xff0c;那么你的自信心会得到大大地提升&#xff01; 分享六种我觉得很值得尝试的副…

JDBC基础(CRUD)使用详解(mysql)

1. 什么是JDBC JDBC,即Java Database Connectivity,java数据库连接.是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范.这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访…