解析大型.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

帐套表记录了数据库的连接信息,还可记录帐套的行业信息以方便系统特定功能只针对的帐套设定的行业。

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

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)。因为后面三笔数据的依据是记帐凭证,所以帐户调整是产生新的帐户调整凭证,过帐后更新后面三个帐。

时间: 2024-10-26 12:36:27

解析大型.NET ERP系统 业务逻辑设计与实现的相关文章

解析大型.NET ERP系统 权限模块设计与实现

权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 说明 谁 部门+岗位职责 也可以不与部门岗位绑定,省略角色定义. 能否 能(True) 否(False) 用0或1,true/false表示能否执行 做 增加/删除/修改/查询/统计/打印/过帐 权限对象 哪些 通用的/本人的/本组别的/本部门的/本公司的/其他的/多帐套的 范围:行政部的办公文具

解析大型.NET ERP系统 分布式应用模式设计与实现

C/S架构的应用程序,将一些复杂的计算逻辑由客户端转移到服务器端可以改善性能,同时也为了其它方面的控制..NET Remoting在局域网内调用的性能相当不错.ERP系统中基于.NET Remoting和WCF构建一个应用程序服务器(Application Server). 分布式应用设计目标: 1  客户端的连接,服务器要能控制.服务器根据授权许可文件的内容,控制客户端并发数. 2  服务器崩溃,客户端要得到通知,挂起当前数据输入操作,当服务器可用时,客户端可自动重新连接 . 3  支持数据加

解析大型.NET ERP系统 十三种界面设计模式

成熟的ERP系统的界面应该都是从模板中拷贝出来的,各类功能的界面有规律可遵循.软件界面设计模式化或是艺术性的创作,我认可前者,模式化的界面客户容易举一反三,降低学习门槛.除了一些小部分的功能界面设计特殊一些,ERP绝大部分的功能的界面都相似.以我接触和设计的ERP系统,总结常见的界面设计模式,供读者参考. 模式1 单据 Entry 常用于各种单据的输入界面,也可用于主文件/主档(客户,供应商,部门等)界面,参考下面的图片. 我在图中作了标识,A区是工具条按钮,所有的界面共享工具条按钮,接着是数据

解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件,若是在项目开发前就准备好了这些组件,为项目如期交付提供了保证. 查询设计器 Query Designer  支持选择一个或多个数据库表,通过左右连接的方式构建查询结果,支持直接手写SQL语句设计查询,支持调用存储过程查询,支持用代码设计查询. 报表设计器 Report Designer 支持配置的

解析大型.NET ERP系统 设计异常处理模块

异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 .NET 框架定义很多异常类型,ERP系统中根据实际的需要,我们再增加一些自定义的异常类型. 数据库访问异常:LLBL Gen Pro已经定义几种常见的异常类型,常见的异常类型及其作用简介. ORMConcurrencyException     并发异常,更新实体时实体已经被删除,删除时有约束无法删

解析大型.NET ERP系统架构设计 Framework+ Application 设计模式

我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协作良好的系统,搭建开发人员基础平台,一直是我研究的方向. SouceCounter(版本3.3.91.79)对源代码的统计信息如下: 下面来详细解析一下这个系统的设计架构,纯.NET技术架构方案,C/S WinForms系统. 系统分为Framework和Application两个部分,前者是框架(

解析大型.NET ERP系统 界面与逻辑分离

Windows Forms程序实现界面与逻辑分离的关键是数据绑定技术(Data Binding),这与微软推出的ASP.NET MVC的原理相同,分离业务代码与界面层,提高系统的可维护性. 数据绑定 Data Binding 数据绑定技术的主要内容:数据源(Data Source),控件(Control),绑定方式(Binding).通过绑定控件,将数据源中的属性绑定到界面控件中,并可以实现双向的数据绑定.当界面控件中的值发生改变时,可以通过数据绑定控件,更新控件绑定的对象,当通过代码直接改变对

解析大型.NET ERP系统 设计通用Microsoft Excel导入功能

做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到数据库表中.然而一直是在做重复工作,写过不计其数的Excel导入程序,每次只是满足于问题解决,后来终于找到一个方法,实现通用的Excel数据导入. 设计通用的Excel导入功能,第一个实现要求是不能依赖Excel,客户的电脑或服务器很有可能没有安装Excel,所以微软的Office Interop一

解析大型.NET ERP系统 20条数据库设计规范

数据库设计规范是个技术含量相对低的话题,只需要对标准和规范的坚持即可做到.当系统越来越庞大,严格控制数据库的设计人员,并且有一份规范书供执行参考.在程序框架中,也有一份强制性的约定,当不遵守规范时报错误. 以下20个条款是我从一个超过1000个数据库表的大型ERP系统中提炼出来的设计约定,供参考.   1  所有的表的第一个字段是记录编号Recnum,用于数据维护 [Recnum] [decimal] (8, 0) NOT NULL IDENTITY(1, 1)   在进行数据维护的时候,我们可