Archive for 2009/06

鼎新Cosmos ERP程式單身資料操作缺失

鼎新的程式在操作的時候,有一個很不合操作邏輯的地方,我們來看一下...


首先,對於DataGrid的操作,大家應該或多或少有些經驗,我們以熟悉的Microsoft Access為例,
在新增一筆Record的時候,Access會把該Row立即把該Row存入,接下來,如果Column有驗證的時候,在該Cell上,它會要求輸入符合驗證的value,否則沒辦法離開該Cell。
再來,刪除的時候,先選擇好整筆的Row,按下鍵盤上的"Delete",此時,會跳出一個msgbox,會問使用者這筆資料是不是要刪除,當然按"是",就刪除該筆資料啦。同樣的例子換到MSSQL上,也是一樣的。(唯一一點差別是,在使用MSSQL Management刪資料的時候,不會出現Confirm的msgbox)。

Ctrldel01.jpg
Ctrldel02.jpg

OK..回到我們的主題...
鼎新的作業程式有許多程式是常見的設計模式,分為單頭以及單身,各自會記錄到DB上所對應的Table中,到這裡其實基本上沒什麼問題,多數的程式設計師對於這種設計模式是再熟悉不過的了.


好,我們先來看一下,鼎新的作業程式畫面...我們以「報價單建立作業」為例,

Ctrldel04.jpg

以中間綠色粗線為分界,上半部為單頭,下半部為單身,
那麼我們來看一下剛剛提到的DataGrid,也就是在單身的部份的操作...
Step1.
我們先打好單頭的部份,然後,Mouse在品號欄位上點一下,在序號欄位會出現"0001"
Ctrldel05.jpg
Step2.
完成"0001"的輸入後,這裡我們按鍵盤的"",進行下一筆的輸入

Step3.
完成"0002"的輸入
Ctrldel07.jpg


好,畫面不動的狀況,我們來看一下,假設使用者在"0002"的輸入想要放棄掉怎麼辦?
根據鼎新的說明,刪除Row有兩個方式:
1.在Row還沒存入的狀態下,按「ESC」
2.在Row還存入的狀態下,按「Ctrl+Del」
那麼,怎麼分辨存入了沒呢?
根據鼎新的說法,看看Step3的序號欄位左邊,有一個「*」,如果有「*」表示還沒存入,

ok.就定義上,是沒有問題的,跟Microsoft的標示「定義」相符...但是,功能卻是完全不是那麼一回事,
各位有沒有發現跟我一開頭Access的第二張圖不太一樣..
Microsoft有「*」的Row,永遠都是空白的Row,使用者只要一填上資料,它就一定不會有「*」,
也就是說,使用者根據以經習慣的Windows操作邏輯,會先認定只要有填過資料,它就不應該要有「*」
好吧..就我們先跟著鼎新這個奇怪的邏輯做看看...

接下來,要刪除這個「Row」,依照鼎新的說法,在這個地方我們應該要按「ESC」,這時候會跳出一個msgbox看看下圖:
Ctrldel08.jpg

那麼我們就按下「OK」吧...



Ctrldel04.jpg

耶?發生什麼事?(使用者:更更更更更....我的資料咧啦...)

你沒看錯,整筆資料清掉了...沒救了,要重打了....

根據鼎新瞎掰中心的說法,剛剛那個msgbox是先問使用者,要不要把「整張單據」放棄掉,如果必須要先按「NO」,然後才會跳出第二個msgbox如下圖,會問要不要把這個Row放棄掉。
Ctrldel09.jpg

呵呵呵...夠搞笑了吧...msgbox會問你你壓根沒想到過的事...而且鼎新的回覆還振振有詞...
而且這個msgbox忽然來個英文,不懂英文的阿伯阿媽根本也不知道在問啥...
就算看得懂的,啊那record指的是單頭的record還是單身的record啊?
我猜我猜我猜猜猜...

它會出現第一個msgbox,其實不意外啦,因為鼎新預設按「ESC」是先判斷目前是不是在新增模式下,如果是,就取消單據新增,如果不在新增模式下,就會關閉程式...
只是沒寫過程式的使用者誰知道會來這一招啊....

以目前我們公司的使用者操作了一年多來看,到目前為止,仍然有9.9成的人,在第一個msgbox會直覺的按下「OK」,然後就開始咒罵那0.1成的人,因為那0.1成的人,就是無辜的MIS...。

那麼,我們再來看,如果"0002"的刪除改用「Ctrl+Del」呢?
嘿嘿...它會直接把"0002"刪除,然後跳一個msgbox如下:
Ctrldel03.jpg

如果按下了「OK」,會把"0001"給刪了...
很神奇吧...
鼎新的理由是,因為"0002"是有「*」還沒有存入,所以當按下「Ctrl+Del」的時候,它會直接略掉"0002",然後問"0001"要不要刪除,如果這時候按「OK」,就會把"0001"也幹掉了...

關於這個問題已經回報鼎新,瞎掰中心的回覆如下:

1.Ctrl+Del 專指針對非正在新增的單身資料做刪除
2.正在新增的單身資料若不儲存的話, 可使用Esc 鍵, 按下後會出現是不要放棄這次的新增, 此時指的是整張單據, 因此請按"否", 按下"否"之後, 會詢問, 是否放棄這筆單身的新增, 這時就可以按下"是" 即可刪除這筆正在。

結論是不予修改。

只能說...很有創意...這種感覺,就像是把鍵盤大風吹,你不知道你按的是什麼鍵...你不知道按下的「OK」是不是如同使用者所想的「OK」

還有,請注意,不是只有上例的個別案例喔...是全系統都這樣喔...
讚吧...


鼎新Cosmos ERP借出入單建立作業漏洞

其實很早以前,就發現了一個狀況是,當員工在輸入借出/入單的時候,單價欄位會顯示該品號的單位成本,例如下面這個品號:
品號資料建立作業.jpg

在打借出入單,如果對象選擇成「員工」的時候,品號的「單價」就會變成物品的成本:
借出入單建立作業.jpg

這個問題因為前些陣子忙於規劃維修系統,這個問題直到四月初才回報鼎新的客服人員,其實這個問題本身也很單純,我想,除了40人以下的小型公司以外,應該沒有公司會大剌剌的把所有物品的成本開放給所有員工知道...

這個算是最最基本的內稽內控,為求再次確認,致電給鼎新客服,詢問「單價」欄位的取價方式,得知如下:
若異動對象是【客戶】則【單價】欄位捉取「客戶資料建立作業」【取價順序】
若異動對象是【人員】或【其他】則【單價】欄位捉取「品號資料建立作業」【移動平均成本】(品號基本資料中,庫存金額 / 庫存數量)
若異動對象是【廠商】則【單價】欄位捉取「品號資料建立作業」【最近進價】
果然,如我所測試,的確是有在「單價」放上了成本...
我的問題其實可以分成兩個部份:
1.在企業內部,由於「單價」與「成本」屬性不同,「成本」的欄位必需是比較嚴格的控管,也因為如此,在我目前用過的ERP軟體,對於「單價」與「成本」都有相當清楚的劃分,包括鼎新Cosmos的其他程式也都有清楚的區分,但只有這個欄位特例,把「單價」欄位放入「成本」數值。
2.物品的成本不應該讓所有員工有管道可以查詢


於是在提出上述疑問後,鼎新的客服提供了一個解法:
‧把不能知道成本的員工的借出入單建立作業之權限,將「售價」設定成「隱藏」

呵呵,問題就來了,我們借出入單的作業非常頻繁,所以我們的工作流程上,在輸入借出入單的人員很多都是工程師,
工程師借出入的對象可以為員工自己、也可以為客戶,當然用鼎新客服的解法可以解決對象為員工的時候,
但是對象是客戶的話呢?借給客戶的東西,我們也必須讓客戶先知道物品價值啊!就算我們不Show,客戶也要求要Show上,
怎麼辦?工程師有需要的時候再開權限??那還不是一個漏洞,而且還把MIS搞死...
所以這個解決依然是死路一條...

說到這兒,我的狀況跟鼎新重新說明了一次:
1.我不希望每位員工都可以看到成本,我希望可以依照鼎新既有權限設定的模式,鎖成本就看不見成本,鎖售價就看不見售價,不要鎖成本還可以看見成本,鎖售價看不到成本。
2.每位員工都可以進行借出入單據的登打,以及列印


好,回來這裡,既然這麼明顯的漏洞,本來以為說明後,鼎新會立即想辦法修正改善,結果過了兩天後,客服人員與我聯絡告訴我,她收到了鼎新產品中心的回覆:
098/04/15 以流程面來說:
借出/入單建立作業後有可能轉銷貨單,後者為售價權限,
再者以借出/入單建立作業異動對像若為客戶或廠商,
則需鎖定售價權限,且PKG在庫存模組中借出/入單定位係指,
內部人員使用借出/入單作業時所使用之單據,
其後由建檔程式列印憑証時才可保留售價。
098/04/15 (接上一筆單身)若客戶覺得應屬成本權限控管可由ADMI03(檔案資料建立作業)去修改該欄位售價及成本屬性。
098/04/15 以程式面來說:
建檔程式在初始化時就會判定使用者權限,售價
與成本權限只能取其一去設定,即使在程式中依照異動對像去
更改權限內容,此法更會造成不同人員在更改異動對像時能
看見不屬自己權限的內容。
098/04/15 以PKG的角度來說:
借出/入是為內部單據, 會以單價的方式來呈現, 主要的目的是借出若發生遺失, 會以該單價金額進行索賠處理,模組功能當初規範及定義所表徵,流程及程式產品的特性,
098/04/15 (接上一筆單身)
產品中心需維持及維護,此案與產品原本的流程定義並無相
背馳之處,不屬程式或規格BUG,且PKG產品需符合大多數客戶
的使用方式及權益,故在流程規格不符客戶使用時,保留管道來滿足需求。
此單產品中心不予協助及更改程式規格內容,請客戶以個案處理。


看了一長串有沒有發現什麼事?
1.鼎新認定借出入建立作業是「內部作業」,什麼跟什麼啊?借出入建立作業只能用在內部?跟廠商/客戶不用憑證交易嗎?那要這ERP幹嘛?
2.鼎新建議借出入建立作業可以不顯示售價,到憑證再顯示售價即可,這個也說不通吧?打的人在打的時候看不到售價,印的時候還是可以看到售價欄位...那鼎新又把「成本」放在售價欄位,那不就跟原本的狀況一樣?有改善嗎?
3.上面紅色字的部份,這根本就在瞎掰吧...有公司會為了這個,開放給所有員工知道成本嗎?有公司會這麼佛心,員工弄丟東西只要賠成本?如果我今天是道德不良的員工,光靠這個就可以搞死公司了...
4.鼎新產品中心認為,這個東西不是漏洞啦...大多數的客戶都會把成本公開給員工知道啦...你們公司是特例啦...要補這個洞喔...拿錢來換啊...


好...很好...每個人都在睜眼說瞎話...尤其是躲在後面的產品中心,講話都不用負責任的...好像產品爛不干他們的事...反正他們不用管客戶是怎樣..總之能掰就掰,乾脆叫瞎掰中心好了...

再來我找了鼎新的顧問,要求她對應此問題,並且跟瞎掰中心說,別在瞎了...我很不爽...也順便把此事相關的mail轉寄給負責的總經理
過了幾天,來了個好消息...瞎掰中心覺得如果單純解決我們公司的問題,可能不太完整,建議了一個更完整的修改方式...
1.單據性質的設定,設定上"單價來源",因此可以依單別,在「單價」取得對應的"單價來源"
2.借出入單建立作業必需拆成每"對象"為一支程式...也就是說,要借給客戶,就開"客戶借出入單"(暫名),借員工,就開"員工借出入單"

這個方式瞎掰中心會把它列為PKG的標準做法...
我完完全全認同上述做法...也馬上在電話上回覆說OK...這個方式的確可以解決我的問題,也很完整...

於是,一個月後...(出乎意料的快啊..平常等個十年半載都不一定有的...)

我收到程式了,發現第1項是達到了..啊第2項咧??
問了顧問後才知道原來瞎掰中心有改做法了:
1. 修改借出入單據之單據性質設定, 可設定售價來源(只要在單據性質中有設定售價來源, 則不論對象為何, 皆不會出現成本金額)
2. 在借出入單據中, 單價欄位係以單據性質設定中的售價來呈現, 且單價及金額欄位依售價權限來管控
3. 若依不同對象別(如:客戶, 廠商, 人員, 其他)需呈現不同單價時, 則需設定不同單別來呈現
4. 若單據性質之售價來源未設定(設定為0:無)則程式依原PKG方式呈現

好,以照上面的改法,的確借出入單建立作業不用拆... 那問題解決了嗎?來..一項項看..
1.先在單據性質設定,設定兩種單別:
a.員工借出入單別,售價來源選擇「標準售價」
b.廠商/客戶借出入單別,售價來源選擇「無」
2.嗯..假設我要借員工,我用員工的借出單別,對象選員工,OK...單價會跑標準售價...
3.嗯..假設我要借客戶,我用客戶的借出單別,對象選客戶,OK...單價會依客戶取價順序取價...
4.嗯..假設我要借員工,我選錯了..我選到客戶的借出單別,對象選員工,咦?跑出成本....

好了,不用測了...知道問題在哪兒了吧...

馬上反應給顧問...結果顧問說,啊瞎掰中心就只能這樣改,其它要我們個案客製,如下:
1. 修改:單據性質建立作業, 單據性質增加"對象"別選項(必選); 預估時數3 hr
2. 修改:借出入單據建立作業, 單據新增時call單據性質之設定 (說明:若單據設定為客戶, 則建立時選擇廠商即出現錯誤訊息); 預估時數3hr
3. 修改:借出入歸還單據建立作業, 單據新增時call單據性質之設定 (說明:若借出入歸還單據無前置單據時(假設), 則售價來源依單據性質之設定抓取); 預估時數3hr

對,我完完全全被耍了...
回到了原點,這個漏洞還是要我們花錢補...
原先什麼完整的做法根本只是先擺明有這個問題...要不要花錢補,是看客戶...

正在評估導入鼎新ERP的人...也許上面有些名詞不用過不曉得...不過,在這裡誠心建議...真的,
如果你真的要導入鼎新任何一套ERP,你必須要有長期抗戰的準備,
你的上線時間運氣好真的看看能不能在兩年內上線..否則..你還是考慮SAP或是Oracle之類的ERP吧...
真的不要因為預算的問題,選這種產品...這種產品,連正航的水準可能都沒有..如果真的因為預算寧願選便宜的..
雖然也是不好用,但起碼獲得對等價值...

===================Update===========================
好不容易經過了冗長的溝通後,終於有獲得解決方案了...
做法會是:建議單據性質多一個售價來源設定:9.來源計價。 修改 借出入/借出入歸還 的抓取邏輯

借出入單據及歸還單據的單據性質建立作業中, 售價來源增加:9. 來源計價
若借出對象為〔客戶〕時, 且單據性質設定之售價來源為9. 來源計價; 則依PKG客戶計價帶入.
若借出對象為〔廠商〕時, 且單據性質設定之售價來源為9. 來源計價; 則依PKG品號主檔之最近進價帶入.
若借出對象為〔人員或其他〕時, 且單據性質之售價來源為9. 來源計價; 則依照取價順序9.來源計價 else 1.標準售價

應用說明及考量其它可能性
1)若單據性質為'客戶借出單'且售價來源設定為9. 來源計價; 使用者在錯誤操作的情況下, 對象別應選客戶但選成人員或其他, 因人員或其他無來源計價資料, 故直接抓取1. 標準售價.
2)若單據性質為'廠商借出單'且售價來源設定為9. 來源計價; 使用者在錯誤操作的情況下, 對象別應選廠商但選成人員或其他, 因人員或其他無來源計價資料, 故直接抓取1. 標準售價.
3)若單據性質為'人員借出單'且售價來源設定為2. 員工價(假設); 使用者在錯誤操作的情況下, 對象別應選人員但選成客戶或廠商或其他, 單價依單據性質設定之售價來源, 固定抓取2. 員工價.
4)若單據性質為'其它借出單'且售價來源設定為1. 標準售價; 使用者在錯誤操作的情況下, 對象別應選其他但選成客戶或廠商或人員, 單價依單據性質設定之售價來源, 固定抓取1. 標準售價

雖然搞那麼久才有個結論...雖然這些程式在我有生之年不知道能不能用得到...不過也算是有解決了...
========================The END======================