2009年7月7日 星期二

關於Form中各種commit的說明

1. Commit針對Form操作和代碼進行Commit,若Form上的異動和代碼中的資料異動有衝突,以介面上的為主。

2. Commit_form
針對Form上的資料異動做Commit,對於代碼中的類似update、insert語句也進行提交,如果Form上的資料異動和代碼中的異動有衝突,以介面上的為主。

3. do_key(‘commit_form’)
首先會觸發Form下的KEY-COMMIT這個Trigger。若沒有KEY-COMMIT這個Trigger,則直接提交Form和代碼資料。如果Form上的資料異動和代碼中的資料異動有衝突,以介面上的為主。

4. forms_ddl(‘commit’)
只針對代碼中的update、insert、delete等語句進行Commit,Form上的異動不會提交。資料異動有衝突時,依據Trigger先後順序覆蓋,例如Post-Forms-Commit中的UPDATE就會覆蓋掉介面。

2009年6月16日 星期二

[SSRS] 利用Reporting Service開發Oracle ERP 報表的注意事項

1.若是與Sharepoint整合,Server端的Oracle Client安裝目錄記得給予IIS user讀取權限,例如ASP.NET帳戶。 否則會一直告訴你Oracle Client版本要8.1.7以上。

image

2.若需要用到含OU的View(含有USERENV('CLIENT_INFO')),登入檔的NLS_LANG記得把TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5改掉,一般我都習慣改成 AMERICAN_AMERICA.ZHT16BIG5。

image

Report裡需要Calll DBMS_APPLICATION_INFO.SET_CLIENT_INFO 這個Procedure,個人習慣把他放在DataSet裡執行,因為也找不到其他方法,除非放到SSIS執行,那又很麻煩。

例如我們若需要對OE_ORDER_HEADERS_V這的View做查詢,則我們第一個DataSet放入一個Procedure,執行DBMS_APPLICATION_INFO.SET_CLIENT_INFO,第二個DataSet再放入我們要的SQL,操作如下:

a.使用單一交易要勾選

image

b.新增一個DataSet,執行DBMS_APPLICATION_INFO.SET_CLIENT_INFO

image

c.參數預設值記得設定

image

d.新增報表所需要的資料SQL

image

e.設計報表

image

f.執行測試預覽,成功。

image

2009年6月4日 星期四

[Cost] MTA - ACCOUNTING_LINE_TYPE

ACCOUNTING_LINE_TYPE

1 Inv valuation
2 Account
3 Overhead absorption
4 Resource absorption
5 Receiving Inspection
6 Purchase price variance or rate variance
7 WIP valuation
8 WIP variance
9 Inter-org payables
10 Inter-org receivables
11 Inter-org transfer credit
12 Inter-org freight charge
13 Average cost variance
14 Intransit Inventory
15 Encumbrance Reversal
99 Unknown

範例

SELECT MTT.TRANSACTION_TYPE_NAME,
       MMT.TRANSACTION_DATE,
       GCC.SEGMENT1||','||GCC.SEGMENT2||','||GCC.SEGMENT3||','||GCC.SEGMENT4 ACCT,
       ROUND(SUM(NVL(MTA.BASE_TRANSACTION_VALUE,0)), 1) NET_ACTIVITY,
       ROUND(SUM(DECODE( NVL(MTA.BASE_TRANSACTION_VALUE,0) /
                         ABS(DECODE(
                                    NVL(MTA.BASE_TRANSACTION_VALUE,0),
                                    0, 1, NVL( MTA.BASE_TRANSACTION_VALUE,0  )  )), 
                  1, NVL(MTA.BASE_TRANSACTION_VALUE,0), 0 )  ), 1) SUM_DEBITS,
       ROUND(SUM(DECODE( NVL(MTA.BASE_TRANSACTION_VALUE,0) /
                         ABS(DECODE(
                                     NVL(MTA.BASE_TRANSACTION_VALUE,0),
                                     0, 1, NVL( MTA.BASE_TRANSACTION_VALUE,0  )  )), 
                 -1, NVL(ABS(MTA.BASE_TRANSACTION_VALUE),0), 0 )  ), 1) SUM_CREDITS
  FROM MTL_MATERIAL_TRANSACTIONS MMT,    
       --MTL_SYSTEM_ITEMS MSI,
       GL_CODE_COMBINATIONS GCC,
       MTL_TRANSACTION_ACCOUNTS MTA,
       MTL_TRANSACTION_TYPES MTT,
       ORG_GL_BATCHES OGB
WHERE MTA.TRANSACTION_ID = MMT.TRANSACTION_ID
   AND MMT.TRANSACTION_TYPE_ID = MTT.TRANSACTION_TYPE_ID
   --AND    MTA.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
   --AND    MSI.ORGANIZATION_ID  =  MMT.ORGANIZATION_ID
   AND MTA.REFERENCE_ACCOUNT = GCC.CODE_COMBINATION_ID
   AND MMT.ORGANIZATION_ID = MTA.ORGANIZATION_ID
   AND MTA.ORGANIZATION_ID = :P_ORG_ID
   AND MTA.ACCOUNTING_LINE_TYPE <> 15
   AND MTA.TRANSACTION_DATE BETWEEN ...
   AND OGB.GL_BATCH_ID (+) = MTA.GL_BATCH_ID
GROUP BY MTT.TRANSACTION_TYPE_NAME,
       MMT.TRANSACTION_DATE,
       GCC.SEGMENT1||','||GCC.SEGMENT2||','||GCC.SEGMENT3||','||GCC.SEGMENT4

2009年5月23日 星期六

[BOM] 正展BOM

 

在做一些成本分析時,常常會對BOM做正逆展開功能,所以就把他記錄下來,範例:
PROCEDURE xxx (IN_ORGANIZATION_ID   IN   NUMBER,
               IN_ITEM_ID           IN   NUMBER,
               IN_LEVELS_TO_EXPLODE IN   NUMBER) IS

   V_GROUP_ID               NUMBER;
   V_ERROR_MESSAGE          VARCHAR2(2000);
   V_ERROR_CODE             NUMBER;

BEGIN
   DELETE BOM_SMALL_EXPL_TEMP;

   SELECT BOM_EXPLOSION_TEMP_S.NEXTVAL
     INTO V_GROUP_ID
     FROM DUAL;
   -- 正展BOM
   BOMPXINQ.EXPLODER_USEREXIT(
           VERIFY_FLAG => 0,
           ORG_ID => IN_ORGANIZATION_ID,
           ORDER_BY => 1,
           GRP_ID => V_GROUP_ID,
           SESSION_ID => 0,
           LEVELS_TO_EXPLODE => IN_LEVELS_TO_EXPLODE, 
           BOM_OR_ENG => 1,                           
           IMPL_FLAG => 1,
           PLAN_FACTOR_FLAG => 2,
           EXPLODE_OPTION => 3,                       
           MODULE => 2,                               
           CST_TYPE_ID => 0,                          
           STD_COMP_FLAG => 2,
           EXPL_QTY => 1,                             
           ITEM_ID => IN_ITEM_ID,                     
           ALT_DESG => NULL,
           COMP_CODE => NULL,
           UNIT_NUMBER_FROM => NULL,
           UNIT_NUMBER_TO => NULL,
           REV_DATE => SYSDATE,
           SHOW_REV => 1,
           MATERIAL_CTRL => 2,
           LEAD_TIME => 2,
           ERR_MSG => V_ERROR_MESSAGE,
           ERROR_CODE => V_ERROR_CODE);
   IF V_ERROR_MESSAGE IS NOT NULL THEN
      RAISE...
   END IF;
   ...
EXCEPTION
   WHEN OTHERS THEN
        RAISE...
END;

OK,可以查詢結果看看
SELECT *
  FROM BOM_SMALL_EXPL_TEMP;