根据近几年的制造业软件开发经验,以我开发人员的理解角度,简要说明功能(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系统 业务逻辑设计与实现的更多相关文章

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

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

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

    C/S架构的应用程序,将一些复杂的计算逻辑由客户端转移到服务器端可以改善性能,同时也为了其它方面的控制..NET Remoting在局域网内调用的性能相当不错.ERP系统中基于.NET Remotin ...

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

    成熟的ERP系统的界面应该都是从模板中拷贝出来的,各类功能的界面有规律可遵循.软件界面设计模式化或是艺术性的创作,我认可前者,模式化的界面客户容易举一反三,降低学习门槛.除了一些小部分的功能界面设计特 ...

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

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

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

    异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...

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

    我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...

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

    Windows Forms程序实现界面与逻辑分离的关键是数据绑定技术(Data Binding),这与微软推出的ASP.NET MVC的原理相同,分离业务代码与界面层,提高系统的可维护性. 数据绑定 ...

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

    做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...

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

    数据库设计规范是个技术含量相对低的话题,只需要对标准和规范的坚持即可做到.当系统越来越庞大,严格控制数据库的设计人员,并且有一份规范书供执行参考.在程序框架中,也有一份强制性的约定,当不遵守规范时报错 ...

随机推荐

  1. JAVA程序员常用软件整理下载

    ********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...

  2. python 数据类型 -- 元组

    元组其实是一种只读列表, 不能增,改, 只可以查询 对于不可变的信息将使用元组:例如数据连接配置 元组的两个方法: index, count >>> r = (1,1,2,3) &g ...

  3. 防线修建 bzoj 2300

    防线修建(1s 512MB)defense [问题描述] 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还 ...

  4. 统计iOS项目的总代码行数的方法

    打开终端, 用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or - ...

  5. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  6. keepalive的不足,如何处理

    MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求:我们知道,keepalive是基于虚拟ip的存活来判断是否抢占master的机制的,但是如果我们做了MySQL的keepa ...

  7. Linux模块编程框架

    Linux是单内核系统,可通用计算平台的外围设备是频繁变化的,不可能将所有的(包括将来即将出现的)设备的驱动程序都一次性编译进内核,为了解决这个问题,Linux提出了可加载内核模块(Loadable ...

  8. mysql join 和left join 对于索引的问题

    今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_ ...

  9. Windows平台分布式架构实践 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  10. 我认为JS还可以改进的点

    曾经我一度在寻找JS的替代语言,尝试过CoffeeScript/TypeScript/Dart(都是浅尝).不为什么原因,而是当你写的越多的JS,越觉得JS很多时候显得很操蛋.好在ES2015和Bab ...