ZH/Case-Study-01-Journal-01

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

<返回中文首页> <返回本案例研究首页>

Noia 64 apps knode m.png


实施日志-01

2010年10月

2010-10-27

项目发起

  • 今天将项目资料进行了整理,并放在Wiki上,正式发起“ADempiere ERP现实案例研究”。
  • 明天将进行系统安装。

2010-10-28

系统安装

  • 今天上午完成了系统安装。安装方法见在Debian及Postgres上安装Adempiere
  • 系统补丁安装方法见Patches_Installation(英文)。
  • 安装过程中所遇到的问题已经汇总到安装问题解决方法
  • 还有一个问题没有解决,就是局域网其它机器Client客户端连接服务器数据库失败,估计与postgresql的pg_hda.conf文件设置有关。
  • 今天下午完成了公司高层访谈内容的整理和上传。
  • 明天将进行系统初始化。
  • 后天将公司管理层中层访谈的内容整理上传。

2010-10-29

实体初始化

  • 今天主要是实体Client初始化。
  • 内容主要依照《ADempiere 3.4 ERP Solutions》的第三章和第四章,同时参考ManPageX_InitialClientSetup
  1. 创建新实体。窗体:Initial Client Setup Process。使用AccountingUS.csv。使用AccountingCN.csv。
    1. 管理员:南京同济Admin,TongjiAdmin
    2. 用户:南京同济User,TongjiUser
  2. 以管理员身份TongjiAdmin登录新实体。
  3. 组织。窗体:Organization。由于该公司既没有分公司,也没有事业部,因此使用默认的Organization。
  4. 仓库。窗体:Warehouse。
    1. 只设置一个“基本仓库”,将来可能会分原材料库、半成品库、成品库等。
    2. Locator: 分为待检库、原材料库、半成品库、成品库等,先暂时这样分。
    3. 2010年10月30日对仓库重新设置。
  5. 导入会计科目表
    1. 窗体:Import File Loader。 使用AccountingUS.csv。使用AccountingCN.csv。
    2. 窗体:Import Account。注意要删除空白项。
  6. 窗体:Accounting Schema。使用默认设置,不作更改。
  7. 窗体:Calendar Year and Period。
    1. 创建实体时已经默认创建并启用2010财年,只需要在Year页签和Period页签确认一下即可。
    2. 在Perior control页签里将2010财年所有的Document Type启用。
    3. 同时创建2011财年,但是暂时不启用,到2010年再启用。
  8. 窗体:Accounting Processor。使用默认设置。
  9. 关于Master Data和Accounting Configuration。由于第一阶段不实施账务模块,暂时使用默认设置,不作更改。

讨论栏

一楼

  1. (台灣技術支持團隊說明:在 Adempiere's Org 是一個可以結算損益的事業處(部)並非一般公司的管理部/生產部/業務部)
  2. (台灣技術支持團隊說明:在 Adempiere's Wh 是一個不可跨 Org 領用,Org是可以結算損益的事業處(部),該 Wh 咨產屬於該 Org)
  3. (台灣技術支持團隊說明:受訂與出貨是分倉間管理, 生產入庫與業務出貨倉不同時需作倉間轉移, 線邊倉與委外加工倉不同時需作倉間轉移)
  4. (台灣技術支持團隊說明:Locator 式儲位,儲位是不能作會計科目區分, 倉間不同才能做會計科目區分)
  5. (台灣技術支持團隊說明:perior control單據期間未開啟,單據不可成立單據不可過帳,單據沒有成立沒有庫存帳,單據沒有過帳沒有成本帳)
  6. (台灣技術支持團隊說明:沒有自動依據單據類別直接反應到財務報表的 ERP 就像是被斬頭的人,是屍塊已經沒有核心價值與靈魂)

二楼

  • Albertachen大人所言极是,本人虚心接受!--Peanut

三楼

> (台灣技術支持團隊說明:perior control單據期間未開啟,單據不可成立單據不可過帳,單據沒有成立沒有庫存帳,單據沒有過帳沒有成本帳)

回复Albertachen :ADempiere创建实体时已经默认创建并启用2010财年,只需要在Year页签和Period页签确认一下即可,不需要另外手工开启会计期间。之前没有写清楚,抱歉!

> (台灣技術支持團隊說明:沒有自動依據單據類別直接反應到財務報表的 ERP 就像是被斬頭的人,是屍塊已經沒有核心價值與靈魂)

回复Albertachen :财务的确非常重要,但是这家公司已经有一套T3用友通标准版财务软件,所以我的想法是第一期暂不使用ADempiere的财务功能,比如说会计凭证录入,但是可以先把财务的骨架搭起来,以便后期启用。--Peanut

2010-10-30

公司业务类型

重新导入中国会计科目

  • 综合各位的建议,财务模块的确很重要。于是重新导入中国会计科目。
  • 首先,整理中文会计科目表。
    • 这里我是根据chopin在ERP100论坛上共享的Adempiere 3.6 会计账户来进行的。
    • 我将chopin版本对比AccoutingUS.csv检查了一下,所有的[Default_Account]都齐全。
    • 同时与北京-someday在2010年08月07日共享的AccountingCN.csv对比检查了一下,两者差别不大,chopin版本主要是一些会计科目的名称和代码作了调整。
    • 同时发现现有的中文会计科目表基本上都按照旧版会计准则的,不是根据2006年新版会计准则的。在这一方面中文社区还要继续努力。
    • 另外我把其中几个中文翻译补充了一下。现在上传到这里。AccountingCN-3.6.0.xls
    • 最后再次感谢 chopin、Someday、王超、Robin等朋友在中文会计科目上所作的努力!
  • 执行导入过程。
  1. 将AccountingCN-3.6.0.xls格式转换为AccountingCN-3.6.0.csv。
  2. 删除原有导入会计科目。
    1. 窗体:Delete Import。
    2. 找到Table:I_ElementValue_Import Account,执行删除操作。
  3. 导入中文会计科目。
    1. 窗体:Import Accounts。
    2. 设置Element为“南京同济设备有限公司 Account”,将所有选项都选上,包括"Update Default Accounts"、"Create New Combination"、"Delete old imported records"。
    3. 接着确认执行,系统执行完毕后弹出提示框,错误数量为0。
  • 疑问:
    • 在这里有一点疑问——当初创建实体时曾经选过会计科目表AccoutingUS.csv,在Import Accounts能否全面覆盖?
    • 按理说把"Update Default Accounts"选上了以后就可以了,不需要重新创建实体。

仓库重新设定

  • 仓库分类计划
  1. 待检品仓库, Waiting Articles Warehouse(采购、外协、自制未检验零件)。
  2. 不良品仓库, Defective Product Warehouse(检验不合格产品)。
  3. 钢材仓库,Metal Warehouse(板材、型材,材质包括钢、铁、铝)。
  4. 零件仓库, Part warehouse(五金、电气等零件,主要是采购件)。
  5. 半成品仓库,Semi-finished Goods Warehouse(已经检验合格的自制半成品、外协半成品)。
  6. 在制品仓库,In-Process Goods Warehouse,(生产线在制品,包括零件、部装、总装)。
  7. 成品仓库,Finished Goods Warehouse (已经检验合格的成品,可以包装出货)。
  8. 报废品仓库,Scrappage Warehouse (报废零件、半成品、成品)。
  • 具体执行:
  1. 打开窗口:Warehouse & Locators。
  2. 来到Locator页签,将原有的Locator设置全部删除。
  3. 回到Warehouse页签,依次新建仓库。In Transit、Source Warehouse、Replenishment Class留空。
  • 疑问:
  1. 在Accouting页签应当如何妥善设置会计科目?尤其是报废品仓库。

其它

讨论栏

一楼

  1. (台灣技術支持團隊說明 : Adempiere 目前如果沒有調整會計核心只有[庫存盤盈/庫存盤虧]才會去[倉庫會計科目設定]抓取會科。)
  2. (台灣技術支持團隊說明 : ACCTTYPE_InvDifferences : M_Warehouse_Acct.W_Differences_Acct)
  3. (台灣技術支持團隊說明 : Intel CPU 機場交貨就算Asus的在途存貨,因此要特殊倉庫勾選[倉庫會計科目優先])
  4. (台灣技術支持團隊說明 : 我們在倉庫會科設定增加[倉庫資產會計科目]讓勾選[倉庫會計科目優先]可以優先取用)
  5. (台灣技術支持團隊說明 : 目前良品倉轉入不良倉或是報廢倉,轉移前後都是同一料品會科設定的[資產會計科目])
  6. (台灣技術支持團隊說明 : 我們在倉庫會科設定增加[倉庫資產會計科目]讓勾選[倉庫會計科目優先]可以優先取用)
    1. M_Warehouse_Acct.Is_W_Asset_Acct
    2. M_Warehouse_Acct.W_Asset_Acct
    3. M_Product_Acct.P_Asset_Acct

二楼

2010年11月

2010-11-01

实施栏

讨论栏

产品类别会计科目设置

2010-11-02

物料类别

  • 物料分类方法:
  1. 成品,指可以直接销售给客户的设备及其配件,Finished Goods。
    1. 包装机械,Packing Machine
    2. 专用机械,Specialized Machine
  2. 半成品,指经加工或组装的零部件,Semi-Finished Goods。
  3. 原材料,指直接用于产品的采购件,包括铸件和锻件,不包括焊条、刀具、办公用品等物品,Raw-material。
  4. 标准钢材,指铜、铁、铝等板材、型材,不包括铸件和锻件,Standard Metal。隶属于原材料
  5. 生产辅助物料,指用于生产但不直接成为产品组成部分的物料,包括焊条、刀具等,Manufacture Auxiliary Material。
  6. 其它,包括办公用品等,Other Material。
  • 操作:
  1. 打开窗口:Product Category。依次新建物料类别。
  2. 其中"标准钢材"将Parent Product Category设置为“原材料”。
  • 疑问?
  1. 与仓库设置类似,物料类别也涉及到会计科目设置的问题。

计量单位

  • ADempiere ERP系统默认设置的单位不足,需要增加物料计量单位。
  1. kg,kilogram,千克,重量单位。
  2. m,meter,米,长度单位。
  3. p,pair,对,数量单位。
  • 操作:
  1. 以System用户登录系统。
  2. 打开窗口:Unit of Measure。依次新建计量单位。可以对UOM Type进行设置。
  3. 来到页签:Translation。找到zh_CN,将计量单位名称和描述翻译为简体中文。

货币设置

  1. 将不需要使用的货币设置为不生效(de-active)。只保留如下设置:
    • 人民币,CNY
    • 美元,USD
    • 欧元,EUR
  2. 方法一:用System角色登录,打开窗口:Currency来手工设置。
  3. 方法二:由于货币有174个,一个个选比较费事,通过SQL语句更新:
 UPDATE c_currency SET isactive = 'N';
 UPDATE c_currency SET isactive = 'Y' WHERE iso_code='CNY' OR iso_code='USD' OR iso_code='EUR';

货币折算类型

  • 操作:
  1. 以System角色登录系统。
  2. 打开窗口Currency Type。
  3. 系统默认的是Spot,将默认类型改为Average,不作更改。
  • 疑问?
    1. 系统已经设置了四个类型,但是不清楚其含义。
    2. Average是买入卖出中间价的意思吗?
    3. 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.(摘自INVESTOPEDIA

货币汇率设置

  1. 以南京同济Admin的角色登录系统。
  2. 打开窗口:Currency Rate。依次创建新记录,Currency Type均设置为Average Spot。
    1. RMB to USD, Divided rate: 6.6925
    2. USD to RMB, Multiply rate: 6.6925
    3. RMB to EUR, Divided rate: 9.3069
    4. EUR to RMB, Multiply rate: 9.3069

用户

  • 用户设置方案:
  1. TongjiAdmin,管理员
  2. TongjiUser,测试帐号
  3. TongjiSales,市场销售工程师
  4. TongjiGM,General Manager ,总经理/副总经理
  • 操作:
  1. 以TongjiAdmin登录系统
  2. 打开窗口:User。依次新建用户。

角色

  • 角色设置方案:
  1. Tongji系统管理,Admin,系统管理员
  2. Tongji测试,Test,用于系统测试
  3. Tongji市场,Market,用于市场部
  4. Tongji计划,Planning,用于生产部计划科,暂不启用
  5. Tongji采购,Purchase,用于生产部采购科,暂不启用
  6. Tongji仓库,Warehouse,用于生产部仓库,暂不启用
  7. Tongji品保,Quality Assurance,用于品保部,暂不启用
  8. Tongji全局查阅,Overall Lookup,主要给总经理、副总经理。
  • 操作:
  1. 以TongjiAdmin登录系统
  2. 打开窗口:Role。依次新建角色。
    1. User Level设置为Organization。
    2. 未实施到位的角色暂不启用。
    3. 将原有"TongjiUser"角色改为"Tongji测试"。
  3. 来到页签:Org Access,为各角色新建Organization。其中“全局查阅”角色设置为"Read Only"
  4. 来到页签:User Assignment,为角色分配用户。
    1. 市场 ~ TongjiSales
    2. 全局查阅 ~ TongjiGM
  • 注意事项:
  1. 由于角色和用户创建完毕后,系统将会向公司局域网内开放,为了防止未经授权的系统/数据更改,需要仔细检查重要帐户的密码,应当设置得复杂一些。
    • SuperUser
    • System
    • TongjiAdmin
    • TongjiUser
  2. GardernWorld的相关帐户密码不作变更,供公司职员进行尝试。
    • GardenAdmin
    • GardenUser
  3. 同时也要注意PostgreSQL数据库两个重要帐户的密码,不要设置得太简单。
    • postgres
    • adempiere

讨论栏

一楼

  • spot exchange rate(即期汇率)
    • 用来进行外币折算的每日汇率。即期汇率通常是一种指定的市场汇率,适用于迅速将一种货币以另一种货币的形式交割。
  • company 公司汇率:
    • 为使公司汇率标准化而定义的一种汇率。此汇率通常是由高级财务管理小组确定,供整个组织使用的一种标准市场汇率。
  • corporate exchange rate(公司汇率)
    • 您可以任选使用以执行外币兑换的汇率。公司汇率通常是由高级财务管理层决定的用于整个组织的标准市场汇率。您可以在 Oracle 总帐管理系统中定义此汇率。
  • period-end exchange rate(期末汇率)
    • 会计期最后一日的每日汇率。总帐管理系统依据 FASB 52 (U.S.) 使用期末汇率来自动折算资产和负债帐户余额。在运行期间重估时,总帐管理系统依据 FASB 52 (U.S.) 自动使用期末汇率的逆向汇率来重估以外币表示的资产和负债。对于处于高通货膨胀的经济区域的公司,总帐管理系统依据 FASB 8 (U.S.) 使用期末汇率来重估资产和负债余额。
  • average exchange rate(平均汇率)
    • 整个会计期的平均汇率。总帐管理系统使用符合 FASB 52 (U.S.) 的期间平均汇率来自动折算收入和费用帐户余额。对于处于高通货膨胀率经济区域的公司,总帐管理系统使用平均汇率来折算符合 FASB 8 (U.S.) 的非历史收入和费用帐户。也称为期间平均汇率。
  • -- Myfren(摘自1,2

二楼

  • 谢谢Myfren的补充!看来货币折算类型应当设置为spot。 --Peanut

三楼

  • 那个角色的设置是否简单了点?
  • 在设置角色的时候是否应该设置上下级关系,如销售员和销售经理,后续建立销售订单可以建立相关的审批流程。以便更好的了解Adempiere的细节操作 。-- Myfren

四楼

  • 我准备通过不同的角色分配不同的Menu来进行主要权限控制,同时以窗体权限控制和脚本来进行辅助控制。
  • “销售员和销售经理”——本来打算过几天再设置的。嗯,我现在就加上去 :-) --Peanut

2010-11-03

业务类型-截屏
销售订单-业务类型-截屏


价格表

  • 价格表模式:
  1. 打开窗口:Price List Schema。
    1. 新建:采购
    2. 新建:销售
    3. 将"Standard"设置为不启用。
  • 价格表
  1. 打开窗口:Price List。
    1. 新建采购价格表,勾上"Default"
    2. 新建销售价格表,勾上"Sales Price list"。
    3. "Standard",去掉"Default"、"Active"选项,设置为不启用。
  2. 打开页签:Version。
    1. 新建:采购价格表2010年版
    2. 新建:销售价格表2010年版
    3. "Standard",去掉"Active"选项,设置为不启用。

业务类型

  • 由于公司有三种不同的业务类型,要在销售订单当中实现“业务类型”选项,需要进行简单的二次开发。分两步进行:
  1. 新建窗体:业务类型 - Business Type。
  2. 在窗体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中创建表:
  1. 以System角色登录系统。
  2. 打开窗口:Table and Column
  3. 新建表格:C_Business_Type。
    1. 设置DB Table Name: C_Business_Type。注意:必须与数据库表名称一致!
    2. 设置Data Access level: Client+Organization。
  4. 点击按钮:Create Columns from DB,从数据库中自动生成列。
  5. 为节省篇幅,以后不再复述以上步骤,简称:“新建AD表:C_Business_Type”。
  • 新建窗体:Business Type
  1. 打开窗口:Window, Tab & Field
    1. 新建窗体:Business Type
  2. 打开页签Tab,
    1. 新建页签:Business Type
    2. 设置Table: C_Business_Type
    3. 点击按钮:Create Fields,从AD表中自动生成列。
  3. 打开页签Field Sequence,调整列显示顺序。
  4. 打开页签Field,调整窗体外观。要注意Sequence, Same Line, Display Length等设置。
  • 将窗体加入菜单
  1. 打开窗口:Menu
  2. 新建条目:Business Type
    1. 设置Action: Window
    2. 设置Window: Business Type
    3. 并将其移动至合适的位置。
  • 添加记录
    • 接下来我们就可以用刚刚新建的窗体来添加记录了。
  1. 以TongjiAdmin角色登录系统
  2. 打开窗口:Business Type。依次新建:
    • 研发销售、Research & Sales
    • 来图加工、Processing with Supplied Drawings
    • 设备改造、Equipment Upgrading

增加Business Type下拉选项

  • 设置引用(Reference)
  1. 打开窗口:Reference
    1. 新建:Business Type
    2. 设置Entity Type: User maintained
    3. 设置Validation Type: Table Validation
  2. 打开页签:Table Validation
    1. Table: C_Business_Type
    2. 设置Key Column: C_Business_Type_ID
    3. 设置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)設定:
    1. 研发销售、Research & Sales 訂單
    2. 来图加工、Processing with Supplied Drawings 訂單
    3. 设备改造、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

关联报表

产品物料明细报表
  • 今天主要测试了ADempiere的关联报表功能,这个报表的制作有点繁杂,想参照测试的新手建议从最简单的报表修改开始。
  • 本测试参照HumanFlash的动画教程进行,见HumanFlash/Part8/D.Customizing Reports/4.Create New Reports(Document Lines)。
  • 测试时遇到一个小问题,就是报表头与报表明细重迭了,后来发现是Print Format当中的Header Margin没有设置。设置为120后就不重迭了。

SQL语句

  • SQL语句如下:
  • MyProduct_V
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);
  • MyProduct_VT
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 );
  • MyProductLine_V
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);
  • MyProductLine_VT
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写报表

  • 不建議一開始就偷懶用 View 來寫報表.
  • 因為當資料是 : 萬筆*萬筆*萬筆 JOIN, 時資料庫會很慢很慢.
  • 這是我們在大量資料的公司實際上線後的基本教條.嚴禁用 View 寫報表,除非他沒有 Join.
  • 建議使用資料庫 StoredProcedure 傳入參屬限制 JOIN 範圍.
  • ADempiere 近來的方向,將所有 StoredProcedure 幾乎都移除.請參考 Compiere 3.0之前的版本.
  • ADempiere 近來的方向,並不是以中大型企業大量資料每日千筆交易以上交易量.因此沒人討論到速度問題.
  • 我們的主要服務對象是在每日萬筆資料或千筆交易量的企業,我們大量使用 StoredProcedure.
  • 我們可能是唯一將 ADempiere 用於中大型企業, 所以我們仿效 SAP ECC6.0 架構大量使用 StoredProcedure.
  • --Albertachen

二楼

讨论栏目

  • 您可以在这里发起或参与讨论。

链接