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;