需求: Wafer PO 以 PCS 採購付款;收貨時,以 Good Die 數入庫。BOM, WIP, COST, Planning 皆以主庫存單位交易。
Solution: 於 Product 增加計價單位 (Price_UOM)。原本的UOM 仍記錄主庫存單位 (EA, Good Die), 計價單位則記錄計價單位 (PCS, Wafer)。
Step 1, Product 新增欄位: 計價單位, 預設同主庫存單位。(System Element -> Table, Column->Window, Tab and Field)
2010年2月10日 星期三
2010年2月2日 星期二
實作: AutoAccounting
花了很多的篇幅介紹 Adempiere ERP 的強項; 接下來, 針對 ERP 功能不足的部份, 集合成新一代的 Janus ERP 來補強; 日常作業的欄位增減, 操作方式已經介紹過, 由使用者提出, 當更能符合需要。
需求: 料號 A, 一般銷售出貨時, 切 "銷售成本" 科目; 若為樣品出貨時, 切 "銷售費用" 科目。
標準功能是需要將 "料號A" 分為二個料號, 借方科目分別指定適當的科目。這就是使用套裝 ERP 為配合其系統架構而產生的痛苦。
新增交易會計分錄中 "自定義會計科目" 的功能, 讓系統更有彈性。
Step 1, 先 Create Table: JN_AutoAccounting 儲存自定義會科節段的值; 注意, 有些為必要欄位;
CREATE TABLE JN_AUTOACCOUNTING
(
JN_AUTOACCOUNTING_ID NUMBER(10) NOT NULL,
AD_CLIENT_ID NUMBER(10) NOT NULL,
AD_ORG_ID NUMBER(10) NOT NULL,
ISACTIVE CHAR(1 BYTE) DEFAULT 'Y' NOT NULL,
CREATED DATE DEFAULT SYSDATE NOT NULL,
UPDATED DATE DEFAULT SYSDATE NOT NULL,
CREATEDBY NUMBER(10) NOT NULL,
UPDATEDBY NUMBER(10) NOT NULL,
NAME NVARCHAR2(60) NOT NULL,
DESCRIPTION NVARCHAR2(255)
)
Step 2, 新增 Window: AutoAccounting; 同樣的, 要註冊 Table: JN_AutoAccounting, Create Columns from DB;
Step 3, 我們在 Step 1, 只建立了基本的欄位; 在開發中, 我們會遇到需要在 Table 新增欄位的情形, 故在 Table Column 中, 新增: JN_Account, 記得要 Synchronize Column;
需求: 料號 A, 一般銷售出貨時, 切 "銷售成本" 科目; 若為樣品出貨時, 切 "銷售費用" 科目。
標準功能是需要將 "料號A" 分為二個料號, 借方科目分別指定適當的科目。這就是使用套裝 ERP 為配合其系統架構而產生的痛苦。
新增交易會計分錄中 "自定義會計科目" 的功能, 讓系統更有彈性。
Step 1, 先 Create Table: JN_AutoAccounting 儲存自定義會科節段的值; 注意, 有些為必要欄位;
CREATE TABLE JN_AUTOACCOUNTING
(
JN_AUTOACCOUNTING_ID NUMBER(10) NOT NULL,
AD_CLIENT_ID NUMBER(10) NOT NULL,
AD_ORG_ID NUMBER(10) NOT NULL,
ISACTIVE CHAR(1 BYTE) DEFAULT 'Y' NOT NULL,
CREATED DATE DEFAULT SYSDATE NOT NULL,
UPDATED DATE DEFAULT SYSDATE NOT NULL,
CREATEDBY NUMBER(10) NOT NULL,
UPDATEDBY NUMBER(10) NOT NULL,
NAME NVARCHAR2(60) NOT NULL,
DESCRIPTION NVARCHAR2(255)
)
Step 2, 新增 Window: AutoAccounting; 同樣的, 要註冊 Table: JN_AutoAccounting, Create Columns from DB;
Step 3, 我們在 Step 1, 只建立了基本的欄位; 在開發中, 我們會遇到需要在 Table 新增欄位的情形, 故在 Table Column 中, 新增: JN_Account, 記得要 Synchronize Column;
Step 4. 但, JN_Account 希望是從 JN_JNRef 中, Name = 'AutoAccounting Segment' 的值帶入; 所以, 打開 JN_Account, 在Reference 選擇: Table,
Step 5, Zoom 到 Reference Key, 新增 AutoAccounting Segment,
Step 6, 選 Tab: Table Validation, 建立如下圖所示; 其中, Where 條件需到 DB 查詢: AutoAccounting Segment 的ID,
Step 7, 再新增其餘欄位: JN_Company, JN_SubAccount, JN_ProductLine, JN_Project 等, 設定方式同上。
Step 8, 以 SuperUser/ GardenWorld 的身份登入, 新增資料確認是否設定正確。
所以, 只要在 Document Type 指定為樣品訂單, Account 主科目就帶出費用類科目, 就不用為了切傳票而虛增料號。
OK, 這樣就是我們所要的設定作業, 這樣的設定要花多少時間?
當然, Janus ERP, 會依據這裡的設定來組合會計科目, 如果沒有設定的, 依照預設的方式產生。這段就屬於 Level 4 的範籌。
Level 3 新增畫面 (3)
Step 9, 新增 Quick Code 的 Value, 也就是使用第二個 Table: JN_JNRefList, 看一下 Tab: Quick Code Value 的畫面,
Step 10, 同樣 Zoom 到 Table and Column, 在 Janus ERP 中註冊 Table: JN_JNRefList, 記得 "Create Columns from DB",
Step11, 這時, Column 應該有 14 筆資料, 點選 "JN_JN_Ref", 注意要選 "Parent Link Column", 並移除 "Updateable"; 這樣, Master-Detail 的關聯才會正確,
Step 12, 回到 Window, Tab: Quick Code Value, 選擇正確的 Table, 並 Create Fields, 並去 Field Sequence 調整欄位順序。
Step 13, 以 SuperUser/GardenWorld 的身份登入, 測試 Window 是否正確,
Step 14, 新增 Quick Code Value, JN_JNRef 可以帶出 Quick Code 的正確值, 而且不能 Update,
這是一個簡單的 Master Detail 的範例; 對於不會寫程式的人而言, 定義出正確無誤的 Window, 真令人感動。
Step 10, 同樣 Zoom 到 Table and Column, 在 Janus ERP 中註冊 Table: JN_JNRefList, 記得 "Create Columns from DB",
Step11, 這時, Column 應該有 14 筆資料, 點選 "JN_JN_Ref", 注意要選 "Parent Link Column", 並移除 "Updateable"; 這樣, Master-Detail 的關聯才會正確,
Step 12, 回到 Window, Tab: Quick Code Value, 選擇正確的 Table, 並 Create Fields, 並去 Field Sequence 調整欄位順序。
Step 13, 以 SuperUser/GardenWorld 的身份登入, 測試 Window 是否正確,
Step 14, 新增 Quick Code Value, JN_JNRef 可以帶出 Quick Code 的正確值, 而且不能 Update,
這是一個簡單的 Master Detail 的範例; 對於不會寫程式的人而言, 定義出正確無誤的 Window, 真令人感動。
2010年2月1日 星期一
Level 3 新增畫面 (2)
Step 4, 從 Tab: Quick Code Zoom到 Table and Column 視窗, 在這裡註冊 TABLE
, 先註冊: JN_JNRef, 先存檔; 再 Create Columns from DB;
Step 5, 點選 Tab: Column, 應該可以看到這個畫面,
Step 6, 回到 Window, Tab & Field, 在 Table 右鍵 Requery, 選擇 JN_JNRef, 然後執行 Create Fields, 系統將自動產生以下 8 筆資料;
Step 7, 點選 Field Sequence, 畫面欄位依使用習慣排序; 最後, 把 Window 掛入 Menu 中,
Step 8, 以 SuperUser/ GrandWorld 的身份登入, 應該就可以看到以下的畫面,
, 先註冊: JN_JNRef, 先存檔; 再 Create Columns from DB;
Step 5, 點選 Tab: Column, 應該可以看到這個畫面,
Step 7, 點選 Field Sequence, 畫面欄位依使用習慣排序; 最後, 把 Window 掛入 Menu 中,
Step 8, 以 SuperUser/ GrandWorld 的身份登入, 應該就可以看到以下的畫面,
Level 3 新增畫面 (1)
Janus ERP 最強大的功能之一, 就是新增作業畫面不用寫程式;
需求: 建立一個簡易代碼維護作業, 供使用者定義或系統開發之用。
Step 1, Create Table: 代碼類別 & 代碼值, 這是唯一需要 "技術含量" 的步驟;
CREATE TABLE JN_JNRef
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
;
CREATE TABLE JN_JNRefList
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
JN_JNRefList_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
Step 2, 新增的畫面, 跟 Attribute 的畫面很像, 所以, 直接 Copy Record; 把相關欄位改成 Quick Code;
Step 3, Copy Window Tabs, 從 Window: Attribute, 移到 Tab, 就可以看到有二筆資料, 同樣的, 把相關的欄位修改
完成這個步驟後, 把畫面掛到 MENU 後, 就可以使用了。只是, 存取的是 Attribue 的資料。
(to be continue...)
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
;
CREATE TABLE JN_JNRefList
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
JN_JNRefList_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
Step 2, 新增的畫面, 跟 Attribute 的畫面很像, 所以, 直接 Copy Record; 把相關欄位改成 Quick Code;
Step 3, Copy Window Tabs, 從 Window: Attribute, 移到 Tab, 就可以看到有二筆資料, 同樣的, 把相關的欄位修改
完成這個步驟後, 把畫面掛到 MENU 後, 就可以使用了。只是, 存取的是 Attribue 的資料。
(to be continue...)
Level 2 報表設計
CREATE TABLE JN_JNRef
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
CREATE TABLE JN_JNRefList
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
JN_JNRefList_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
CREATE TABLE JN_JNRefList
(
AD_Client_ID NUMBER(10,0) NOT NULL,
AD_Org_ID NUMBER(10,0) NOT NULL,
JN_JNRef_ID NUMBER(10,0) NOT NULL,
JN_JNRefList_ID NUMBER(10,0) NOT NULL,
Name NVARCHAR2(60) NOT NULL,
Value NVARCHAR2(60) NOT NULL,
Description NVARCHAR2(255),
ValidFrom DATE,
ValidTo DATE,
IsActive CHAR(1) DEFAULT 'Y' NOT NULL,
Created DATE DEFAULT SYSDATE NOT NULL,
CreatedBy NUMBER(10,0) DEFAULT 0 NOT NULL,
Updated DATE DEFAULT SYSDATE NOT NULL,
UpdatedBy NUMBER(10,0) DEFAULT 0 NOT NULL
)
1A. Data Import
Janus ERP 的轉檔程式, 也是使用定義的方式, 毋需寫程式。
1. Import Loader Format, 定義要轉檔的項目, 這裡以 Account 為例
2. Import Loader Field, 定義要轉檔的欄位, 注意那些是必要欄位, 再加入使用性欄位
3. Import File Loader, 把整理好的EXCEL 上傳, 並可於線上直接看到轉入的狀況
有了好用的 Framework, 才能讓資料轉檔工作這麼輕鬆。很感慨很多大廠的 ERP, 每一個客戶的轉檔, 包括料號, BOM, 庫存數量... 等都是一支一支的客製。程式設計人員大概寫了二, 三次就沒動力了吧?!
程式設計師的工作如果是在開發這樣的 Framework , 才能一輩子寫程式而樂在其中。
1. Import Loader Format, 定義要轉檔的項目, 這裡以 Account 為例
3. Import File Loader, 把整理好的EXCEL 上傳, 並可於線上直接看到轉入的狀況
有了好用的 Framework, 才能讓資料轉檔工作這麼輕鬆。很感慨很多大廠的 ERP, 每一個客戶的轉檔, 包括料號, BOM, 庫存數量... 等都是一支一支的客製。程式設計人員大概寫了二, 三次就沒動力了吧?!
程式設計師的工作如果是在開發這樣的 Framework , 才能一輩子寫程式而樂在其中。
Level 1: 增減欄位
之前已經介紹過, 這裡再補充一次:
2. Service Request 經主管核准後, 開始動手減少欄位。我將 TAB 以及很多的 Product 欄位 Inactive; 如果這些欄位就夠了, 為何要出現那麼多的未使用欄位呢?
3. 不同的事業部, 產品有不同的屬性定義; 所以, Janus ERP 可以再依公司 (Client) / 組織 (Organization) 再分別定義, 給予使用者最大的彈性。
在 Janus ERP 的導入過程中, 通常安排的時間如下:
09:00 - 12:00 訪談 顧問在早上與使用者確認需求
14:00 - 16:00 Level 1,2,3,4 顧問確認欄位的必要性, 調整及測試
16:00 - 18:00 確認完成, Close Service Request
當 Level 1 定義完後, 除了畫面新增的 Button 的功能不見得可用外; 使用者可以馬上操作, 不再只是想像。
3. 不同的事業部, 產品有不同的屬性定義; 所以, Janus ERP 可以再依公司 (Client) / 組織 (Organization) 再分別定義, 給予使用者最大的彈性。
在 Janus ERP 的導入過程中, 通常安排的時間如下:
09:00 - 12:00 訪談 顧問在早上與使用者確認需求
14:00 - 16:00 Level 1,2,3,4 顧問確認欄位的必要性, 調整及測試
16:00 - 18:00 確認完成, Close Service Request
當 Level 1 定義完後, 除了畫面新增的 Button 的功能不見得可用外; 使用者可以馬上操作, 不再只是想像。
訂閱:
意見 (Atom)























