本站即日起遷移至http://sj-erp.blogspot.tw/
Blog內容主要以討論TIPTOP、ERP相關議題為主,希望對於TIPTOP的入門者有所幫助。文中所有提到的程式碼與畫面版權均屬鼎新電腦或其相關公司所有!有任何問題也可以發mail互相交流:sjchen.erp@gmail.com
2012年10月7日 星期日
2012年9月27日 星期四
採購單單別/稅別選錯,怎麼辦?
採購單在某些狀況下,是沒有辦法透過更改、採購變更來做變更,對於許多IT人員來說,遇到User不小心選錯單別、稅別的採購單,跑來哭訴也好、咆哮也好,到底應該怎麼處理呢?
透過此篇稍微解釋,面對下列情境,應該如何處理異常單據。
情境一:
採購單已確認,未發出、未收貨、沒有採購變更單。
做法:
單別選錯:採購單取消確認→刪除單身→作廢單據→重立採購單。
稅別選錯:採購單取消確認→修改稅別→再確認單據。
情境二:
採購單已確認,已發出、未收貨、沒有採購變更單。
做法:
單別選錯:發出還原→其餘同狀況一。
稅別選錯:發出還原→其餘同狀況一。
情境三:
採購單已確認,已發出、未收貨、有採購變更單已發出。
做法:
單別選錯:再登打採購變更單→將單身數量變更為0→變更發出→採購單結案→重立採購單
稅別選錯:同上,因為稅別會影響到單身金額計算,所以稅別不允許做變更。
(PS. 訂單變更也不允許變更稅別。)
情境四:
採購單已確認、已發出、已收貨未入庫、無採購變更單。
做法:
單別選錯(方案一):取消確認收貨單→刪除單身→作廢收貨單→採購單發出還原→採購單取消確認→刪除單身→作廢採購單。
單別選錯(方案二):取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
稅別選錯(方案一):取消確認收貨單→刪除單身→作廢收貨單→採購單發出還原→採購單取消確認→修改單頭稅別→確認採購單→發出→重新收貨
稅別選錯(方案二):取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
情境五:
採購單已確認、已發出、已收貨未入庫、有採購變更單已發出。
單別選錯:取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
稅別選錯:取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
情境六:
採購單未確認。
單別選錯:刪除單身→作廢單據→重立採購單。
稅別選錯:採購單取消確認→修改稅別→再確認單據。
還有狀況我沒提到的嗎??歡迎留言討論!
透過此篇稍微解釋,面對下列情境,應該如何處理異常單據。
情境一:
採購單已確認,未發出、未收貨、沒有採購變更單。
做法:
單別選錯:採購單取消確認→刪除單身→作廢單據→重立採購單。
稅別選錯:採購單取消確認→修改稅別→再確認單據。
情境二:
採購單已確認,已發出、未收貨、沒有採購變更單。
做法:
單別選錯:發出還原→其餘同狀況一。
稅別選錯:發出還原→其餘同狀況一。
情境三:
採購單已確認,已發出、未收貨、有採購變更單已發出。
做法:
單別選錯:再登打採購變更單→將單身數量變更為0→變更發出→採購單結案→重立採購單
稅別選錯:同上,因為稅別會影響到單身金額計算,所以稅別不允許做變更。
(PS. 訂單變更也不允許變更稅別。)
情境四:
採購單已確認、已發出、已收貨未入庫、無採購變更單。
做法:
單別選錯(方案一):取消確認收貨單→刪除單身→作廢收貨單→採購單發出還原→採購單取消確認→刪除單身→作廢採購單。
單別選錯(方案二):取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
稅別選錯(方案一):取消確認收貨單→刪除單身→作廢收貨單→採購單發出還原→採購單取消確認→修改單頭稅別→確認採購單→發出→重新收貨
稅別選錯(方案二):取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
情境五:
採購單已確認、已發出、已收貨未入庫、有採購變更單已發出。
單別選錯:取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
稅別選錯:取消確認收貨單→刪除單身→作廢收貨單→採購變更單變更數量為0→採購單結案→重立採購單。
情境六:
採購單未確認。
單別選錯:刪除單身→作廢單據→重立採購單。
稅別選錯:採購單取消確認→修改稅別→再確認單據。
還有狀況我沒提到的嗎??歡迎留言討論!
2012年8月16日 星期四
ERP實務--何謂應收、逾期應收、提列呆帳
※應收帳款※
所謂的應收帳款指的是,當貨品或服務銷售給客戶之後,應該向客戶端收取的金額款項,這部份稱之為應收帳款的加項。
而一般是由預收、暫收、銷退、折讓而產生的待抵帳款,這部份就被歸列在應收帳款的減項。
※逾期應收※
一般來說,在與客戶敲定訂單時,會一併把收款條件談好,所以立應收時,就會有一個應收款日。而逾期應收的概念指的是,過了跟客戶協調好的應收款日,還未將款項收回的部份,稱為逾期應收。
※提列呆帳※
一般來說,公司都可以在期限內,或是盡量在逾期天數一年以內把款項收回,但有時客戶週轉不靈或是營運狀況不佳時,可能會導致應收帳款無法收回,此時,會計單位可能就會視情況將該筆應收帳款提列為呆帳,認列損失。
但提列呆帳與認列損失的條件,會隨著每間公司產業特性、營運現況、會計政策有所不同。
由上延伸出一個Issue可討論:
逾期應收統計表,應該將應收帳款的減項列出,加入統計嗎?
我個人的看法是,應收帳款的減項(待抵帳款)其實並沒有所謂逾期的概念,只要客戶有立應收,隨時都可將這些待抵或減項單據拉出來沖帳,而這些待抵帳款的概念比較像是我們欠客戶錢。既然是如此,只要後續客戶再跟公司交易產生應收帳款時,就可以立即將待抵帳款做沖帳的動作。
再者,後續客戶下一次會在何時交易,並沒有辦法確實掌握,也沒有一個明確的時間,如此一來,把待抵帳款列為逾期,反而是增加自己的困擾。
2012年8月15日 星期三
ERP實務--報工與成本的關聯
大家應該都知道,現場生產產品必須開立製令(或稱工單),而無論是一般生產工單或是製程工單,都必須進行報工的動作,報工最少須載明生產時間、生產數量。
然而,大家都知道生產要報工,但對於報工的重要性瞭解有多少呢?
產品的成本主要是由材料、人工、製造費用所組合而成,也就是成會人員常說的「料工費」。
材料成本的來源,就是看製令(工單)領用多少料,就吃多少成本,有領才有算,所以這個部份很容易理解。但是人工跟製費到底要怎麼攤提到各製令(工單)裡?
每張製令(工單)所耗費的人工工時與機器工時都不一樣?就算是生產一樣數量的A產品,也不可能有相同的良率產出,或是相同的工時花費,這時報工就顯得非常重要。
透過報工,讓系統可以區分出每張製令(工單)所耗費的工時(不管是人工工時、或機器工時),月結成本時,將該月份所有製令(工單)工時全部加總做為分攤基準。
所以每張製令(工單)的工時是不是確實的收集正確,會影響工單在分攤人工、製費的基礎,至於佔成本比例多寡,就要視產業與產品特性而定。
然而,大家都知道生產要報工,但對於報工的重要性瞭解有多少呢?
產品的成本主要是由材料、人工、製造費用所組合而成,也就是成會人員常說的「料工費」。
材料成本的來源,就是看製令(工單)領用多少料,就吃多少成本,有領才有算,所以這個部份很容易理解。但是人工跟製費到底要怎麼攤提到各製令(工單)裡?
每張製令(工單)所耗費的人工工時與機器工時都不一樣?就算是生產一樣數量的A產品,也不可能有相同的良率產出,或是相同的工時花費,這時報工就顯得非常重要。
透過報工,讓系統可以區分出每張製令(工單)所耗費的工時(不管是人工工時、或機器工時),月結成本時,將該月份所有製令(工單)工時全部加總做為分攤基準。
所以每張製令(工單)的工時是不是確實的收集正確,會影響工單在分攤人工、製費的基礎,至於佔成本比例多寡,就要視產業與產品特性而定。
2012年8月13日 星期一
TIPTOP實務--退貨折讓向廠商收款的作法(支票)
上次我們提到如何操作透過匯款的方式向廠商收款,現在我們介紹當廠商開立支票時的操作方式。
Step 1. 應收票據收票作業(anmt200)
依一般票據收票方式登打,但需注意下列事項:
Step 2. 收款沖帳維護作業(axrt400)
單頭客戶編號必須與登打銀行收支(anmt302)時一樣的客戶編號:
以上操作步驟的前題是,必須先在廠商退貨折讓待抵作業(aapt210)中先建立待抵資料,才能到axrt400收款沖帳中拉出單號出來沖帳。
Step 1. 應收票據收票作業(anmt200)
依一般票據收票方式登打,但需注意下列事項:
- 不做分錄
- 票別最好與一般客戶支票的票別分開,屆時從報表資料中才能區別。
後續支票兌現的操作方式,與一般支票兌現操作相同,執行應收票據異動維護作業(anmt250),來操作支票兌現。
Step 2. 收款沖帳維護作業(axrt400)
單頭客戶編號必須與登打銀行收支(anmt302)時一樣的客戶編號:
- 客戶編號使用MISC
- 收款單身登打方式:
項次一:借方、類別為1.支票,參考單號為Step1.所登打的應收票據收票作業(anmt200)的單號。
項次二:貸方、類別為9.應付待抵, 參考單號輸入在退貨折讓待抵(aapt210)的單號。 - 自動產生分錄底稿:
借:應收票據 (項次一)
貸:aapt210的借方科目 (項次二)
以上操作步驟的前題是,必須先在廠商退貨折讓待抵作業(aapt210)中先建立待抵資料,才能到axrt400收款沖帳中拉出單號出來沖帳。
2012年7月29日 星期日
TIPTOP實務--明明有設非成本庫,為什麼還是會算出成本?
在倉庫別資料維護作業(aimi200)裡,有一個欄位是記錄成本庫類別,主要目的僅是提供User判斷該庫別是否屬於成本庫/或非成本庫,但這裡的設定值並不影響該庫別的成本計算邏輯。
系統有另一支程式不納入計算成本庫維護作業(axci500),在axci500裡維護的倉別才是真正在計算成本時,會被納入判斷的資料。
所以當你發現在aimi200裡有設定為非成本庫,可是在進行成本計算(axcp500)時,該庫別的異動單據仍會被納入成本計算時,請先檢查在axci500是否有設定該庫別資料。
範例:
62倉在aimi200裡有設為非成本倉,但是在axci500裡並沒有設定為非成本倉,所以當執行axcp500時,也會把62倉的異動單據納入成本計算的範圍。
系統有另一支程式不納入計算成本庫維護作業(axci500),在axci500裡維護的倉別才是真正在計算成本時,會被納入判斷的資料。
所以當你發現在aimi200裡有設定為非成本庫,可是在進行成本計算(axcp500)時,該庫別的異動單據仍會被納入成本計算時,請先檢查在axci500是否有設定該庫別資料。
範例:
62倉在aimi200裡有設為非成本倉,但是在axci500裡並沒有設定為非成本倉,所以當執行axcp500時,也會把62倉的異動單據納入成本計算的範圍。
補充說明:
在axci500裡有兩個欄位,非成本庫(jce01)與倉庫編號(jce02),但實際上只有
倉庫編號(jce02) 這個欄位的設定值有作用,非成本庫(jce01)這個欄位建議大家可以一律設成N即可。
2012年7月19日 星期四
TIPTOP實務--工單出現超額報工問題
工單如果有走製程,而BOM單身沒有維護作業編號時,就有可能遇到系統允許超額報工的問題,最常見的問題如下:
1. asft700報工時,可以無上限的一直報工→移轉→QC→入庫。
2. asfi301工單單身備料資料沒有發足料,但報工卻可以報足額→移轉→QC→入庫。
以上兩種問題都是因為工單備料單身的作業編號為空值的關係。
以TIPTOP生產製程設計的概念,是允許製程分段投料,也就是從工單單身備料檔的作業編號來區分,要在哪一站進行投料,進而計算最小發料套數。
如果工單單身備料檔的作業編號都為空值時,就會導致系統無法判斷下階料應該在哪站發料才能算正確,所以就不會計算出正確的最小發料套數。
解決方案:
1. asft700報工時,可以無上限的一直報工→移轉→QC→入庫。
2. asfi301工單單身備料資料沒有發足料,但報工卻可以報足額→移轉→QC→入庫。
以上兩種問題都是因為工單備料單身的作業編號為空值的關係。
以TIPTOP生產製程設計的概念,是允許製程分段投料,也就是從工單單身備料檔的作業編號來區分,要在哪一站進行投料,進而計算最小發料套數。
如果工單單身備料檔的作業編號都為空值時,就會導致系統無法判斷下階料應該在哪站發料才能算正確,所以就不會計算出正確的最小發料套數。
解決方案:
- 從系統資料設定著手,由系統取得正確資料加以控管。將BOM單身的作業編號欄位填入正確的作業編號,讓系統可以清楚辨識出料件與工站的關係。
- 從現場人員管理著手,加強人員報工管理。
原則上,我是比較相信電腦過於人工,畢竟人有判斷上的茫點,有可能會因為無心的錯手,導致系統輸入異常資料。如果有什麼建議也可以一起提出討論。
2012年7月16日 星期一
TIPTOP程式開發-畫面開窗設計重點
在開發TIPTOP程式的過程中,經常會遇到需要在欄位上設定開窗鈕,讓user可以快速的查出與填入所需的資料,以下簡單介紹在開發中所需執行的步驟:
畫面檔4fd部份屬性設定如下:
程式碼4gl部份程式碼如下:
因為我們要寫的是開窗功能,而開窗在TIPTOP系統中是由Control+p來代替,所以控制碼會寫在ON ACTION controlp段,其中需要注意的是下面這行程式碼:
LET g_qryparam.state = "c"
這邊的設定是在判斷開窗後的回傳值型態,設定為"c",指的是回傳值是針對CONSTRUCT使用,可以傳回多筆資料。如果開窗後只能回傳一筆資料(例如INPUT模式),則不能加上這行程式碼。
PS. CALL cl_create_qry()的相關參數說明,另章說明。
畫面檔4fd部份屬性設定如下:
- Widget
需設定該欄位為ButtonEdit,只有設定為ButtonEdit時,才能設定開窗動作。 - Image Group
image type設為Select File →這邊指的是要選擇使用檔案。
image設為zoom→這邊指的是要使用檔案的名稱,鼎新開窗用的放大鏡是zoom,所以直接輸入zoom就可以了。 - action
要設定為controlp,指的是按下什麼鍵會執行動作,這邊需要與4GL程式碼相配合。
程式碼4gl部份程式碼如下:
因為我們要寫的是開窗功能,而開窗在TIPTOP系統中是由Control+p來代替,所以控制碼會寫在ON ACTION controlp段,其中需要注意的是下面這行程式碼:
LET g_qryparam.state = "c"
這邊的設定是在判斷開窗後的回傳值型態,設定為"c",指的是回傳值是針對CONSTRUCT使用,可以傳回多筆資料。如果開窗後只能回傳一筆資料(例如INPUT模式),則不能加上這行程式碼。
PS. CALL cl_create_qry()的相關參數說明,另章說明。
2012年7月9日 星期一
TIPTOP實務--退貨折讓向廠商收款的作法(匯款)
一般而言,在實務上若廠商產生退貨折讓時,都是轉入退貨折讓(aapt210)成為待抵後,待下一批貨物入庫請款後,再拉出來進行沖帳作業。但如果這個廠商日後不再交易,則這筆折讓將永遠無法沖帳,此時,大部份會選擇要求廠商將退貨折讓款用匯款或是支票付款的方式退回。
在這邊,我們介紹在TIPTOP ERP系統上如何操作,以達到對廠商收款的目的,這邊以介紹匯款為例:
Step 1. 銀行收支維護作業(anmt302),登打暫收款。
如果廠商只是單次交易,沒有編制在客戶基本資料檔(axmi221)內,可用MISC來代替。登打方式與一般客戶收款相同。
這邊的分錄底稿一般是產生為:
借:銀行存款
貸:暫收款
Step 2. 收款沖帳維護作業(axrt400),進行沖帳動作。
單頭客戶編號必須與登打銀行收支(anmt302)時一樣的客戶編號,以上步驟為例必須登打為「MISC」鼎新電腦。
進單身前,系統會詢問是否自動帶出單身資料,如果單頭輸入的客戶編號有存在廠商基本資料(apmi600)裡,是可以拉出應付帳款進單身,但這邊的例子是以MISC為例,所以不使用自動帶出單身的功能。
進單身後,開始輸入單身資料。
借方選類別3:應收待抵→也就是剛才輸入銀行收支(anmt302)客戶暫收款所產生的應收待抵單號(axrt300)。
貸方選類別9:應付待抵→輸入在退貨折讓待抵(aapt210)的單號。
這邊產生分錄底稿後,應該是:
借:暫收款
貸:aapt210的借方科目
這樣就完成廠商收款沖抵退貨折讓待抵了。
支票沖款的部份,另外說明。
在這邊,我們介紹在TIPTOP ERP系統上如何操作,以達到對廠商收款的目的,這邊以介紹匯款為例:
Step 1. 銀行收支維護作業(anmt302),登打暫收款。
如果廠商只是單次交易,沒有編制在客戶基本資料檔(axmi221)內,可用MISC來代替。登打方式與一般客戶收款相同。
這邊的分錄底稿一般是產生為:
借:銀行存款
貸:暫收款
Step 2. 收款沖帳維護作業(axrt400),進行沖帳動作。
單頭客戶編號必須與登打銀行收支(anmt302)時一樣的客戶編號,以上步驟為例必須登打為「MISC」鼎新電腦。
進單身前,系統會詢問是否自動帶出單身資料,如果單頭輸入的客戶編號有存在廠商基本資料(apmi600)裡,是可以拉出應付帳款進單身,但這邊的例子是以MISC為例,所以不使用自動帶出單身的功能。
進單身後,開始輸入單身資料。
借方選類別3:應收待抵→也就是剛才輸入銀行收支(anmt302)客戶暫收款所產生的應收待抵單號(axrt300)。
貸方選類別9:應付待抵→輸入在退貨折讓待抵(aapt210)的單號。
這邊產生分錄底稿後,應該是:
借:暫收款
貸:aapt210的借方科目
這樣就完成廠商收款沖抵退貨折讓待抵了。
支票沖款的部份,另外說明。
TIPTOP程式開發--CR樣板由A4改為中一刀
在TIPTOP GP 5.0開始,報表開發新增Crystal Report(簡稱CR)整合功能,可以快速或直覺式的設計報表,比起舊式的XML格式報表要來得輕鬆多了。
這邊先簡述,如何將CR樣板由A4改為中一刀的設定,這邊是依傳票列印(aglr903)為範例。
Step1. CR報表格式設定作業(p_zaw)的設定,單身樣板紙張選為10:中一刀
Step2. CR主機設定中一刀格式的紙張
開啟印表機設定→檔案→伺服器內容
在列印伺服器中新增一個格式為中一刀的紙張,格式可參考下圖資料。
Step3. CR樣板設定版面為中一刀
Step4. 程式執行列印畫面選項(依p_zaw設定出現選項)
因為這支程式在p_zaw有設定兩個不同的樣版,所以列印時,會有兩個選項。
結果一:若CR樣板有調整為中一刀,則會列印中一刀的格式,一頁只有一張中一刀紙張大小的傳票。
結果二:若只有調整p_zaw而沒有調整CR版面設定(維持A4紙張大小),就會列印成在一張A4紙上有兩張傳票資料。
這邊先簡述,如何將CR樣板由A4改為中一刀的設定,這邊是依傳票列印(aglr903)為範例。
Step1. CR報表格式設定作業(p_zaw)的設定,單身樣板紙張選為10:中一刀
Step2. CR主機設定中一刀格式的紙張
開啟印表機設定→檔案→伺服器內容
在列印伺服器中新增一個格式為中一刀的紙張,格式可參考下圖資料。
Step3. CR樣板設定版面為中一刀
檔案→版面設定→大小→中一刀
Step4. 程式執行列印畫面選項(依p_zaw設定出現選項)
因為這支程式在p_zaw有設定兩個不同的樣版,所以列印時,會有兩個選項。
結果一:若CR樣板有調整為中一刀,則會列印中一刀的格式,一頁只有一張中一刀紙張大小的傳票。
結果二:若只有調整p_zaw而沒有調整CR版面設定(維持A4紙張大小),就會列印成在一張A4紙上有兩張傳票資料。
2012年6月14日 星期四
TIPTOP程式開發--CR樣版語言別異常
TIPTOP ERP在開發CR報表的過程中,除了需要在Crystal Report把樣版設計好之外,也需要在CR報表格式設定作業(p_zaw)裡把樣版的資料設定進去,但有時仍會發現,為什麼明明有設樣版,系統卻一樣跑出錯誤訊息呢?
下面是範例的一種:
執行程式時發現:
但查過p_zaw的設定的確有設定繁體的語言別:
下面是範例的一種:
執行程式時發現:
但查過p_zaw的設定的確有設定繁體的語言別:
查詢之後發現,問題出在4GL程式裡,在cl_prt_cs3的function裡有玄機,這段程式碼在傳遞第二個參數時給定的是axmr360,但實際上在p_zaw裡設定的是cxmr004,所以當然會造成找不到語言別的問題。
cl_prt_cs3總共有四個參數:
1. 程式代號:對應的是p_zaw的程式代號欄位(zaw01)
2. 樣版代號:對應的是p_zaw的樣板代號欄位(zaw02)
3. 程式產出的報表temp table的資料:如下圖,
系統會依這串SQL指令到CR的temp DB去取資料傳遞到CR主機中。
4. 傳遞到CR報表的參數
這邊的參數順序就是對應到CR樣板裡的參數欄位,如下圖:
所以你在CR樣板裡看到有p1~p20的參數欄位,就是TIPTOP已經設定好的參數接收欄位。同樣的意思,在CR裡只設了20個參數,所以在4GL裡不能傳遞超過20個參數,否則,從第21個開始,CR是接收不到的。
2012年6月13日 星期三
SQL語法--Unicode長度的取得
現在為了因應全球化的趨勢,越來越多公司採用Unicode的編碼模式做為資料庫的編碼,不只可以補足BIG-5不足,還可以整合與編碼大部份文字系統。
但因Unicode並不如BIG-5的編碼長度是固定的,所以有時需判斷資料可能的長度,才能建置出正確且實用的資料庫欄位長度。特別是在由外部資料導入Unicode資料庫時,若不知道實際資料長度,很可能會導致資料匯入失敗。
所以,這邊介紹在UTF-8的編碼下,下列兩個語法可以取出資料庫欄位的Unicode實際長度,與字數:
1. lengthb=vsize:抓取unicode的實際長度
例:Select lengthb(ima02) from ima_file
Select vsize(ima02) from ima_file
2. lengthc=length:抓取有幾個文字數(此處的中文字與英文字母各計一個字)
例:select length(ima02) from ima_file
Select lengthc(ima02) from ima_file
註:unicode的詳細介紹可參考Wiki網站: http://zh.wikipedia.org/wiki/Unicode
但因Unicode並不如BIG-5的編碼長度是固定的,所以有時需判斷資料可能的長度,才能建置出正確且實用的資料庫欄位長度。特別是在由外部資料導入Unicode資料庫時,若不知道實際資料長度,很可能會導致資料匯入失敗。
所以,這邊介紹在UTF-8的編碼下,下列兩個語法可以取出資料庫欄位的Unicode實際長度,與字數:
1. lengthb=vsize:抓取unicode的實際長度
例:Select lengthb(ima02) from ima_file
Select vsize(ima02) from ima_file
2. lengthc=length:抓取有幾個文字數(此處的中文字與英文字母各計一個字)
例:select length(ima02) from ima_file
Select lengthc(ima02) from ima_file
註:unicode的詳細介紹可參考Wiki網站: http://zh.wikipedia.org/wiki/Unicode
2012年6月12日 星期二
TIPTOP系統管理-Createdb建立後須修改的參數資料
在上一篇裡介紹了Createdb的用法,但若是在使用createdb的指令時,選擇2、3、4的選項時,在建置完新資料庫時,請務必至各模組系統參數設定,將營運中心編號調整為新建立的營運中心代碼,避免影響其他營運中心資料的正確。
2012年6月8日 星期五
TIPTOP系統管理--Createdb用法
TIPTOP安裝時,提供了Createdb的Shell給客戶使用,方便客戶在新增DB時,不需要一個一個再建立TIPTOP ERP所內建的Table Schema。
createdb總共有四個參數,可以建立下列四種DB:
createdb總共有四個參數,可以建立下列四種DB:
當你在主機上輸入createdb時,就可以顯示下列說明文字:
</u1/topprod/tiptop/agl/4gl> createdb
Usage: /u1/topprod/tiptop/ora/bin/createdb dbname [1|2|3|4]
===========For ds schema has not been altered yet==============
Ex1 : /u1/topprod/tiptop/ora/bin/createdb ds1 1 -----> create database only
====================================================
===============For ds schema had been altered================
Ex2 : /u1/topprod/tiptop/ora/bin/createdb ds2 2 -----> create table schema(from ds user)
Ex3 : /u1/topprod/tiptop/ora/bin/createdb ds3 3 -----> create table schema with ds demo data
Ex4 : /u1/topprod/tiptop/ora/bin/createdb ds4 4 -----> create table schema with data(non-ds)
=====================================================
Ex1 : /u1/topprod/tiptop/ora/bin/createdb ds1 1 -----> create database only
====================================================
===============For ds schema had been altered================
Ex2 : /u1/topprod/tiptop/ora/bin/createdb ds2 2 -----> create table schema(from ds user)
Ex3 : /u1/topprod/tiptop/ora/bin/createdb ds3 3 -----> create table schema with ds demo data
Ex4 : /u1/topprod/tiptop/ora/bin/createdb ds4 4 -----> create table schema with data(non-ds)
=====================================================
- createdb dbname 1
建立一個空的DB,不含TIPTOP ERP的table Schema
使用時機:為了要把之前所建立的dmp倒回系統,做系統測試或資料回復。
- createdb dbname 2
以ds資料庫的table schema的架構建立一個資料庫,其中只會包含ds資料庫的table schema,與系統參數設定Table的值,其餘的Demo data都不會倒進來。
使用時機:建立新的營運中心或是測試資料庫
- createdb dbname 3
建立一個跟ds資料庫一模一樣的資料庫,除了包含TIPTOP ERP的TABLE Schema之外,還包含ds資料庫中的Demo資料。
換句話說,就是複製一個跟DS一模一樣的資料庫。
使用時機:一般常見是系統導入前,做測試之用,導入後很少會用到這選項。
- createdb dbname 4
複製一個與現有資料庫一模一樣的資料庫,但不能是DS資料庫。
使用時機:通常是為了測試系統或資料問題時,才會使用。
但使用這個選項要特別注意,複製完後,必須進系統把參數裡的營運中心設定調整為新的營運中心代碼才行,否則會造成新DB資料拋到舊DB裡。
※關於哪些參數設定要改,下篇再說明※
SQL語法實例分享--UPDATE進階
ERP在導入的過程中,經常會發生導入資料庫後的資料需要做整批調整,這時候對很多IT人員來說,真是一大工程,資料少的還可以匯出Excel,請User調整後,再重新匯入。
但如果資料筆數過多時,透過Excel處理的效能就顯得差了一點,最有效率的方式,當然是透過SQL指令直接調整。
說真的,我的SQL功力很差,指令都是朋友指導的,提供給大家做參考而已囉!
在固定第九碼之後插入一個0
但是敬告各位同業,這雖然很有效率,但指令一下,資料就改了,所以要謹慎小心使用。
但如果資料筆數過多時,透過Excel處理的效能就顯得差了一點,最有效率的方式,當然是透過SQL指令直接調整。
說真的,我的SQL功力很差,指令都是朋友指導的,提供給大家做參考而已囉!
在固定第九碼之後插入一個0
update pmn_file set
pmn01=substr(pmn01,1,9)||'0'||substr(pmn01,10,12)
where length(pmn01)=13
在第一碼前塞入一個A
update cpf_file set
cpf30='A'|substr(cpf30,1,length(cpf30))
但是敬告各位同業,這雖然很有效率,但指令一下,資料就改了,所以要謹慎小心使用。
2012年6月5日 星期二
TIPTOP程式開發--擷取Construct特定欄位值
我們都知道在TIPTOP中可以有兩種資料輸入控制模式,一種是在查詢狀態下輸入值(CONSTRUCT),另一種是在新增或修改狀態下輸入值(INPUT/INPUT ARRAY)。
以INPUT或INPUT ARRAY的模式下,一個欄位是以一個變數做為儲存的依據,但是CONSTRUCT的模式則不然。
CONSTRUCT最大的優點是在於輸入完畢後,可將所輸入的值,與該欄位組合成為SQL字串,例如下圖中在訂單欄位(oea01)輸入「002-07060003」做為查詢條件,在程式中會存在tm.wc字串中「oea01='002-07060003'」。
但有時候,我們也需要擷取這些在CONSTRUCT模式的欄位裡輸入的值,進行一些判斷處理,這時候照下面紅色標示的語法,就可以順利取得我們想要的值。
方式一:
方式二:
以INPUT或INPUT ARRAY的模式下,一個欄位是以一個變數做為儲存的依據,但是CONSTRUCT的模式則不然。
CONSTRUCT最大的優點是在於輸入完畢後,可將所輸入的值,與該欄位組合成為SQL字串,例如下圖中在訂單欄位(oea01)輸入「002-07060003」做為查詢條件,在程式中會存在tm.wc字串中「oea01='002-07060003'」。
但有時候,我們也需要擷取這些在CONSTRUCT模式的欄位裡輸入的值,進行一些判斷處理,這時候照下面紅色標示的語法,就可以順利取得我們想要的值。
方式一:
CONSTRUCT BY NAME tm.wc ON oea01
ON ACTION locale
#CALL cl_dynamic_locale()
LET g_action_choice = "locale"
EXIT CONSTRUCT
AFTER FIELD oea01
LET l_oea01 = GET_FLDBUF(oea01)
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE CONSTRUCT
ON ACTION exit
LET INT_FLAG = 1
EXIT CONSTRUCT
END CONSTRUCT
方式二:
CONSTRUCT BY NAME tm.wc ON oea01
ON ACTION locale
#CALL cl_dynamic_locale()
LET g_action_choice = "locale"
EXIT CONSTRUCT
AFTER FIELD oea01
CALL FGL_DIALOG_GETBUFFER() RETURNING l_oea01
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE CONSTRUCT
ON ACTION exit
LET INT_FLAG = 1
EXIT CONSTRUCT
END CONSTRUCT
2012年4月19日 星期四
TIPTOP系統工具(p_tool)
當系統運作到一個階段時,整個資料庫規劃應該很完整,各營運中心之間設定同步資料表應該也是很正常的事,但一旦營運中心越來越多時,就很難記得是誰同步誰?
為此透過鼎新所提供的TIPTOP系統工具(p_tool)中,就可以把選取營運中心所設置的同步資料表列出來,讓管理更簡單。
1. 列出同義字表格:可以依所選的營運中心,列出所有Synonym表格對照表。
2. 列出被鎖住的表格:這邊選取後,可以把所有現在這個營運中心被Lock的Table列出,功能其實跟p_zta中的功能一樣。使用前題是,使用者必需具有DBA user權限,否則會出現下圖:
3. 列出使用者連線資訊:可以查出所有營運中心裡所有使用者的連線資訊,如下圖:
4. 重新整理使用者的表格及索引:這個部份會針對所有的Table及Index重新整理,除非必要,否則不建議執行此選項,因為要跑很久,會影響系統效能。
為此透過鼎新所提供的TIPTOP系統工具(p_tool)中,就可以把選取營運中心所設置的同步資料表列出來,讓管理更簡單。
1. 列出同義字表格:可以依所選的營運中心,列出所有Synonym表格對照表。
4. 重新整理使用者的表格及索引:這個部份會針對所有的Table及Index重新整理,除非必要,否則不建議執行此選項,因為要跑很久,會影響系統效能。
2012年4月8日 星期日
TIPTOP-系統資料重整作業(p_mis)
最近在版更IFRS時,發現有太多程式有新增Action,但又沒辦法一支一支去跑p_base_act,花太多時間,於是乎就想起系統有一支p_mis可以用。
因為沒什麼特殊情況,就很少會需要執行這支作業,所以鼎新也不會特別說明。
使用上有幾個重點:
1. 會把所有程式可執行的權限,全部加到執行這支程式的user群組裡。所以除非是tiptop user或是admin user,否則就會造成權限異常。
2. 產生4ad,4tm,4sm檔案,如果只是一般user沒有檔案讀寫權限的話,就會無法順利產生。
3. p_help資料,因為程式支數眾多,所以執行會需要很久的時間,p_zr的資料也是。
另外,很多人在寫程式時,常會發現明明TIPTOP上面就有很多function跟副程式可以使用,但卻不知該怎麼下手,得一支一支查才知道。
現在可以透過這邊的重新抓取lib/sub涵式說明(p_findfunc),就可以把所有lib/sub的資料寫入p_findrunc裡,然後直接透過QBE方式查到你所想要的功能了。
因為沒什麼特殊情況,就很少會需要執行這支作業,所以鼎新也不會特別說明。
1. 會把所有程式可執行的權限,全部加到執行這支程式的user群組裡。所以除非是tiptop user或是admin user,否則就會造成權限異常。
2. 產生4ad,4tm,4sm檔案,如果只是一般user沒有檔案讀寫權限的話,就會無法順利產生。
3. p_help資料,因為程式支數眾多,所以執行會需要很久的時間,p_zr的資料也是。
另外,很多人在寫程式時,常會發現明明TIPTOP上面就有很多function跟副程式可以使用,但卻不知該怎麼下手,得一支一支查才知道。
現在可以透過這邊的重新抓取lib/sub涵式說明(p_findfunc),就可以把所有lib/sub的資料寫入p_findrunc裡,然後直接透過QBE方式查到你所想要的功能了。
執行後的資料,可以在p_findfunc作業裡查得到,以下範例框起來的是我自己寫的副程式。
2011年12月7日 星期三
TIPTOP效能異常(續)
繼昨天提到系統效能異常可由sqlplus裡的指令查到異常PID,進而砍掉異常Session。
今天再補充說明,當查到異常SID時,
還可以透過SID去查出目前正在執行的SQL Command是什麼?
透過下列指令
SELECT sql_text FROM v$sqltext a WHERE a.hash_value = (SELECT sql_hash_value FROM v$session b WHERE b.SID = '&sid') ORDER BY piece ASC;
再輸入查到的SID,就可以得到類似下圖的SQL Command
可得知,那個異常Session是執行哪個SQL Command 導致異常。
如此一來就可以查到可能是哪個異常資料庫存取指令造成系統運作。
2011年12月6日 星期二
TIPTOP ERP系統效能異常
有時會因為程式開發異常,或是系統大量運算導致系統效能異常,
此時就可以透過下列步驟進行查明問題所在
Step 2. 再登入sqlplus '/as sysda'
此時就可以透過下列步驟進行查明問題所在
Step1. 透過top查出異常的Oracle Session
使用tiptop帳號登入,在命令列上輸入top
此時可以看到下圖,一般來說大概都是會是排在第一、第二行的Session佔用大量的系統資源。
以此例來說,就可以初判是32522這個PID可能有異常。
Step 2. 再登入sqlplus '/as sysda'
執行下列兩個SQL Command:
SELECT SID FROM V$SESSION WHERE PADDR IN ( SELECT ADDR FROM V$PROCESS WHERE SPID=&PID);
SELECT SID FROM V$SESSION WHERE PADDR IN ( SELECT ADDR FROM V$PROCESS WHERE SPID=&PID);
執行後,會要你輸入一個PID
↑此處執行完畢後會得到一個SID
再執行
select osuser,process from v$session where sid=&sid;
↑再把剛才取得的SID輸入 (如下圖)
這個時候就可以得到一個USER 的ID跟PROCESS No.→一般還是稱為PID。
Step 3. 透過「線上使用情況(p_process)」程式就可以看到這個PID在執行什麼程式
Step 4. Kill Session
如果可以確定這個Session是異常的,那就可以點選資料後,按右方的殺程序把Session刪掉!
或是回到命令列,執行kill -9 PID一樣可以刪掉這個程序。
但要切記,一但把程序刪掉後,該user所執行的程式就會被中斷,
所以在刪除之前,必須再三確認那個Session是不是真的有異常。
不過我最近常遇到加班單還原(apyt103)導致系統效能異常,
所以我只要看到apyt103,一般都是殺無赦
提供參考囉!!
訂閱:
文章 (Atom)











































