Difference between revisions of "ZH/Case-Study-01-Journal-01"
From ADempiere
This Wiki is read-only for reference purposes to avoid broken links.
(→2010-10-28) |
|||
(28 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Chinese|<返回中文首页>]] | + | [[Chinese|<返回中文首页>]] [[ZH/Case-Study-01|<返回本案例研究首页>]] |
+ | <span style="position:relative;left:-10px;top:10px">[[Image:Noia_64_apps_knode_m.png|40px]]</span> | ||
− | =实施日志= | + | {| cellspacing="0" style="margin-top:23px; width:100%;padding:1px;margin-top:-50px;vertical-align:top;" |
+ | | | ||
+ | <span style="font-size:100%;vertical-align:top;"> | ||
+ | {| style="vertical-align:top;" width="100%" cellspacing="1" cellpadding="1" | ||
+ | |- | ||
+ | |style="width:75%;vertical-align:top;"| | ||
+ | {| style="width: 100%; margin:6px 0 0 0; background:none; border-spacing: 0px;text-align:left; font-size:100%; padding:0.2em; border:1px solid #BFB1A3; color:#000; font-weight:bold;" | ||
+ | |- | ||
+ | | style="background-color:#F2E6CE;vertical-align:top;"| | ||
+ | <div style="top:+0.2em;text-align:left;"> | ||
+ | :* 本页面于2010年12月26日停止更新,原有内容已经复制到“实施日志-新排版”。见[[ZH/Case-Study-01|案例01-机械设备制造业进销存实施案例]]。 | ||
+ | :* 感谢您的关注! | ||
+ | </div> | ||
+ | |} | ||
+ | </span> | ||
+ | |} | ||
+ | |||
+ | |||
+ | =实施日志-01= | ||
* 本文属于[[ZH/Case-Study-01|ADempiere ERP现实案例研究之一]]。 | * 本文属于[[ZH/Case-Study-01|ADempiere ERP现实案例研究之一]]。 | ||
* 本文记录ADempiere ERP项目实施的过程 | * 本文记录ADempiere ERP项目实施的过程 | ||
Line 8: | Line 27: | ||
=2010年10月= | =2010年10月= | ||
==2010-10-27== | ==2010-10-27== | ||
+ | ===项目发起=== | ||
* 今天将项目资料进行了整理,并放在Wiki上,正式发起“ADempiere ERP现实案例研究”。 | * 今天将项目资料进行了整理,并放在Wiki上,正式发起“ADempiere ERP现实案例研究”。 | ||
* 明天将进行系统安装。 | * 明天将进行系统安装。 | ||
==2010-10-28== | ==2010-10-28== | ||
− | * | + | ===系统安装=== |
+ | * 今天上午完成了系统安装。安装方法见[[Install on Debian Chinese|在Debian及Postgres上安装Adempiere]] | ||
* 系统补丁安装方法见[[Patches_Installation]](英文)。 | * 系统补丁安装方法见[[Patches_Installation]](英文)。 | ||
* 安装过程中所遇到的问题已经汇总到[[ZH/Problem in Installation|安装问题解决方法]]。 | * 安装过程中所遇到的问题已经汇总到[[ZH/Problem in Installation|安装问题解决方法]]。 | ||
Line 22: | Line 43: | ||
==2010-10-29== | ==2010-10-29== | ||
− | === | + | ===实体初始化=== |
* 今天主要是实体Client初始化。 | * 今天主要是实体Client初始化。 | ||
* 内容主要依照《ADempiere 3.4 ERP Solutions》的第三章和第四章,同时参考[[ManPageX_InitialClientSetup]] | * 内容主要依照《ADempiere 3.4 ERP Solutions》的第三章和第四章,同时参考[[ManPageX_InitialClientSetup]] | ||
Line 56: | Line 77: | ||
* Albertachen大人所言极是,本人虚心接受!--Peanut | * Albertachen大人所言极是,本人虚心接受!--Peanut | ||
====三楼==== | ====三楼==== | ||
− | + | > ''(台灣技術支持團隊說明:perior control單據期間未開啟,單據不可成立單據不可過帳,單據沒有成立沒有庫存帳,單據沒有過帳沒有成本帳)'' | |
− | + | : 回复Albertachen :ADempiere创建实体时已经默认创建并启用2010财年,只需要在Year页签和Period页签确认一下即可,不需要另外手工开启会计期间。之前没有写清楚,抱歉! | |
− | + | > ''(台灣技術支持團隊說明:沒有自動依據單據類別直接反應到財務報表的 ERP 就像是被斬頭的人,是屍塊已經沒有核心價值與靈魂)'' | |
− | + | : 回复Albertachen :财务的确非常重要,但是这家公司已经有一套T3用友通标准版财务软件,所以我的想法是第一期暂不使用ADempiere的财务功能,比如说会计凭证录入,但是可以先把财务的骨架搭起来,以便后期启用。--Peanut | |
==2010-10-30== | ==2010-10-30== | ||
[[Image:ZH-Case-Study-01_Business_Type.png|350px|thumb|公司业务类型]] | [[Image:ZH-Case-Study-01_Business_Type.png|350px|thumb|公司业务类型]] | ||
− | + | ===重新导入中国会计科目=== | |
− | + | ||
* 综合各位的建议,财务模块的确很重要。于是重新导入中国会计科目。 | * 综合各位的建议,财务模块的确很重要。于是重新导入中国会计科目。 | ||
* 首先,整理中文会计科目表。 | * 首先,整理中文会计科目表。 | ||
Line 85: | Line 105: | ||
** 在这里有一点疑问——当初创建实体时曾经选过会计科目表AccoutingUS.csv,在Import Accounts能否全面覆盖? | ** 在这里有一点疑问——当初创建实体时曾经选过会计科目表AccoutingUS.csv,在Import Accounts能否全面覆盖? | ||
** 按理说把"Update Default Accounts"选上了以后就可以了,不需要重新创建实体。 | ** 按理说把"Update Default Accounts"选上了以后就可以了,不需要重新创建实体。 | ||
− | === | + | ===仓库重新设定=== |
* '''仓库分类计划''' | * '''仓库分类计划''' | ||
# 待检品仓库, Waiting Articles Warehouse(采购、外协、自制未检验零件)。 | # 待检品仓库, Waiting Articles Warehouse(采购、外协、自制未检验零件)。 | ||
Line 102: | Line 122: | ||
# 在Accouting页签应当如何妥善设置会计科目?尤其是报废品仓库。 | # 在Accouting页签应当如何妥善设置会计科目?尤其是报废品仓库。 | ||
− | + | ===其它=== | |
* 图片:公司业务类型、公司组织结构上传完毕,见[[ZH/Case-Study-01-Requirement Analysis|客户实施需求分析]]。 | * 图片:公司业务类型、公司组织结构上传完毕,见[[ZH/Case-Study-01-Requirement Analysis|客户实施需求分析]]。 | ||
Line 117: | Line 137: | ||
## M_Product_Acct.P_Asset_Acct | ## M_Product_Acct.P_Asset_Acct | ||
====二楼==== | ====二楼==== | ||
− | |||
=2010年11月= | =2010年11月= | ||
Line 129: | Line 148: | ||
[[Image:ZH-Case-Study-01-Product Category Accounting.png|300px|thumb|产品类别会计科目设置]] | [[Image:ZH-Case-Study-01-Product Category Accounting.png|300px|thumb|产品类别会计科目设置]] | ||
==2010-11-02== | ==2010-11-02== | ||
− | + | ===物料类别=== | |
− | + | ||
* '''物料分类方法:''' | * '''物料分类方法:''' | ||
# 成品,指可以直接销售给客户的设备及其配件,Finished Goods。 | # 成品,指可以直接销售给客户的设备及其配件,Finished Goods。 | ||
+ | ## 包装机械,Packing Machine | ||
+ | ## 专用机械,Specialized Machine | ||
# 半成品,指经加工或组装的零部件,Semi-Finished Goods。 | # 半成品,指经加工或组装的零部件,Semi-Finished Goods。 | ||
# 原材料,指直接用于产品的采购件,包括铸件和锻件,不包括焊条、刀具、办公用品等物品,Raw-material。 | # 原材料,指直接用于产品的采购件,包括铸件和锻件,不包括焊条、刀具、办公用品等物品,Raw-material。 | ||
Line 144: | Line 164: | ||
# 与仓库设置类似,物料类别也涉及到会计科目设置的问题。 | # 与仓库设置类似,物料类别也涉及到会计科目设置的问题。 | ||
− | + | ===计量单位=== | |
* ADempiere ERP系统默认设置的单位不足,需要增加物料计量单位。 | * ADempiere ERP系统默认设置的单位不足,需要增加物料计量单位。 | ||
# kg,kilogram,千克,重量单位。 | # kg,kilogram,千克,重量单位。 | ||
Line 154: | Line 174: | ||
# 来到页签:Translation。找到zh_CN,将计量单位名称和描述翻译为简体中文。 | # 来到页签:Translation。找到zh_CN,将计量单位名称和描述翻译为简体中文。 | ||
− | + | ===货币设置=== | |
# 将不需要使用的货币设置为不生效(de-active)。只保留如下设置: | # 将不需要使用的货币设置为不生效(de-active)。只保留如下设置: | ||
#* 人民币,CNY | #* 人民币,CNY | ||
Line 166: | Line 186: | ||
</pre> | </pre> | ||
− | + | ===货币折算类型=== | |
* '''操作:''' | * '''操作:''' | ||
# 以System角色登录系统。 | # 以System角色登录系统。 | ||
Line 176: | Line 196: | ||
*# Spot Conversation Rate Type,指现期汇率吗?我查到了的解释是:The rate of a foreign-exchange contract for immediate delivery. Also known as "benchmark rates", "straightforward rates" or "outright rates", spot rates represent the price that a buyer expects to pay for a foreign currency in another currency.(摘自[http://www.investopedia.com/terms/s/spotexchangerate.asp INVESTOPEDIA]) | *# Spot Conversation Rate Type,指现期汇率吗?我查到了的解释是:The rate of a foreign-exchange contract for immediate delivery. Also known as "benchmark rates", "straightforward rates" or "outright rates", spot rates represent the price that a buyer expects to pay for a foreign currency in another currency.(摘自[http://www.investopedia.com/terms/s/spotexchangerate.asp INVESTOPEDIA]) | ||
− | + | ===货币汇率设置=== | |
# 以南京同济Admin的角色登录系统。 | # 以南京同济Admin的角色登录系统。 | ||
# 打开窗口:Currency Rate。依次创建新记录,Currency Type均设置为<strike>Average</strike> Spot。 | # 打开窗口:Currency Rate。依次创建新记录,Currency Type均设置为<strike>Average</strike> Spot。 | ||
Line 184: | Line 204: | ||
## EUR to RMB, Multiply rate: 9.3069 | ## EUR to RMB, Multiply rate: 9.3069 | ||
− | + | ===用户=== | |
− | + | ||
* '''用户设置方案:''' | * '''用户设置方案:''' | ||
# TongjiAdmin,管理员 | # TongjiAdmin,管理员 | ||
Line 194: | Line 213: | ||
# 以TongjiAdmin登录系统 | # 以TongjiAdmin登录系统 | ||
# 打开窗口:User。依次新建用户。 | # 打开窗口:User。依次新建用户。 | ||
− | + | ||
+ | ===角色=== | ||
* '''角色设置方案:''' | * '''角色设置方案:''' | ||
# Tongji系统管理,Admin,系统管理员 | # Tongji系统管理,Admin,系统管理员 | ||
Line 243: | Line 263: | ||
====二楼==== | ====二楼==== | ||
* 谢谢Myfren的补充!看来货币折算类型应当设置为spot。 --Peanut | * 谢谢Myfren的补充!看来货币折算类型应当设置为spot。 --Peanut | ||
+ | ====三楼==== | ||
+ | * 那个角色的设置是否简单了点? | ||
+ | * 在设置角色的时候是否应该设置上下级关系,如销售员和销售经理,后续建立销售订单可以建立相关的审批流程。以便更好的了解Adempiere的细节操作 。-- Myfren | ||
+ | ====四楼==== | ||
+ | * 我准备通过不同的角色分配不同的Menu来进行主要权限控制,同时以窗体权限控制和脚本来进行辅助控制。 | ||
+ | * “销售员和销售经理”——本来打算过几天再设置的。嗯,我现在就加上去 :-) --Peanut | ||
+ | |||
+ | ==2010-11-03== | ||
+ | [[Image:ZH-Case-Study-01-Business Type.png|300px|thumb|业务类型-截屏]] | ||
+ | [[Image:ZH-Case-Study-01-Sales Order.png|300px|thumb|销售订单-业务类型-截屏]] | ||
+ | |||
+ | |||
+ | ===价格表=== | ||
+ | * '''价格表模式:''' | ||
+ | # 打开窗口:Price List Schema。 | ||
+ | ## 新建:采购 | ||
+ | ## 新建:销售 | ||
+ | ## 将"Standard"设置为不启用。 | ||
+ | |||
+ | * '''价格表''' | ||
+ | # 打开窗口:Price List。 | ||
+ | ## 新建采购价格表,勾上"Default" | ||
+ | ## 新建销售价格表,勾上"Sales Price list"。 | ||
+ | ## "Standard",去掉"Default"、"Active"选项,设置为不启用。 | ||
+ | # 打开页签:Version。 | ||
+ | ## 新建:采购价格表2010年版 | ||
+ | ## 新建:销售价格表2010年版 | ||
+ | ## "Standard",去掉"Active"选项,设置为不启用。 | ||
+ | |||
+ | ===业务类型=== | ||
+ | * 由于公司有三种不同的业务类型,要在销售订单当中实现“业务类型”选项,需要进行简单的二次开发。分两步进行: | ||
+ | # 新建窗体:业务类型 - Business Type。 | ||
+ | #* 关于新建窗体,详细步骤见[[ZH/List Development|ERP二次开发资源指引]]当中的“新窗体(Window)的创建”。 | ||
+ | # 在窗体Sales Order中增加Business Type下拉选项 | ||
+ | * '''提示:'''如果你在下列选项中没有找到你刚刚创建的数据时,可以点鼠标右键的'''ReQuery''',界面刷新后即可看到。 | ||
+ | ====新建窗体:业务类型==== | ||
+ | * '''创建数据库表:C_Business_Type''' | ||
+ | ** 注意ID要设置为 numeric(10,0) ,如果少于10位在保存记录时会报错,原因是Reference: ID默认设置为10位。 | ||
+ | <pre> | ||
+ | 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 ); | ||
+ | </pre> | ||
+ | |||
+ | * '''在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 | ||
+ | <pre> | ||
+ | ALTER TABLE c_order ADD C_Business_Type_id numeric(10,0) NOT NULL DEFAULT 1000001; | ||
+ | </pre> | ||
+ | * 在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-04== | ||
+ | ===关联报表=== | ||
+ | [[Image:ZH-Case-Study-01-Report-ProductBOM.png|300px|thumb|产品物料明细报表]] | ||
+ | * 今天主要测试了ADempiere的关联报表功能,这个报表的制作有点繁杂,想参照测试的新手建议从最简单的报表修改开始。 | ||
+ | * 本测试参照HumanFlash的动画教程进行,见HumanFlash/Part8/D.Customizing Reports/4.Create New Reports(Document Lines)。 | ||
+ | * 测试时遇到一个小问题,就是报表头与报表明细重迭了,后来发现是Print Format当中的Header Margin没有设置。设置为120后就不重迭了。 | ||
+ | ====SQL语句==== | ||
+ | * SQL语句如下: | ||
+ | |||
+ | * MyProduct_V | ||
+ | <pre> | ||
+ | CREATE OR REPLACE VIEW MyProduct_V AS | ||
+ | SELECT | ||
+ | p.M_Product_ID AS MyProduct_V_ID, | ||
+ | p.AD_Client_ID, | ||
+ | p.AD_Org_ID, | ||
+ | p.isActive, | ||
+ | p.created, | ||
+ | p.createdby, | ||
+ | p.updated, | ||
+ | p.updatedby, | ||
+ | 'en_US' AS AD_Language, | ||
+ | p.M_Product_ID, | ||
+ | p.value, | ||
+ | p.name, | ||
+ | p.M_Product_Category_ID, | ||
+ | uom.UoMSymbol, | ||
+ | tax.name AS TaxCategory, | ||
+ | rl.name AS ProductType, | ||
+ | p.volume, | ||
+ | p.weight, | ||
+ | p.upc, | ||
+ | p.sku | ||
+ | FROM M_Product p | ||
+ | INNER JOIN C_UoM uom ON ( uom.C_UoM_ID = p.C_UoM_ID ) | ||
+ | INNER JOIN C_TaxCategory tax on (tax.C_TaxCategory_ID = p.C_TaxCategory_ID) | ||
+ | INNER JOIN AD_Ref_List rl ON ( rl.value = p.ProductType AND rl.AD_Reference_ID =270); | ||
+ | </pre> | ||
+ | |||
+ | * MyProduct_VT | ||
+ | <pre> | ||
+ | CREATE OR REPLACE VIEW MyProduct_VT AS | ||
+ | SELECT | ||
+ | p.M_Product_ID AS MyProduct_V_ID, | ||
+ | p.AD_Client_ID, | ||
+ | p.AD_Org_ID, | ||
+ | p.isActive, | ||
+ | p.created, | ||
+ | p.createdby, | ||
+ | p.updated, | ||
+ | p.updatedby, | ||
+ | pt.ad_language AS AD_Language, | ||
+ | p.M_Product_ID, | ||
+ | p.value, | ||
+ | pt.name, | ||
+ | p.M_Product_Category_ID, | ||
+ | uomt.UoMSymbol, | ||
+ | taxt.name AS TaxCategory, | ||
+ | rlt.name AS ProductType, | ||
+ | p.volume, | ||
+ | p.weight, | ||
+ | p.upc, | ||
+ | p.sku | ||
+ | FROM M_Product p | ||
+ | INNER JOIN M_Product_Trl pt ON (pt.M_Product_ID = p.M_Product_ID ) | ||
+ | INNER JOIN C_UoM uom ON ( uom.C_UoM_ID = p.C_UoM_ID ) | ||
+ | INNER JOIN C_UoM_Trl uomt ON (uomt.c_uom_id = uom.c_uom_id) | ||
+ | INNER JOIN C_TaxCategory tax ON (tax.C_TaxCategory_ID = p.C_TaxCategory_ID) | ||
+ | INNER JOIN C_TaxCategory_Trl taxt ON (tax.C_TaxCategory_ID = taxt.C_TaxCategory_ID) | ||
+ | INNER JOIN AD_Ref_List rl ON ( rl.value = p.ProductType AND rl.AD_Reference_ID =270) | ||
+ | INNER JOIN AD_Ref_List_Trl rlt ON ( rlt.AD_Ref_List_ID = rl.AD_Ref_List_ID ); | ||
+ | </pre> | ||
+ | |||
+ | * MyProductLine_V | ||
+ | <pre> | ||
+ | CREATE OR REPLACE VIEW MyProductLine_V AS | ||
+ | SELECT | ||
+ | pb.AD_Client_ID, | ||
+ | pb.ad_org_id, | ||
+ | pb.isactive, | ||
+ | pb.created, | ||
+ | pb.createdby, | ||
+ | pb.updated, | ||
+ | pb.updatedby, | ||
+ | 'en_US' AS AD_Language, | ||
+ | pb.M_Product_ID, | ||
+ | pb.BomQty, | ||
+ | pb.Line, | ||
+ | pb.Description, | ||
+ | p.value, | ||
+ | p.name AS BOMProduct, | ||
+ | uom.UoMSymbol, | ||
+ | rl.name AS BomType | ||
+ | FROM M_Product_BOM pb | ||
+ | INNER JOIN M_Product p ON (pb.M_ProductBOM_ID = p.m_product_id) | ||
+ | INNER JOIN c_uom uom ON ( uom.c_uom_id = p.c_uom_id ) | ||
+ | INNER JOIN ad_ref_list rl ON ( rl.value = pb.bomtype AND rl.ad_reference_id =279); | ||
+ | </pre> | ||
+ | |||
+ | * MyProductLine_VT | ||
+ | <pre> | ||
+ | CREATE OR REPLACE VIEW MyProductLine_VT AS | ||
+ | SELECT | ||
+ | pb.AD_Client_ID, | ||
+ | pb.ad_org_id, | ||
+ | pb.isactive, | ||
+ | pb.created, | ||
+ | pb.createdby, | ||
+ | pb.updated, | ||
+ | pb.updatedby, | ||
+ | pt.AD_Language AS AD_Language, | ||
+ | pb.M_Product_ID, | ||
+ | pb.BomQty, | ||
+ | pb.Line, | ||
+ | pb.Description, | ||
+ | p.value, | ||
+ | pt.name AS BOMProduct, | ||
+ | uomt.UoMSymbol, | ||
+ | rlt.name AS BomType | ||
+ | FROM M_Product_BOM pb | ||
+ | INNER JOIN M_Product p ON (pb.M_ProductBOM_ID = p.m_product_id) | ||
+ | INNER JOIN M_Product_trl pt ON (pt.M_Product_ID = p.m_product_id) | ||
+ | INNER JOIN c_uom uom ON ( uom.c_uom_id = p.c_uom_id ) | ||
+ | INNER JOIN c_uom_trl uomt ON ( uomt.c_uom_id = uom.c_uom_id ) | ||
+ | INNER JOIN ad_ref_list rl ON ( rl.value = pb.bomtype AND rl.ad_reference_id =279) | ||
+ | INNER JOIN ad_ref_list_trl rlt ON ( rlt.ad_ref_list_id = rl.ad_ref_list_id); | ||
+ | </pre> | ||
+ | |||
+ | ===讨论栏=== | ||
+ | ====一楼-不建议用View写报表==== | ||
+ | * 不建議一開始就偷懶用 View 來寫報表. | ||
+ | * 因為當資料是 : 萬筆*萬筆*萬筆 JOIN, 時資料庫會很慢很慢. | ||
+ | * 這是我們在大量資料的公司實際上線後的基本教條.嚴禁用 View 寫報表,除非他沒有 Join. | ||
+ | * 建議使用資料庫 StoredProcedure 傳入參屬限制 JOIN 範圍. | ||
+ | |||
+ | * ADempiere 近來的方向,將所有 StoredProcedure 幾乎都移除.請參考 Compiere 3.0之前的版本. | ||
+ | * ADempiere 近來的方向,並不是以中大型企業大量資料每日千筆交易以上交易量.因此沒人討論到速度問題. | ||
+ | * 我們的主要服務對象是在每日萬筆資料或千筆交易量的企業,我們大量使用 StoredProcedure. | ||
+ | * 我們可能是唯一將 ADempiere 用於中大型企業, 所以我們仿效 SAP ECC6.0 架構大量使用 StoredProcedure. | ||
+ | |||
+ | * --Albertachen | ||
+ | |||
+ | ====二楼==== | ||
+ | * 谢谢Albertachen的提醒!但是我有个疑问,写报表不用View的话用什么?我只找到这篇文章[http://space.e800.com.cn/ASDFGHJKL/entity/view/?id=23185 数据库 SQL千万级数据规模处理概要]。--Peanut | ||
=讨论栏目= | =讨论栏目= | ||
− | * 您可以在这里发起或参与讨论。 | + | * 您可以在这里发起或参与讨论。 |
=链接= | =链接= | ||
*[[ZH/Case-Study-01|ADempiere ERP现实案例研究之一]] | *[[ZH/Case-Study-01|ADempiere ERP现实案例研究之一]] | ||
+ | ** [[ZH/Case-Study-01-Requirement Analysis|客户实施需求分析]] | ||
+ | ** [[ZH/Case-Study-01-Implementation Programme|实施方案]] | ||
+ | ** [[ZH/Case-Study-01-Implementation Plan|实施计划]] | ||
+ | ** 实施日志 | ||
+ | *** [[ZH/Case-Study-01-Journal-02|实施日志-02]] | ||
+ | *** [[ZH/Case-Study-01-Journal-03|实施日志-03]] | ||
[[Category:Chinese]] | [[Category:Chinese]] |
Latest revision as of 19:59, 30 December 2010
Contents实施日志-01
2010年10月2010-10-27项目发起
2010-10-28系统安装
2010-10-29实体初始化
讨论栏一楼
二楼
三楼> (台灣技術支持團隊說明:perior control單據期間未開啟,單據不可成立單據不可過帳,單據沒有成立沒有庫存帳,單據沒有過帳沒有成本帳)
> (台灣技術支持團隊說明:沒有自動依據單據類別直接反應到財務報表的 ERP 就像是被斬頭的人,是屍塊已經沒有核心價值與靈魂)
2010-10-30重新导入中国会计科目
仓库重新设定
其它
讨论栏一楼
二楼2010年11月2010-11-01实施栏讨论栏2010-11-02物料类别
计量单位
货币设置
UPDATE c_currency SET isactive = 'N'; UPDATE c_currency SET isactive = 'Y' WHERE iso_code='CNY' OR iso_code='USD' OR iso_code='EUR'; 货币折算类型
货币汇率设置
用户
角色
讨论栏一楼
二楼
三楼
四楼
2010-11-03
价格表
业务类型
新建窗体:业务类型
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 );
增加Business Type下拉选项
ALTER TABLE c_order ADD C_Business_Type_id numeric(10,0) NOT NULL DEFAULT 1000001;
讨论栏一楼 為何不是在單據類別設定
二楼
> Business Type : 會改變客戶訂單是否必須核對價格清單 ?
> Business Type : 是要來判斷或改變哪些管理流程 ?
2010-11-04关联报表
SQL语句
CREATE OR REPLACE VIEW MyProduct_V AS SELECT p.M_Product_ID AS MyProduct_V_ID, p.AD_Client_ID, p.AD_Org_ID, p.isActive, p.created, p.createdby, p.updated, p.updatedby, 'en_US' AS AD_Language, p.M_Product_ID, p.value, p.name, p.M_Product_Category_ID, uom.UoMSymbol, tax.name AS TaxCategory, rl.name AS ProductType, p.volume, p.weight, p.upc, p.sku FROM M_Product p INNER JOIN C_UoM uom ON ( uom.C_UoM_ID = p.C_UoM_ID ) INNER JOIN C_TaxCategory tax on (tax.C_TaxCategory_ID = p.C_TaxCategory_ID) INNER JOIN AD_Ref_List rl ON ( rl.value = p.ProductType AND rl.AD_Reference_ID =270);
CREATE OR REPLACE VIEW MyProduct_VT AS SELECT p.M_Product_ID AS MyProduct_V_ID, p.AD_Client_ID, p.AD_Org_ID, p.isActive, p.created, p.createdby, p.updated, p.updatedby, pt.ad_language AS AD_Language, p.M_Product_ID, p.value, pt.name, p.M_Product_Category_ID, uomt.UoMSymbol, taxt.name AS TaxCategory, rlt.name AS ProductType, p.volume, p.weight, p.upc, p.sku FROM M_Product p INNER JOIN M_Product_Trl pt ON (pt.M_Product_ID = p.M_Product_ID ) INNER JOIN C_UoM uom ON ( uom.C_UoM_ID = p.C_UoM_ID ) INNER JOIN C_UoM_Trl uomt ON (uomt.c_uom_id = uom.c_uom_id) INNER JOIN C_TaxCategory tax ON (tax.C_TaxCategory_ID = p.C_TaxCategory_ID) INNER JOIN C_TaxCategory_Trl taxt ON (tax.C_TaxCategory_ID = taxt.C_TaxCategory_ID) INNER JOIN AD_Ref_List rl ON ( rl.value = p.ProductType AND rl.AD_Reference_ID =270) INNER JOIN AD_Ref_List_Trl rlt ON ( rlt.AD_Ref_List_ID = rl.AD_Ref_List_ID );
CREATE OR REPLACE VIEW MyProductLine_V AS SELECT pb.AD_Client_ID, pb.ad_org_id, pb.isactive, pb.created, pb.createdby, pb.updated, pb.updatedby, 'en_US' AS AD_Language, pb.M_Product_ID, pb.BomQty, pb.Line, pb.Description, p.value, p.name AS BOMProduct, uom.UoMSymbol, rl.name AS BomType FROM M_Product_BOM pb INNER JOIN M_Product p ON (pb.M_ProductBOM_ID = p.m_product_id) INNER JOIN c_uom uom ON ( uom.c_uom_id = p.c_uom_id ) INNER JOIN ad_ref_list rl ON ( rl.value = pb.bomtype AND rl.ad_reference_id =279);
CREATE OR REPLACE VIEW MyProductLine_VT AS SELECT pb.AD_Client_ID, pb.ad_org_id, pb.isactive, pb.created, pb.createdby, pb.updated, pb.updatedby, pt.AD_Language AS AD_Language, pb.M_Product_ID, pb.BomQty, pb.Line, pb.Description, p.value, pt.name AS BOMProduct, uomt.UoMSymbol, rlt.name AS BomType FROM M_Product_BOM pb INNER JOIN M_Product p ON (pb.M_ProductBOM_ID = p.m_product_id) INNER JOIN M_Product_trl pt ON (pt.M_Product_ID = p.m_product_id) INNER JOIN c_uom uom ON ( uom.c_uom_id = p.c_uom_id ) INNER JOIN c_uom_trl uomt ON ( uomt.c_uom_id = uom.c_uom_id ) INNER JOIN ad_ref_list rl ON ( rl.value = pb.bomtype AND rl.ad_reference_id =279) INNER JOIN ad_ref_list_trl rlt ON ( rlt.ad_ref_list_id = rl.ad_ref_list_id); 讨论栏一楼-不建议用View写报表
二楼
讨论栏目
链接 |