解析大型.NET ERP系统 业务逻辑设计与实现
根据近几年的制造业软件开发经验,以我开发人员的理解角度,简要说明功能(Feature)是如何设计与实现的,供参考。
因架构的不同,技术实现上会有所差异,我的经验仅限定于Windows Form程序。
总体功能
1 系统支持多用户。
创建一个单实例(Singleton)的会话管理器SessionManager,用.NET Remoting部署在服务器端时,用DataTable保存登入的用户会话(Session:Login Id,User Id,Name,Login Time)。客户端登入时,会先检查DataTable中是否有记录,有则表示已经登入。ERP 客户端退出时,要通知.NET Remting服务器端删除会话信息(DataTable)。
2 系统支持多公司。
设计一个帐套表,帐套表的数据库定义比较简单,参考下面的Company表定义。
CREATE TABLE [dbo].[Company]
(
[CompanyCode] [nvarchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[CompanyName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Suspended] [nvarchar] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[DatabaseServer] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[DatabaseName] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[DatabaseLogin] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[DatabasePassword] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Company] ADD CONSTRAINT [PK_Company] PRIMARY KEY CLUSTERED ([CompanyCode]) ON [PRIMARY]
GO
帐套表记录了数据库的连接信息,还可记录帐套的行业信息以方便系统特定功能只针对的帐套设定的行业。
3 系统支持多库存组织。
库存组织用于跟踪库存交易,维护库存余额,可以建立多个库存组织,每个库存组织有一个帐簿集,记录物料进出事务。
库存组织是建立在经营单位之下的,可以细分为不同的子仓库。
4 系统支持多货币。
系统的帐套参数中有一个本位币设定,业务单据中没有指定货币的,以本位币为记帐货币,业务单据中有记录货币字段的,金额值以单据中设定的货币字段的值为记帐依据。业务单据中一般会用Amount和AmountLocal来分别记录两种货币计算的金额值,汇率以当前业务单据的货币和本位币的汇率为换算依据。
多货币要考虑单据间流转时不同的货币转换。比如用HKD港币下采购订单,在付款时用USD美金支付。
5 系统支持线上审批。
以.NET WF为工作流引擎,需要自定义活动(审批,传送消息,发送报表),定义工作流类型(批核,日记帐修改,计划任务),定义工作流服务,设置数据库解决工作流数据库持久化。
6 系统支持批号和序号管理。
批号和序号是解决特定细分行业而增加的特色功能。比如药品,食品,要跟踪到每一批产品的有效期。序号管理用于电子类产品,用于售后服务。
销售模块
7 系统支持税金,定金,折扣,其它费用。
税金和折扣会改变单价和金额的计算公式,定金会影响应收款,相当于预先收取客户一定的合同保证金。其它费用,比如送货费用,包装费用会影响销售单的总金额。
销售订单总金额= 总物料金额 + 增加项(送货,包装费用,利润率) - 扣减项(折扣)
8 系统支持多次送货。
销售货物的发出要产生总帐凭证,凭证记帐如下:
借:应收帐 $5,000
贷:销售 $5,000
9 系统支持报价单转销售单。
当发出给客户的报价单Quotation,客户接受之后,可由报价单直接生成销售订单Sales Order,相关的货币付款条款,物料明细被带出销售订单中。
10 系统支持销售单产生采购单或工作单。
对贸易型公司,只做物料的买入和卖出操作,不实际生产,可直接由销售订单产生送货单,对库存不足的销售订单中的物料直接产生采购订单。对生产型企业,比如销售1000部电脑,由销售订单1000部电脑,直接产生制造1000部电脑的工作单(生产任务单Job Order/Work Order),然后再发出物料,做完工收货。
11 系统支持销售包装,支持多种包装规格。
主要解决包装数量的分配和标签打印。销售订单物料销售A销售100个数量单位,每箱装8个数量单位,计算之后一共要9箱。箱子的四边需要打印一些标签,值由用户自定义,并可以带一些销售订单和物料的值到标签中。
采购模块
12 系统支持供应商价格与批量维护。
维护一个供应商供应物料价目表,供应商每次的供货价格都有记录可追查,这样也方便下次录入采购单时,直接带出上次采购单相同批量情况下的价格。批量管理则适用于不同的采购批量,有折扣或优惠的价格。
13 系统支持税金,定金,折扣,其它费用。
与销售模块相同,税金,定金,折扣,其它费用会影响订单总金额。比如从国外购买物品需要支持保险费。
13 系统支持采购验货,支持MIL-105E验货标准。
IQC用于对供应商来料进行检测,跟踪供应商供货质量。AQL是国际通用的验货标准,系统支持抽查验货。
14 系统支持由物料需求计划自动生成采购单。
MRP产生的物料需求有两种处理方法:采购属性的原材料,生成采购订单,生产制造的半成品则发放为生产任务单。
仓库模块
15 系统支持物料预留(销售单,工作单)。
物料预留(Reserved)适用于这样的场景,对于销售或是生产比较重要的客户或交期很严格的订单,必须有足够的物料及时开展生产或发出货物,这样在仓库物料不充足的情况下,必须提前将这一部分由发货单或生产单需求的物料留住(On-Hold),不允许发出或其它用途,相当于扣减了可用库存量,但实际库存却没有变化。
16 系统支持标准成本和实际成本,实际成本支持先进先出(FIFO),平均成本。
FIFO(先进先出)适用于食品药品等与保质期有关的行业。
生产制造模块
17 系统支持大量工程更改。
物料清单的两大要素是物料列出和工序标准。大量工程更改支持批量的修改物料清单,比如给一组物料清单增加一个新物料,或是由于工序改善,可以节省一道工序,从物料清单中删减工序。
18 系统支持主生产计划(MPS)和物料需求计划(MRP)。
MRP和MPS计划的对象不同,计算方法一致,前者计算对象是成品,后者是原材料。
19 物料需求计划生成的计划订单在订单发布前仍可以修改。
由MRP计算跟踪物料提前期,计划收货和现有库存量,物料阶层码等信息计算出物料需求,由物料需求转化为计划订单,计划订单在发放为采购单或工作单前,仍旧可以修改参数以适应实际需要。
20 系统支持物料损耗,耗用,退回及发散料。
PMC控制物料的需求和使用,车间生产过程中会出现一些偏差。物料损耗,耗用,退回等情况适用于处理生产过程中的异常。比如由工作单产生的物料需求,发料到车间后因为操作不当或其它原因,需要重新发料,这时采取发散料(Spare Issue)的方式处理。
21 系统支持外发加工。
外发加工分为工序外发和原材料外发。外发加工涉及到成本相关的核算,与采购业务的性质相似,相当于购买生产服务。有的ERP系统直接用采购订单作为外发加工单的单据,再增加少量特性。
总帐模块
22 系统支持批次过帐由业务模块传递而来的凭证,与进销存,仓库和制造模块紧密集成。
企业的生产经营活动过程中的资金流,实现方法就是由各业务模块生成总帐凭证。比如工作单物料发出产生以下记帐:
借:在进行工作 $2,000
贷:仓库 $2,000
再比如销售退货,产生如下记帐凭证:
借:销售退货 $250
贷:应收帐 $250
23 系统支持周期凭证。
对于企业一些日常性的有规律的经营支出,比如房租,固定资产折旧,这些可以做成周期性凭证,每月做期末处理月结时由系统自动生产记帐凭证。
24 系统支持帐户调整。
总帐模块包含三套帐,记帐凭证(Voucher)为记帐的原始依据(相对于ERP系统,会计实际记帐的原始依据是收款凭证,付款凭证和转帐凭证),根据记帐凭证生成流水帐(Journal),总帐(General Ledger),货币分类帐(Currency Ledger)。因为后面三笔数据的依据是记帐凭证,所以帐户调整是产生新的帐户调整凭证,过帐后更新后面三个帐。
解析大型.NET ERP系统 业务逻辑设计与实现的更多相关文章
- 解析大型.NET ERP系统 权限模块设计与实现
权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...
- 解析大型.NET ERP系统 分布式应用模式设计与实现
C/S架构的应用程序,将一些复杂的计算逻辑由客户端转移到服务器端可以改善性能,同时也为了其它方面的控制..NET Remoting在局域网内调用的性能相当不错.ERP系统中基于.NET Remotin ...
- 解析大型.NET ERP系统 十三种界面设计模式
成熟的ERP系统的界面应该都是从模板中拷贝出来的,各类功能的界面有规律可遵循.软件界面设计模式化或是艺术性的创作,我认可前者,模式化的界面客户容易举一反三,降低学习门槛.除了一些小部分的功能界面设计特 ...
- 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器
企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...
- 解析大型.NET ERP系统 设计异常处理模块
异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...
- 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式
我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...
- 解析大型.NET ERP系统 界面与逻辑分离
Windows Forms程序实现界面与逻辑分离的关键是数据绑定技术(Data Binding),这与微软推出的ASP.NET MVC的原理相同,分离业务代码与界面层,提高系统的可维护性. 数据绑定 ...
- 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能
做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...
- 解析大型.NET ERP系统 20条数据库设计规范
数据库设计规范是个技术含量相对低的话题,只需要对标准和规范的坚持即可做到.当系统越来越庞大,严格控制数据库的设计人员,并且有一份规范书供执行参考.在程序框架中,也有一份强制性的约定,当不遵守规范时报错 ...
随机推荐
- webpack之傻瓜式教程
接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...
- ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区
前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...
- C#异步编程(二)
async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...
- 关于Android避免按钮重复点击事件
最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...
- C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent
看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...
- 怎样在Dos里切换盘符
一:在Dos里切换盘符 a:在电脑左下角右击显示图片;(我用的是win10系统,其他系统类似) b:点击运行,输入cmd; c:点击确定: d:输入盘符:(如f:) 或F: 只写字母,不写分号是不行的 ...
- 1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...
- 第11章 Linux服务管理
1. 服务分类 (1)Linux的服务 ①Linux中绝大多数的服务都是独立的,直接运行于内存中.当用户访问时,该服务直接响应用户,其好处是服务访问响应速度快.但不利之处是系统中服务越多,消耗的资源越 ...
- Web 前端攻防(2014版)
在百度 FEX 团队时写的.有次让我写点前端开发中注意的安全规范,结果写着写着就跑题了,写了一堆纯前端实现的攻击方式...当然还有防范措施. 文章就懒得粘过来了~ 直接贴个地址算了:) http:// ...