鼎新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」

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


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

  1. 以你用心的程度

    你可以規劃一套很好很好的系統

    我們以技術支援你

    全球最大 OpenSource ERP 專案
    非營利組織 www.Adempiere.org 創始成員
    台灣技術 支持團隊
    敬上
    Skype: Adempiere/Compiere

  2. Access : append and update,,

    在企業多人作業是不是一個好的方式,,

    但是在 GridTable 時 delete 整張 是很誇張

  3. 匿名 says:

    您好,

    不小心在查資料時發現您的Blog.
    因敝人目前正在進行ERP的開發.
    才剛寫好這種Master/Detail的操作介面.
    看了您的抱怨,發現自己不小心在幾天之內
    趕出來的作業好像比較好操作.
    一般來說若目前點選的為Master表示新增.
    刪除.修改指的是整張單據.
    若目前點選的是Detail表示僅只新增明細.
    修改或刪除明細目前focus的row.
    當然不管是整張單據的異動或明細的異動.
    在執行後一定要詢問使用者是否確定要異動
    整張單據或目前此筆明細資料.
    接著.在明細執行新增row或修改row功能,
    應該要有功能可以放棄該筆新增row或還原update row.
    可在明細製作按右鍵功能表,
    若focus row為add row則enable 放棄新增.
    若focus row為update row則enable 放棄修改.
    這些功能都是我10月份花幾天時間寫出來的.

    不曉得您對這樣的操作意見如何?
    說實在的,不會太難寫.
    況且我就一人從無到有開發.

  4. 阿志 says:

    您好,
    你太厲害啦~~~老闆叫我寫我都一整個懶~~~XD~~~
    關於您提的問題,因為我沒有看到畫面所以不太清楚為何Master/Detail的切換是需要點選後,才能進行新增、修改、刪除..
    我以使用者的角度來看的時候,Detail的部份係根據整張單的模式而自動切換是否是可修改模式即可...
    也就是說,如果整張單是在新增、修改模式下,detail應是可以讓使用者任意增刪row.整張單是在查詢模式下,則不能進行任何異動.
    並且,在可以增刪或異動row的時候,不需要再按新增、刪除、修改的功能才能進行。
    異動完成後,當然存檔的時候詢問是OK的...
    在detail執行新增row或修改row放棄單筆異動的功能真的還滿需要的,不過我覺得如果有快速鍵會更好,可以考慮用ESC當快速鍵,按下後,放棄該筆row,這裡我覺得也不太需要給使用者確認...按了就讓它放棄,重打也頂多一筆,所以很OK...
    不過千萬不要用像鼎新一樣的方式,按esc優先把整張單放棄..應該先放棄單身,如果又再按一次esc的時候,再問使用者是不是要把整張單放棄即可...這樣整個操作流程就很順了~~~

  5. 匿名 says:

    Dears,

    Master指的是單頭,也就是俗稱的主檔
    Detail指的是單身,心就是俗稱的明細檔
    若目前focus在單頭則任何異動指的是整張單據
    也就是游標停在單頭
    若目前focus在單身則任何異動指的是目前單身中
    選擇的row
    也就是游標停在單身
    這樣的操作應該很合理.
    其實十年前的Power Builder開發工具的framework
    就是這樣設計的.
    我十年前玩過Power Builder所以借來參考.
    目前我是用Java開發ERP. 寫起來有點小辛苦.

    其實我目前寫的作法.
    在單頭按新增-> 新增單據,進入新增模式
    在單身按新增-> 新增明細,進入新增模式
    使用者不太可能一次新增完資料就輸入完整.
    所以我寫的framework,可查詢出此張單據,
    游標移到明細裏,在明細執行新增,即可新增
    一筆明細資料.

    by the way,
    想請教您認為哪些快捷鍵是必須加上功能
    而又應該加上哪些功能?
    目前尚未加快捷鍵處理.
    只有控制滑鼠事件而己.

    一人ERP團隊

  6. Benny says:

    1.按Esc鍵就整張單據不見,這是程式的Bug。2.Discard Changs...這個訊息是Grid內建的訊息。這個Grid就是使用InfoPower的產品。3.是否刪除本筆資料...這個訊息會刪到第一筆,這也是程式的Bug。歸納這些錯誤起來看,這其實是一個問題,而且感覺上這程式看起來是找Delphi新手來開發的。這實在是沒甚麼道理,這麼大的公司怎麼會出這種奇怪的問題,只要稍懂Delphi程式設計的人,這種錯誤是不應該發生的,且客服的回答真是蝦到爆了,感覺是照工程師給的答案來應付你。

    基本上,Accesse也好,SQL Server也沒差,每個軟體都有自己的操作風格。只要風格維持一致,沒有問題,User都是可以接受的。因為,習慣就好。

    這個問題的發生是在截取鍵盤事件時,必須判斷目前DataSet的State以及發生事件的元件。如果DataSet的State不是Browse,或者目前的Fource是DBGrid,就不用理會這個事件。以您的例子來看,DBGrid擁有Focus,當然不用處理他的Esc之KeyDown事件。接著,判斷明細的DataSet不是Browse,當然不能直接取消整張單據的新增。這時,DBGrid就會自己接手Esc之KeyDown事件。對Delphi的DBGird來說,在新增記錄時按Esc,就是放棄該筆明細的新增,這是從Delphi 1.0就維持下來的傳統,已經有快20年之久了。而InfoPower的wwDBGrid是繼承自DBGrid,當然也有維持這項傳統。Discard Changs...這個訊息是InfoPower為了提醒使用者是不是要放棄新增的記錄,比Delphi原來的DBGrid還更貼心,而且,為了配合不同國家地區的語言,InfoPower還提供TwwIntl元件來讓程式設計師把這些訊息給在地化。所以,鼎新的程式設計師實在是懶到一個可以。因為TwwIntl元件只要在Base做一次,所有繼承的專案皆可適用。
    由圖片來看,鼎新這套ERP是用Delphi 6開發的,所以有些功能是很舊的,就算想做也做不到,必須升級Delphi的版本才可以。譬如說,nchar或nvarchar,是Delphi 2009才開始支援。所以,鼎新用的Delphi 6當然是做不到呀。就算你欄位開成nchar或nvarchar,鼎新的ERP還是無法用雙位元組來儲存。換句話說,你打"堃"這個字還是無法存起來。
    另外,Text型態我猜測也是工具問題,因為Text的資料要在螢幕上顯示、維護是沒問題的,但要列印出來,早期有些報表工具在這部分會有Bug。除非你跟他保證你在備註不會打中文或特殊符號?
    維護合約應該是建立在問題是發生在自己的原因,藉由千維護合約的方式來降低維護費用。不過看您的Bolg,感覺好像是簽維護合約來幫鼎新Debug的,真是悲劇。
    最後,InfoPower是一套非常好的元件組,全世界只要有用Delphi來開發AP,大部分都會選用他。我自己也用了快20年,我的客戶(也是南部某傳產的上市公司)的User也未曾對它抱怨任何怨言。我想是鼎新自己把它改到爛掉吧...與其這樣,不如不要改。像我自己就有針對台灣的微軟新注音、新倉頡輸入法做原始碼的修改而已。

  7. Ryan says:

    Dear Benny,
    呵呵,聽說用的是更之前的Delphi 5, Anyway,您提的幾個狀況,我真的超認同啊...
    可惜即便早在幾年前就提供他們產品中心這些問題的解決方案,仍然無法取得讓該產品進步的共識~

Leave a Reply