ZH/Case-Study-01-Journal-08
From ADempiere
This Wiki is read-only for reference purposes to avoid broken links.
Contents
实施日志-08-销售
- 本文属于机械装备制造业进销存实施案例——ADempiere ERP案例研究之一。
- 本文记录ADempiere ERP项目实施的过程
2010-11-03
业务类型
- 由于公司有三种不同的业务类型,要在销售订单当中实现“业务类型”选项,需要进行简单的二次开发。分两步进行:
- 新建窗体:业务类型 - Business Type。
- 关于新建窗体,详细步骤见ERP二次开发资源指引当中的“新窗体(Window)的创建”。
- 在窗体Sales Order中增加Business Type下拉选项
- 提示:如果你在下列选项中没有找到你刚刚创建的数据时,可以点鼠标右键的ReQuery,界面刷新后即可看到。
新建窗体:业务类型
- 创建数据库表:C_Business_Type
- 注意ID要设置为 numeric(10,0) ,如果少于10位在保存记录时会报错,原因是Reference: ID默认设置为10位。
CREATE TABLE C_Business_Type ( C_Business_Type_id numeric(10,0) NOT NULL, ad_client_id numeric(10,0) NOT NULL, ad_org_id numeric(10,0) NOT NULL, "name" character varying(50) NOT NULL, description character varying(200), isactive character(1) NOT NULL DEFAULT 'Y'::bpchar, created timestamp without time zone NOT NULL DEFAULT now(), updated timestamp without time zone NOT NULL DEFAULT now(), createdby numeric(10,0) NOT NULL, updatedby numeric(10,0) NOT NULL ); ALTER TABLE C_Business_Type ADD PRIMARY KEY (C_Business_Type_ID );
- 在Application Dictionary中创建表:
- 以System角色登录系统。
- 打开窗口:Table and Column
- 新建表格:C_Business_Type。
- 设置DB Table Name: C_Business_Type。注意:必须与数据库表名称一致!
- 设置Data Access level: Client+Organization。
- 点击按钮:Create Columns from DB,从数据库中自动生成列。
- 为节省篇幅,以后不再复述以上步骤,简称:“新建AD表:C_Business_Type”。
- 新建窗体:Business Type
- 打开窗口:Window, Tab & Field
- 新建窗体:Business Type
- 打开页签Tab,
- 新建页签:Business Type
- 设置Table: C_Business_Type
- 点击按钮:Create Fields,从AD表中自动生成列。
- 打开页签Field Sequence,调整列显示顺序。
- 打开页签Field,调整窗体外观。要注意Sequence, Same Line, Display Length等设置。
- 将窗体加入菜单
- 打开窗口:Menu
- 新建条目:Business Type
- 设置Action: Window
- 设置Window: Business Type
- 并将其移动至合适的位置。
- 添加记录
- 接下来我们就可以用刚刚新建的窗体来添加记录了。
- 以TongjiAdmin角色登录系统
- 打开窗口:Business Type。依次新建:
- 研发销售、Research & Sales
- 来图加工、Processing with Supplied Drawings
- 设备改造、Equipment Upgrading
增加Business Type下拉选项
- 设置引用(Reference)
- 打开窗口:Reference
- 新建:Business Type
- 设置Entity Type: User maintained
- 设置Validation Type: Table Validation
- 打开页签:Table Validation
- Table: C_Business_Type
- 设置Key Column: C_Business_Type_ID
- 设置Display column: Name
- 在数据库表C_Order中增加列:C_Business_Type_ID
ALTER TABLE c_order ADD C_Business_Type_id numeric(10,0) NOT NULL DEFAULT 1000001;
- 在AD表Order中增加列:C_Business_Type_ID
- 在窗体Sales Order中增加列:C_Business_Type_ID
- OK,一切完毕!以TongjiAdmin角色登录系统,打开窗口:Sales Order,就可以看到自己的杰作了 :-)
讨论栏
一楼 為何不是在單據類別設定
- 為何不是在單據類別(C_DocType_ID)設定:
- 研发销售、Research & Sales 訂單
- 来图加工、Processing with Supplied Drawings 訂單
- 设备改造、Equipment Upgrading 訂單
- Business Type : 會改變客戶訂單是否必須核對價格清單 ?
- Business Type : 是要來判斷或改變哪些管理流程 ?
- 在訂單 C_Order 加欄位,也必須在 MOrder 物件加 Method,
- I_C_Order.java 加 get/setC_BusinessType_ID Method !
- X_C_Order.java 加 get/setC_BusinessType_ID Method !
- MOrder.java ,Constructure, beforeSave 必須檢查驗證 !
- C_BusinessType 必需產生物件給系統引用
- I_C_BusinessType.java
- X_C_BusinessType.java
- MBusinessType.java
- 列如 MBusinessType businessType = MBusinessType.get();
- 列如 MBusinessType[] businessTypes = MBusinessType.getAll();
- -- Albertachen
二楼
- 呵呵,我没有想到单据类别(C_DocType_ID)可以这样用。谢谢Albertachen的提醒!
> Business Type : 會改變客戶訂單是否必須核對價格清單 ?
- 回复Albertachen:对于这家公司,这三种业务类型可以共用一个价格表。
> Business Type : 是要來判斷或改變哪些管理流程 ?
- 回复Albertachen :在这家公司,不同的业务类型与不同的业务流程关联。比如“来图加工”就不需要技术部进行设计,但是需要技术部进行造价核算和图纸转化。
- -- Peanut
2010-11-05
销售基础设置
- 业务伙伴分组
- 窗口:Business Partner Group
- 大客户组, VIP Customer Group
- 国内客户组, Domestic Customer Group
- 国外客户组, Foreign Customer Group
- 采购供应商组,Purchasing Supplier Group
- 外协供应商组, Outside Processing Supplier Group
- 支付方式:
- 窗口:Payment Term:
- 立即支付, Immediate
- Net 30,收货后30天支付.
- 50:50,立即支付50%, 余款30天内付清。50% Immediate - 50% in 30 days
- 问候:
- 窗口:Greeting:
- 测试报表时发现{0}不能被自动替代,因此去掉{0}
- Dear, Dear
{0} - Mr, Mr
{0} - Ms, Ms
{0} - 尊敬的, 尊敬的
{0}
- 销售区域
- 窗口:Sales Region
- 国内
- 中国南方区
- 中国北方区
- 国外
- 亚洲
- 非洲
- 欧洲
- 北美洲
- 拉丁洲
- 大洋洲
讨论栏
2010-11-07
销售模块实施分析
- 昨天主要在对销售合同案例进行分析。
前期准备工作
- 需整理数据清单
- 客户信息
- 产品信息
- 需整理标准文档格式
- 销售合同-国内
- 销售合同-国外
- 生产通知
- 需提供典型销售订单案例
- 大客户2个
- 国内客户2~3个
- 国外客户2~3个
几点感受
- 该公司销售合同格式尚未标准化,各种销售合同格式相似处大概只占65%。这给ERP界面定制、报表定制带来许多额外的分析整理工作。由此可见ERP实施与文档标准化息息相关。
- 要想贴近客户实际需求,需要对ADempiere ERP原有销售订单窗体进行比较大的改动,主要是增加窗体中的填写项目,相应地进行报表定制。
2010-11-09
销售数据整理模板
今天与市场部的职员举行了一次会议,将客户信息、销售订单需要增加或变更的字段、字段值的选项都确定下来了。
这是数据整理模板(电子表格下载)。
以后会陆续增加采购、仓库等模块的模板。
讨论栏
2010-11-13
销售订单下拉表
这两天对销售订单、客户信息的定制进行了梳理。
- 销售订单需要新增字段30个,其中下拉选项表17个。
- 客户信息需要新增字段6个,其中下拉选项表2个。
去除重复项,共需下拉选项表18个。
起初想到的办法是为每个下拉选项表建一个表格,这样要建18个表格,比较繁琐。后来发现可以利用Reference的List,这样就简单多了。
从这个角度来看,之前增加的业务类型(Business Type)也可以通过Reference来设定,不需要创建数据表C_Business_Type了。
Sales Order当中的Invoice Rule就是这样处理的:
DB Table:
invoicerule character(1) NOT NULL
Referece:
Name= C_Order InvoiceRule Validation Type=List Validation
AD Table:
Name = InvoiceRule Reference = List Reference Key =C_Order InvoiceRule
- 遇到的问题及解决方法:
- 设置Payment Term,要以“Role=TongjiAdmin,Client=Tongji, Orangization=*”登录。
- Payment Rule, Invoice Rule, Delivery Rule。起初发现这些下拉选表没有找到相应的窗体来修改,后来发现是在Reference窗体里更改的。
讨论栏
2010-11-29
实施栏
- 今天主要工作:
- 对新增的销售字段进行排版。
- 导入客户资料
- 导入价格表
- 对帐户密码进行设置
- 对角色进行设置。主要通过菜单树(Menu)来控制。
2010-12-09
销售订单窗口优化调整
- 对销售订单窗口进行了优化:
- 主要是关闭了不用的选项、设置Field Group、设置默认值。
- 在Document Type里把不需要的Sales Order Type改为禁用。
几点发现
- 发现用Import Product窗口不但可以导入产品信息,还可以导入产品价格表,非常方便。
- Sales Order当中Sales Representative的设置: 要同时设置User和Business Partner,并关联起来。
2010-12-13
销售订单实施小结
- 这段时间主要进行销售订单窗口和销售合同报表的制作。前后大约花费了15天左右的时间,主要用在:
- 销售订单窗口字段的增减和设置;
- JasperReports的探索;
- 对销售合同进行分析,并进行报表制作。
困难:销售合同没有标准化
- 实施当中最为困难的是该企业的销售合同没有标准化。主要表现在以下几个方面:
- 销售合同格式没有标准化
- 语言不统一。存在纯中文、纯英文、中文+英文三种形式。
- 合同条款数目不固定,增减无常。
- 同一条款在不同合同中写法各不相同,某些内容(即字段)的显示和隐藏没有固定规律。
- 产品型号栏目格式不统一,存在以下三种形式:产品型号+中文名称,产品型号+英文名称, 产品型号+中文名称+英文名称。同时还存在是否添加产品图片的区别,这样一来就有六种形式。
- 销售合同条款内容(或选项)没有标准化
- 许多字段内容变化太多,以下拉列表显示的选项总是存在许多的例外。
- 例如付款条件(Payment Term),除了3:7、3:6:1等方式外,还存在许多其它特殊的付款条件,这样同时还带来财务上的许多麻烦(无论财务模块使用的是ADempiere的还是其它财务软件的)。当然付款条件多变的背后,反映了合同评审缺乏公司财务部门的严格把关。
- 文档标准化是ERP成功实施的基本前提
- 对于变化无常的合同格式,如果花费太多的精力去提供相应的报表格式,是毫无价值的工作。
- 因此该项目实施只提供最基本格式的中文模板。用户如需进行格式或内容上的更改,就导出为*.ODT格式自行修改。
- 对于销售合同的最佳解决方案是:标准的销售订单 + 灵活可变的合同附加条款。当然该企业要采纳这样的方案还需要一段过程。
2010-12-24
销售代表的设置
- 在Sales Order销售代表选项中,Sales Representative (销售代表)要在Business Partner和User两处都要做好设置。
- 原因在于Table: C_Order当中Sales Representative字段的Reference(引用)设置:AD_User - SalesRep。
- 打开Reference: AD_User - SalesRep,找到Table Validation页签中,可以看到Sql Where设置为:EXISTS (SELECT * FROM C_BPartner bp WHERE AD_User.C_BPartner_ID=bp.C_BPartner_ID AND bp.IsSalesRep='Y')