2011年8月30日 星期二

Oracle ERP R12. - 設定Viewe Output可以輸出至Excel

Step1. System administrator => Install => Viewer Options

Step2. 一組設定
File Format : Text
Mime Type : application/vnd.ms-excel
Description : Microsoft Excel

這樣之後,只要是Text格式的檔案,就可以調用Excel來打開

Oracle ERP R12. - 解決View Output 中文亂碼

一般公司會將編碼設定為UTF8,但是User端的編碼則則因區域性而不同,故造成亂碼.
若有遇到此狀況的話,可試著調整以下二個profile

ICX: Client IANA Encoding
FND: NATIVE CLIENT ENCODING

Oracle ERP R12. - Remove "Unclose" from Discrete Iob Tools.

部分公司For 管理上之需求,可能會限制財會人員在對工單進行Close後,不能再Unclose,其設定如下:

Step1. find Function name: WIP_WIPDJMDF_CLOSE

Step2. Change Parameters -> UNCLOSE="N"   <==== 該Function本身即提供參數控制

Step3. Save

2011年8月29日 星期一

Oracle PL/SQL : ASCIISTR 檢測資料有無亂碼


今天早上在一位先進(昭佑.天翔)的網站發現了一個很實用的DB Function : ASCIISTR
可以用來偵測資料庫內的資料有無存在亂碼的問題.
故就上網找一下其原文說明:

ASCIISTR takes as its argument a string in any character set and returns an ASCII string in the database character set. The value returned contains only characters that appear in SQL, plus the forward slash (/).
Syntax
>─ASCIISTR──('string')──><
SQL Example
The following example returns the ASCII string equivalent of the text string "flauwekul":
SELECT ASCIISTR('flauwekul') FROM DUAL;

ASCIISTR('FLAUW
---------------
\6<65\756<\6700


========================================
***以下是昭佑.天翔前輩的文章內容***
(該先進的網站有很多我們可以學習的地方,各位同好可將其加入最愛~~)

Oracle PL/SQL ,
要檢查資料有無亂碼,
可以透過 ASCIISTR 這個函數,
而在 Big5 DB , 亂碼 Ascii \FF1F,
範例 :
-- 建立 Temp Table

CREATE TABLE TOM1(

  AA VARCHAR2(100)

);

 

--
新增測試資料

INSERT INTO TOM1 VALUES( '
' );

INSERT INTO TOM1 VALUES( '
國囯Å' );

COMMIT;

 

--
查詢資料, 與其對應的 Ascii

/*
結果顯示

AA          ASCIISTR(AA)

----------  ------------------------

          \570B

國??       \570B\FF1F\FF1F

*/

SELECT AA, ASCIISTR(AA)

  FROM TOM1;

 

--
查詢有亂碼的資料

/*
結果顯示

AA          ASCIISTR(AA)

----------  ------------------------

國??       \570B\FF1F\FF1F

*/

SELECT AA

  FROM TOM1

 WHERE ASCIISTR(AA) LIKE '%\FF1F%';

 

--
刪除 Temp Table

DROP TABLE TOM1;

Oracle ERP R12. - Debug SQL Statement

因為有時候會需要知道Oracle Standard Form其背後運作的方式,會啟動sql trace來收集log並進行解析.
而Oracle還有另一個地方也會紀錄log在log table (但資訊可能沒有sql trace來的完整,不過也可以參考看看),做法如下:

Step 1. 先設定Profile
FND: Debug Log Enabled : Yes  <===== 注意:平當應該是No的狀態,不然會影响performance
FND: Debug Log Level : Statement  <====== Debug等級,要trace sql statement
FND: Debug Log Module : %  <=======Trace 的模組

Step 2. 紀錄目前的log sequence number.
select max(log_sequence) from fnd_log_messages ==> 先記下來,假設是100

Step3. 請重做你要Trace的動作 ==> 此時就會開始log,所以log sequence就會持續增加

Step4. 紀錄最後的log sequence number.
select max(log_sequence) from fnd_log_messages ==> 記下來,假設是150

Step5.  收集上述Step2 & Step4 (100~150)的log資料
SELECT LOG.module, LOG.message_text message
FROM FND_LOG_MESSAGES LOG
WHERE LOG.log_sequence BETWEEN 100 AND 150
ORDER BY LOG.LOG_SEQUENCE
==> 該內容就是一般Oracle Support可能會要求收集的資料,所以我們應該也可以參考看看該做法來trace sql statement.


2011年8月24日 星期三

Oracle ERP R12. –Close Discrete Jobs failure (past close date)

一般公司月底在進行工單關結時,Actual Close Date & Submission Date可能會設成月底日期23:59:59,但若有工單需要重新unclose進行調整後再Close,就會造成failed Close” Close Discrete Jobs”log就會看到以下類似訊息:
+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+
WIP DISCRETE JOB CLOSE
GROUP ID 6002
Number of jobs failed because release date before close date : 0
Number of jobs failed due to Pending Clocks : 0
Cancelling Move Orders if any exists
return status S
Pending Txns Check
Number of jobs failed due to Pending txns : 0
Inside Procedure Close Date
Close date precedes the txn date for job 工單號
Number of failed jobs because of past close date : 1
Delivery Quantity Check
Number of jobs failed in Delivered Quantity : 0
lot validate
delete Existing reservations
Current accounting Period ID : 3001
Exception has occured
+---------------------------------------------------------------------------+
End of log messages from FND_FILE
+---------------------------------------------------------------------------+
….
主要原因為Oracle在工單關結時會去WIP_TRANSACTION檢查該工單最後一筆交易日,並限制目前的交易不得早於或等於最後一筆的交易日時間.
如一開始提到的,有些公司會設在月底日期的23:59:59,故工單關結人員不能再輸入月底日期的23:59:59,而必需大於這時間,但就要跨月了.
其可由DATA FIX的方式來解決.做法如下:
1.       找出該工單的WIP_ENTITY_ID
2.       找出WIP_TRANSACTION內該WIP_ENTITY_ID所有交易資料,並找出最大日期的資料(應該就是月底日期23:59:59)
3.       將該資料TRANSACTION_DATE 的時間稍微往前調整.(例如23:59:00)
4.       調整完後,就可重新做Close動作,但其日期必需較上步驟的時間來的晚即可.

2011年8月21日 星期日

Oracle ERP R12. - Enable Personalize link on web pages

因為Oracle ERP R12. 有很多Standard Function都移植到Web pages上去執行,故也有personalize的需求,以下profile就是開啟該功能選項之設定:

Personalize Self-Service Defn ==> 請設定為Yes
Disable Self-Service Personal ==> 請設定為No


2011年8月19日 星期五

開心農場-20110820

嗚~~~ 臭貓咪, 一顆大大的玉米,就這樣被玩死了,才剛要收成的說 ~><~ 要老婆的朋友賠啦~~

小白菜長的不錯,不過貓咪一直在找麻煩~="=~...

開心農場-20110819

農場現況

 玉米長大中

太早收成? 還是營養不良="=! ???

2011年8月15日 星期一

Oracle ERP R12. – Ensure that no pending interface data to change status to "Completion No-Charge" with Personalization.

有鑑於許多公司因為製造流程及特性之需求,standard function並無法滿足user,故其IT人員常會自行客制工單模組等功能,並透過Oracle 所提供之API / Interface來將帳流補回Oracle ERP系統內,但常遇到interface裡的資料尚未處理,而就有user誤將該工單狀態予以變更為Completion No-Charge,這將導至interface執行的失敗.相信許多先進,都有其一套解決方式.而作者我就以透過Personalization的方法來避免user誤將工單狀態變更為Completion No-Charge的出發點來跟各位分享.
構想說明:
1.       建立一DB Function <XX_WIP_CHK_STATUS> : 用來檢查是否有Pending interface資料
2.       Personalization來呼叫上述function,以判斷是否要將Status欄位限制為read only .

Step 1. Create function : XXX_WIP_CHK_STATUS
CREATE OR REPLACE FUNCTION XXX_WIP_CHK_STATUS(I_ORGANIZATION_ID IN NUMBER,
                                              I_WIP_ENTITY_ID   IN NUMBER) RETURN VARCHAR2
IS
  /*
  When     Who     What
  ==================================
  20110815 WenShen Call by WIPDJMDF - Personalization
  */
  T_CNT NUMBER;                                          
  T_CRLF VARCHAR2(10) := CHR(10)||CHR(13); 
  T_RESULT VARCHAR2(100) := 'OK';
BEGIN
  SELECT COUNT(*)
    INTO T_CNT
    FROM WIP_MOVE_TXN_INTERFACE WMTI
   WHERE WMTI.ORGANIZATION_ID = I_ORGANIZATION_ID
     AND WMTI.WIP_ENTITY_ID = I_WIP_ENTITY_ID;
  --
  IF T_CNT = 0 THEN
    SELECT COUNT(*)
      INTO T_CNT
      FROM MTL_TRANSACTIONS_INTERFACE MTI
     WHERE MTI.ORGANIZATION_ID = I_ORGANIZATION_ID
       AND MTI.TRANSACTION_SOURCE_ID = I_WIP_ENTITY_ID;
    --
    IF T_CNT != 0 THEN
      T_RESULT := '<XXX_WIP_CHK_STATUS>'||T_CRLF||
                                    'Some data in interface (MTL_TRANSACTIONS_INTERFACE) !';     
    END IF;
  ELSE
    T_RESULT := '<XXX_WIP_CHK_STATUS>'||T_CRLF||
                 'Some data in interface (WIP_MOVE_TXN_INTERFACE) !';
  END IF;
  --
  RETURN T_RESULT;
END HPX_WIP_CHK_STATUS;

Step 2. 建立Personalization : Disable Status if some data in interface - W_JOBS.M_STATUS_TYPE_DISP
Step 2.1. 
Step 2.2. 
 Step 2.3. 該部分可省略.

Step 3.  建立Personalization : Disable Status if some data in interface - W_JOBS.STATUS_TYPE_DISP
Step 3.1. ~ 3.3. Step 2.1. ~ 2.3.