1.起因,用dataload 速度無敵慢,造成開帳困難,且常會跳格要隨時盯著~
2.下面寫不出ar interface 的code
3.我沒空花太多時間研究interface ,所以偷懶針對我要的資料作自己的dataload .

 

複製ar trx form ,
Form 畫面新增ㄧ個 control block (LOAD_GB ).裡面擺2個text_item OU LOAD_GB.ORG) ,本幣(LOAD_GB.curr) 一個button(Import )
輸入OU及本幣後即可執行import

declare
--欄位請參考附件
  cursor cur is select * from GB_AR_INTERFACE_TEST WHERE ORG=OAD_GB.ORG and nvl(imp,'N') ='N' ;
begin
--到單頭
go_block('TGW_HEADER');
--  clear_block(no_validate);
--開始循環導入資料游標
FOR REC IN CUR  LOOP
   --  提高訊息屏蔽,避免太多提示警告訊息造成無法連續導入.
  :system.message_level:='25';
begin
--新增一筆單頭
   last_record;
   create_record;
exception
   when others then null;
end;

-- next_record;
   --insert_record;
  --1.BS_BATCH_SOURCE_NAME_MIR
  --塞入batch source ,此欄位有問提,不管怎麼塞怎麼先後執行驗證都無法改變,還是會變預設值
  go_item('TGW_HEADER.BS_BATCH_SOURCE_NAME_MIR');
--執行該item 的 initial
  arxtwmai_folder.bs_batch_source_name('WHEN-NEW-ITEM-INSTANCE');
  SYNCHRONIZE;
  :TGW_HEADER.BS_BATCH_SOURCE_NAME_MIR:=REC.SOURCE;
  execute_trigger('WHEN-VALIDATE-ITEM');
  SYNCHRONIZE;
  
--交易日期
  --2 TRX_DATE_MIR
           SYNCHRONIZE;
  go_item('TGW_HEADER.TRX_DATE_MIR');   

--執行該item 的 initial
   arxtwmai_folder.trx_date('WHEN-NEW-ITEM-INSTANCE'); /* Bug-4162777 */
  execute_trigger('WHEN-VALIDATE-ITEM');   
  :TGW_HEADER.TRX_DATE_MIR:=REC.AR_DATE;
  :parameter.wnfi_override := 'Y';
     
     SYNCHRONIZE;
  --4.CTT_CLASS_MIR

  --CLASS ,我方因只導入invoice ,所以寫死  
  go_item('TGW_HEADER.CTT_CLASS_MIR');
  :TGW_HEADER.CTT_CLASS_MIR:='INV';
  execute_trigger('WHEN-LIST-CHANGED');  
  execute_trigger('WHEN-VALIDATE-ITEM');  
   nexT_item;
     SYNCHRONIZE;

--交易類型
  --6 CTT_TYPE_NAME_MIR
  go_item('TGW_HEADER.CTT_TYPE_NAME_MIR');   
   execute_trigger('WHEN-NEW-ITEM-INSTANCE');
  :TGW_HEADER.CTT_TYPE_NAME_MIR:=REC.TYPE;
  execute_trigger('WHEN-VALIDATE-ITEM');  
   SYNCHRONIZE;


---reference  
  --7  CT_REFERENCE_MIR
  
  go_item('TGW_HEADER.CT_REFERENCE_MIR');   
  :TGW_HEADER.CT_REFERENCE_MIR:=REC.AR_REFERENCE;
  execute_trigger('WHEN-VALIDATE-ITEM');
       SYNCHRONIZE;

--ship to
  --8 RAC_SHIP_TO_CUSTOMER_NUM_MIR
  go_item('TGW_HEADER.RAC_SHIP_TO_CUSTOMER_NUM_MIR');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');
  :TGW_HEADER.RAC_SHIP_TO_CUSTOMER_NUM_MIR:=REC.SHIP_TO;  
  execute_trigger('WHEN-VALIDATE-ITEM');
  next_item;

-- ship to location
  --9 SU_SHIP_TO_LOCATION_MIR
     SYNCHRONIZE;
  go_item('TGW_HEADER.SU_SHIP_TO_LOCATION_MIR');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');
  :TGW_HEADER.SU_SHIP_TO_LOCATION_MIR:=REC.LOACTION;  
  execute_trigger('WHEN-VALIDATE-ITEM');
  nexT_item;
   SYNCHRONIZE;     
  
  --11 SALESPERSON
  go_item('TGW_HEADER.RAS_PRIMARY_SALESREP_NAME_MIR');  
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');  
  :TGW_HEADER.RAS_PRIMARY_SALESREP_NAME_MIR:=REC.SALESPERSON;   
  execute_trigger('WHEN-VALIDATE-ITEM');     
  arxtwmai_folder.ras_primary_salesrep_name('POST-CHANGE');
     SYNCHRONIZE;

--PS幣別,由於不同於本幣會需要輸入轉換匯率,而匯率視窗控制一直有問題,所以改直接寫入匯率輸入視窗後的 post 結果直接到,rate date/type/rate 中,而不再呼叫rate 匯率視窗欄位出來填寫
  --5 INVOICE_CURRENCY_CODE_MIR   
  go_item('TGW_HEADER.INVOICE_CURRENCY_CODE_MIR');   
   execute_trigger('WHEN-NEW-ITEM-INSTANCE');
  :TGW_HEADER.INVOICE_CURRENCY_CODE_MIR:=REC.CURRENCY;
  execute_trigger('WHEN-VALIDATE-ITEM');  
set_item_property('TGW_HEADER.INVOICE_CURRENCY_CODE_MIR',ITEM_IS_VALID,property_TRUE);
  execute_trigger('KEY-NEXT-ITEM');
  NEXT_ITEM;
  SYNCHRONIZE;
--  nexT_item;  

--不同於本幣才需要導入匯率
  IF REC.CURRENCY <>OAD_GB.curr THEN
   -- NEXT_ITEM;
--PS幣別,由於不同於本幣會需要輸入轉換匯率,而匯率視窗控制一直有問題,所以改直接寫入匯率輸入視窗後的 post 結果直接到,rate date/type/rate 中,而不再呼叫rate 匯率視窗欄位出來填寫
   :TGW_HEADER.EXCHANGE_RATE:= REC.RATE;
   :TGW_HEADER.EXCHANGE_RATE_TYPE:= REC.RATA_TYPE;
   :TGW_HEADER.EXCHANGE_DATE:= REC.RATA_DATE;
  /* -- show_window('ARCOMMON_EXCHANGE_RATE');
    go_item('ARCOMMON_EXCHANGE_RATE.RATE_DATE');
    execute_trigger('WHEN-NEW-ITEM-INSTANCE');
    :ARCOMMON_EXCHANGE_RATE.RATE_DATE := REC.RATA_DATE;
    execute_trigger('WHEN-VALIDATE-ITEM');
   go_item('ARCOMMON_EXCHANGE_RATE.RATE_TYPE_DSP');
   execute_trigger('WHEN-NEW-ITEM-INSTANCE');
    :ARCOMMON_EXCHANGE_RATE.RATE_TYPE_DSP := REC.RATA_TYPE;
  --  arp_exchange_rate.pg_allow_updates:=true;
    execute_trigger('WHEN-VALIDATE-ITEM');
    :ARCOMMON_EXCHANGE_RATE.RATE_DSP := REC.RATE;
   execute_trigger('WHEN-VALIDATE-ITEM');
    go_item('ARCOMMON_EXCHANGE_RATE.okay_button');
    execute_trigger('WHEN-BUTTON-PRESSED');
    */
  END IF;
  SYNCHRONIZE;

--payment term
   --10 RAT_TERM_NAME_MIR
  go_item('TGW_HEADER.RAT_TERM_NAME_MIR');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');
   --執行該item 的 initial
  arxtwmai_folder.tgw_header('WHEN-NEW-ITEM-INSTANCE');
  --修改該term lov 為全部,避免被過濾掉的term無法導入
   set_lov_property('ARXTWTGW_TERMS',GROUP_NAME,'ARXTWTGW_TERMS_CB');
  :TGW_HEADER.RAT_TERM_NAME_MIR:=REC.PAYMENT;   
  execute_trigger('WHEN-VALIDATE-ITEM');
  
--GL Date ,如 太早填寫,會再某一欄位填入十又被重新蓋掉,因此放到最後填寫
--3 GD_GL_DATE_MIR

  go_item('TGW_HEADER.GD_GL_DATE_MIR');   
   execute_trigger('WHEN-NEW-ITEM-INSTANCE');  
  :TGW_HEADER.GD_GL_DATE_MIR:=REC.GL_DATE;
  execute_trigger('WHEN-VALIDATE-ITEM');   

--呼叫line buttom 執行觸發
   arxtwmai_folder_buttons.header_line_items('WHEN-BUTTON-PRESSED');

  SYNCHRONIZE;
--開帳只處理一筆,所以強制寫入 1
  go_item('TLIN_LINES.LINE_NUMBER');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');
   :TLIN_LINES.LINE_NUMBER := 1;
   execute_trigger('WHEN-VALIDATE-ITEM');   
   execute_trigger('KEY-NEXT-ITEM');   
   
--line 說明
  go_item('TLIN_LINES.description');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');
   :TLIN_LINES.description := rec.AR_DESC;
   execute_trigger('WHEN-VALIDATE-ITEM');  

--line 數量
  go_item('TLIN_LINES.quantity');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');   
   :TLIN_LINES.quantity := rec.QTY;
   execute_trigger('WHEN-VALIDATE-ITEM');

--line 單價
go_item('TLIN_LINES.unit_selling_price');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');      
   :TLIN_LINES.unit_selling_price := rec.PRICE;
   execute_trigger('WHEN-VALIDATE-ITEM');
:system.message_level:='20';

--存檔後繼續
   commit;
  SYNCHRONIZE;

--呼叫freight button執行處發
  arxtwmai_folder_buttons.header_freight('WHEN-BUTTON-PRESSED');
  go_block('TFRT_HEADER');
  清除並執行查詢detail 後才可填寫,預設是未查詢狀態
  clear_block(no_validate);
  execute_query;
  arxtwfrt_header.tfrt_header('WHEN-NEW-RECORD-INSTANCE');
  SYNCHRONIZE;   

--填寫 way bill
   :TFRT_HEADER.WAYBILL_NUMBER := REC.SHIPPING_REF;
    :system.message_level:='20';
  commit;

--回到單頭
  go_block('TGW_HEADER');
  SYNCHRONIZE;   

--執行distribution button觸發
  arxtwmai_folder_buttons.header_accounting('WHEN-BUTTON-PRESSED');
  
  GO_BLOCK('TACC_ACC_ASSGN');
  清除並執行查詢detail 後才可填寫,預設是未查詢狀態
  clear_block(no_validate);
  execute_query;
  SYNCHRONIZE;
  FIRST_RECORD;
--由於我方只需修改 RECEIVBLE 與REVENUE ,分別為第一筆及第三筆,所以沒有多加 class 判斷填寫
  go_item('TACC_ACC_ASSGN.ACCOUNTING_FLEX');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE') ;   
--RECEIVBLE
  :TACC_ACC_ASSGN.ACCOUNTING_FLEX := REC.RECEIVBLE_ACC;
  execute_trigger('WHEN-VALIDATE-ITEM');  
--第二筆
  NEXT_RECORD;
--第三筆
  NEXT_RECORD;
  go_item('TACC_ACC_ASSGN.ACCOUNTING_FLEX');   
  execute_trigger('WHEN-NEW-ITEM-INSTANCE');     
--REVENUE
  :TACC_ACC_ASSGN.ACCOUNTING_FLEX := REC.REVENUE;
  execute_trigger('WHEN-VALIDATE-ITEM');  
  :system.message_level:='25';
   commit;

--回單頭   
    GO_BLOCK('TGW_HEADER');   
      :system.message_level:='25';
     SYNCHRONIZE;  
--回填 trx num ,doc number 回導入table
      UPDATE GB_AR_INTERFACE_TEST
         SET IMP ='Y',TRX_NUMBER=:TGW_HEADER.TRX_NUMBER_MIR,
             DOC_NUM= :TGW_HEADER.DOC_SEQUENCE_VALUE_MIR            
   WHERE seq =rec.seq;
--存檔
     commit;
       :system.message_level:='25';
END LOOP;
end;

arrow
arrow
    全站熱搜

    Nolem 發表在 痞客邦 留言(0) 人氣()