GL接口导入
来源:互联网 发布:如何使用阿里云服务器 编辑:程序博客网 时间:2024/05/17 06:21
这周学习了一下GL导入总账方面的知识,今天下面做一个简短的总结。
GL导入主要是用来生成日记账及其分录。
1.导入接口表
GL总账接口表为 gl.gl_interface 关于其各个字段意义可以参考 《gl_interface的详细说明》。
需要补充说明:
gl_interface的attribute1到attribute10 对应gl_je_lines表的attribute1到attribute10字段
attribute11到attribute20 对应GL_CAPTURED_INFO表的attribute11到attribute20字段
在启用接口表的时候需要注意。
PROCEDURE import_data(p_batch_id IN NUMBER, x_return_status OUT NOCOPY VARCHAR2) IS --获取需要导入的数据 CURSOR get_data IS SELECT * FROM cux_forex_transfer_bills_v ftb WHERE ftb.attribute1 = p_batch_id -- 本次要导入的批 ORDER BY ftb.forex_bill_num; l_request_id NUMBER; l_conc_program_id NUMBER; l_prog_appl_id NUMBER; l_user_id NUMBER; l_login_id NUMBER; l_count NUMBER; l_sysdate DATE; l_batch_name VARCHAR2(100); l_je_name VARCHAR2(100); l_je_source_name VARCHAR2(100); l_je_category_name VARCHAR2(100); l_period_name VARCHAR2(100); l_ccid_to NUMBER; -- 转入银行账户的现金账户 l_ccid_fm NUMBER; -- 转出银行账户的现金账户 l_ledger_id NUMBER; l_gl_interface_rec gl_interface%ROWTYPE; l_clear gl_interface%ROWTYPE; l_bill_num VARCHAR2(1000); l_je_desc VARCHAR2(1000); BEGIN -- init l_request_id := fnd_global.conc_request_id; l_conc_program_id := fnd_global.conc_program_id; l_prog_appl_id := fnd_global.prog_appl_id; l_user_id := fnd_global.user_id; l_login_id := fnd_global.login_id; l_count := 0; l_sysdate := SYSDATE; g_sob_id := fnd_profile.value('GL_SET_OF_BKS_ID'); BEGIN SELECT sob.chart_of_accounts_id INTO g_chart_of_accounts_id FROM gl_sets_of_books sob WHERE sob.set_of_books_id = g_sob_id; EXCEPTION WHEN OTHERS THEN g_chart_of_accounts_id := NULL; END; --批名 l_batch_name := cux_doc_sequences_utl.next_seq_number(p_doc_type => 'FOREX_TRANSFER_BILLS_BATCH' || g_sob_id, p_doc_prefix => l_sysdate || '购汇', p_seq_length => 3, p_pk1_value => l_sysdate || '购汇'); --日记账名 l_je_name := cux_doc_sequences_utl.next_seq_number(p_doc_type => 'FOREX_TRANSFER_BILLS_JE' || g_sob_id, p_doc_prefix => '', p_seq_length => '', p_pk1_value => ''); cux_conc_utl.log_msg('l_batch_name= ' || l_batch_name); cux_conc_utl.log_msg('l_je_name= ' || l_je_name); g_batch_name := l_batch_name; g_je_name := l_je_name; FOR r IN get_data LOOP SELECT l_bill_num || nvl2(l_bill_num, '&', NULL) || r.forex_bill_num INTO l_bill_num FROM dual; END LOOP; l_je_desc := l_bill_num; cux_conc_utl.log_msg('l_je_desc= ' || l_je_desc); -- 来源 BEGIN SELECT gs.user_je_source_name INTO l_je_source_name FROM gl_je_sources_vl gs WHERE gs.je_source_key = 'EXCHANGE'; EXCEPTION WHEN OTHERS THEN l_je_source_name := NULL; END; BEGIN SELECT gs.je_source_name INTO g_je_source_name FROM gl_je_sources_vl gs WHERE gs.je_source_key = 'EXCHANGE'; EXCEPTION WHEN OTHERS THEN g_je_source_name := NULL; END; -- 类别 BEGIN SELECT gjc.user_je_category_name INTO l_je_category_name FROM gl_je_categories_vl gjc WHERE gjc.je_category_key = 'EXCHANGE'; EXCEPTION WHEN OTHERS THEN l_je_category_name := NULL; END; cux_conc_utl.log_msg('l_je_source_name= ' || l_je_source_name); cux_conc_utl.log_msg('g_je_source_name= ' || g_je_source_name); cux_conc_utl.log_msg('l_je_category_name= ' || l_je_category_name); SELECT gl.gl_interface_control_s.nextval INTO g_group_id FROM dual; FOR rec_data IN get_data LOOP l_gl_interface_rec := l_clear; -- 日历 BEGIN SELECT gp.period_name INTO l_period_name FROM gl_periods_v gp WHERE gp.period_set_name = 'ZJG_CALENDAR' AND gp.adjustment_period_flag = 'N' AND rec_data.accounting_date BETWEEN gp.start_date AND gp.end_date; EXCEPTION WHEN OTHERS THEN l_period_name := NULL; END; -- 转入银行 中转科目 BEGIN SELECT cba.asset_code_combination_id INTO l_ccid_to FROM ce_bank_accounts cba WHERE cba.bank_account_id = get_transfer_account(rec_data.org_id, rec_data.transfer_in_currency_code, rec_data.transfer_out_currency_code); EXCEPTION WHEN OTHERS THEN l_ccid_to := NULL; END; -- 转出银行 BEGIN SELECT cba.asset_code_combination_id INTO l_ccid_fm FROM ce_bank_accounts cba WHERE cba.bank_account_name = rec_data.transfer_out_bank_account; EXCEPTION WHEN OTHERS THEN l_ccid_fm := NULL; END; BEGIN SELECT gl.ledger_id INTO l_ledger_id FROM gl_ledgers gl, gl_sets_of_books sob WHERE gl.name = sob.name AND sob.set_of_books_id = g_sob_id; EXCEPTION WHEN OTHERS THEN l_ledger_id := NULL; END; cux_conc_utl.log_msg('l_ledger_id= ' || l_ledger_id); --1. debit l_gl_interface_rec.status := 'NEW'; l_gl_interface_rec.set_of_books_id := g_sob_id; l_gl_interface_rec.ledger_id := l_ledger_id; l_gl_interface_rec.date_created := l_sysdate; l_gl_interface_rec.created_by := l_user_id; l_gl_interface_rec.actual_flag := 'A'; l_gl_interface_rec.reference1 := l_batch_name; -- 凭证批名 l_gl_interface_rec.reference2 := l_je_desc; -- 批说明 l_gl_interface_rec.reference4 := l_je_name; -- 日记帐名称 l_gl_interface_rec.reference10 := rec_data.forex_bill_num || rec_data.memo; -- 日记帐行摘要 l_gl_interface_rec.user_je_source_name := l_je_source_name; l_gl_interface_rec.user_je_category_name := l_je_category_name; l_gl_interface_rec.accounting_date := rec_data.accounting_date; l_gl_interface_rec.period_name := l_period_name; l_gl_interface_rec.currency_code := rec_data.transfer_out_currency_code; l_gl_interface_rec.code_combination_id := l_ccid_to; --借方 : 取转入银行账户的现金账户 l_gl_interface_rec.entered_dr := rec_data.transfer_out_amount; l_gl_interface_rec.entered_cr := NULL; l_gl_interface_rec.accounted_dr := rec_data.transfer_out_rate_amount; l_gl_interface_rec.accounted_cr := NULL; l_gl_interface_rec.group_id := g_group_id; l_gl_interface_rec.user_currency_conversion_type := rec_data.transfer_out_type_code; l_gl_interface_rec.currency_conversion_date := rec_data.accounting_date; l_gl_interface_rec.currency_conversion_rate := rec_data.transfer_out_rate; -- 现金流量标识 l_gl_interface_rec.context3 := get_segment(l_ccid_to, 2); l_gl_interface_rec.attribute10 := rec_data.forex_bill_id; --购汇单ID l_gl_interface_rec.attribute11 := 500; -- 插入接口表 INSERT INTO gl_interface VALUES l_gl_interface_rec; --2. credit l_gl_interface_rec.code_combination_id := l_ccid_fm; --贷方 : 取转出银行账户的现金账户 l_gl_interface_rec.entered_dr := NULL; l_gl_interface_rec.entered_cr := rec_data.transfer_out_amount; l_gl_interface_rec.accounted_dr := NULL; l_gl_interface_rec.accounted_cr := rec_data.transfer_out_rate_amount; l_gl_interface_rec.context3 := get_segment(l_ccid_fm, 2); -- 插入接口表 INSERT INTO gl_interface VALUES l_gl_interface_rec; l_count := l_count + 1; --插入第二张凭证 BEGIN SELECT cba.asset_code_combination_id INTO l_ccid_fm FROM ce_bank_accounts cba WHERE cba.bank_account_id = get_transfer_account(rec_data.org_id, rec_data.transfer_in_currency_code, rec_data.transfer_out_currency_code); EXCEPTION WHEN OTHERS THEN l_ccid_fm := NULL; END; BEGIN SELECT cba.asset_code_combination_id INTO l_ccid_to FROM ce_bank_accounts cba WHERE cba.bank_account_name = rec_data.transfer_in_bank_account; EXCEPTION WHEN OTHERS THEN l_ccid_to := NULL; END; --1. debit l_gl_interface_rec.currency_code := rec_data.transfer_in_currency_code; l_gl_interface_rec.currency_conversion_rate := rec_data.transfer_in_rate; l_gl_interface_rec.code_combination_id := l_ccid_to; --借方 : 取转入银行账户的现金账户 l_gl_interface_rec.entered_dr := rec_data.transfer_in_amount; l_gl_interface_rec.entered_cr := NULL; l_gl_interface_rec.accounted_dr := rec_data.transfer_in_rate_amount; l_gl_interface_rec.accounted_cr := NULL; l_gl_interface_rec.user_currency_conversion_type := rec_data.transfer_in_type_code; l_gl_interface_rec.context3 := get_segment(l_ccid_to, 2); INSERT INTO gl_interface VALUES l_gl_interface_rec; --2. credit l_gl_interface_rec.code_combination_id := l_ccid_fm; --贷方 : 取转出银行账户的现金账户 l_gl_interface_rec.entered_dr := NULL; l_gl_interface_rec.entered_cr := rec_data.transfer_in_amount; l_gl_interface_rec.accounted_dr := NULL; l_gl_interface_rec.accounted_cr := rec_data.transfer_in_rate_amount; l_gl_interface_rec.context3 := get_segment(l_ccid_fm, 2); INSERT INTO gl_interface VALUES l_gl_interface_rec; l_count := l_count + 1; END LOOP; -- FOR rec_data IN get_data LOOP cux_agm_public_pkg.output('已成功进入接口表记录数:' || l_count); EXCEPTION WHEN OTHERS THEN cux_agm_public_pkg.output('import_data错误结束:' || SQLERRM); x_return_status := 'E'; END import_data;
2.运行导入总账请求和客户化过账请求
PROCEDURE submmit_request(p_batch_id IN NUMBER, x_return_status OUT NOCOPY VARCHAR2) IS l_wait_req BOOLEAN; l_child_phase VARCHAR2(100); l_child_status VARCHAR2(100); l_dev_phase VARCHAR2(100); l_dev_status VARCHAR2(100); l_message VARCHAR2(100); l_error EXCEPTION; v_req_id NUMBER; l_request_id NUMBER; l_import_sec NUMBER; l_batch_id NUMBER; l_batch_name VARCHAR2(500);BEGIN l_request_id := fnd_global.conc_request_id; l_import_sec := gl_interface_control_pkg.get_unique_run_id; gl_interface_control_pkg.insert_row(xinterface_run_id => l_import_sec, xje_source_name => g_je_source_name, xledger_id => g_sob_id, xgroup_id => g_group_id, xpacket_id => NULL); cux_agm_public_pkg.output('submmit_request开始运行' || l_request_id); --提交标准请求 v_req_id := fnd_request.submit_request('SQLGL', 'GLLEZL', '', to_char(SYSDATE, 'YYYY/MM/DD HH24:MI:SS'), FALSE, to_char(l_import_sec), -- Argument1 to_char(g_sob_id), --帐簿 'N', NULL, NULL, 'N', 'O', --是否导入弹性域字段,三种方式 N(不导入),W(验证导入WITH VALIDATE),O(不验证WITHOUT VALIDATE) chr(0)); IF v_req_id <= 0 OR v_req_id IS NULL THEN cux_agm_public_pkg.output('提交 程序 - 导入日记帐 时发生错误'); RAISE l_error; ELSE COMMIT; cux_agm_public_pkg.output('已成功提交请求,request_id=' || v_req_id); END IF; --等待请求完成 cux_agm_public_pkg.output('等待请求' || l_request_id); l_wait_req := fnd_concurrent.wait_for_request(v_req_id, 1, 0, l_child_phase, l_child_status, l_dev_phase, l_dev_status, l_message); IF l_child_status <> '正常' THEN cux_agm_public_pkg.output('并发请求' || v_req_id || '错误结束:' || l_message); x_return_status := 'E'; --这里不抛出例外是因为需要进行正常的错误处理,错了就错了 ELSE x_return_status := 'S'; cux_agm_public_pkg.output('并发请求' || v_req_id || '正常结束!'); -- 自动过账 BEGIN BEGIN SELECT gb.je_batch_id, gb.name INTO l_batch_id, l_batch_name FROM gl_je_batches gb WHERE gb.name LIKE l_batch_name || '%' AND gb.group_id = g_group_id AND rownum = 1; EXCEPTION WHEN OTHERS THEN l_batch_id := NULL; l_batch_name := NULL; END; g_batch_id := l_batch_id; --IF l_debug = 'Y' THEN --LOG MESSAGE cux_conc_utl.out_msg('system gl batch name:' || l_batch_name); --END IF; l_request_id := fnd_request.submit_request(application => 'CUX', program => 'CUXPOSTBH', description => NULL, start_time => NULL, sub_request => FALSE, argument1 => l_batch_name); IF (l_request_id <= 0 OR l_request_id IS NULL) THEN fnd_message.set_name('SQLGL', 'GL_API_CONC_REQ_SUBMIT_FAIL'); fnd_msg_pub.add; x_return_status := fnd_api.g_ret_sts_error; RAISE fnd_api.g_exc_error; ELSE update_je_header(p_batch_id); COMMIT; END IF; EXCEPTION WHEN OTHERS THEN cux_conc_utl.out_msg('凭证没有自动过帐,请检查更正后重新提交。'); RAISE fnd_api.g_exc_error; END; END IF; cux_agm_public_pkg.output('submmit_request正常结束');EXCEPTION WHEN OTHERS THEN cux_agm_public_pkg.output('submmit_request错误结束:' || SQLERRM); x_return_status := 'E';END submmit_request;
其中自动过账请求CUXPOSTBH程序包如下:
CREATE OR REPLACE PACKAGE BODY cux_post_batch_pkg IS g_pkg_name VARCHAR2(100) := 'cux_post_batch_pkg'; PROCEDURE main(errbuf OUT VARCHAR2, retcode OUT VARCHAR2, p_batch_name VARCHAR2) IS l_request_id NUMBER; l_return_status VARCHAR2(1) := fnd_api.g_ret_sts_success; l_msg_count NUMBER; l_msg_data VARCHAR2(2000); l_ledger_id NUMBER; l_posting_run_id NUMBER; l_access_set_id NUMBER := fnd_profile.value('GL_ACCESS_SET_ID'); CURSOR cur IS SELECT a.rowid, a.* FROM gl_je_batches a WHERE a.name = p_batch_name; BEGIN retcode := '0'; -- concurrent header log hand_conc_utl.log_header; FOR a IN cur LOOP SELECT gl_je_batches_post_pkg.get_unique_id INTO l_posting_run_id FROM dual; BEGIN SELECT MAX(jeh.ledger_id) INTO l_ledger_id FROM gl_je_headers jeh WHERE jeh.je_batch_id = a.je_batch_id GROUP BY jeh.je_batch_id HAVING COUNT(DISTINCT jeh.ledger_id) = 1; EXCEPTION WHEN OTHERS THEN l_ledger_id := NULL; END; --更新批的状态和posting_run_id gl_je_batches_post_pkg.update_row(x_rowid => a.rowid, x_je_batch_id => a.je_batch_id, x_last_update_date => a.last_update_date, x_last_updated_by => a.last_updated_by, x_chart_of_accounts_id => a.chart_of_accounts_id, x_name => a.name, x_status => 'S', x_status_verified => a.status_verified, x_actual_flag => a.actual_flag, x_budgetary_control_status => a.budgetary_control_status, x_last_update_login => a.last_update_login, x_default_period_name => a.default_period_name, x_control_total => a.control_total, x_running_total_dr => a.running_total_dr, x_running_total_cr => a.running_total_cr, x_posting_run_id => l_posting_run_id, x_request_id => a.request_id); --运行请求 l_request_id := fnd_request.submit_request(application => 'SQLGL', program => 'GLPPOSS', description => NULL, start_time => NULL, sub_request => FALSE, argument1 => l_ledger_id, argument2 => l_access_set_id, --'1000', --默认 --add by tsg for mantis 0004375 argument3 => a.chart_of_accounts_id, argument4 => l_posting_run_id); IF l_request_id > 0 THEN COMMIT; END IF; END LOOP; IF (l_return_status = fnd_api.g_ret_sts_error) THEN RAISE fnd_api.g_exc_error; ELSIF (l_return_status = fnd_api.g_ret_sts_unexp_error) THEN RAISE fnd_api.g_exc_unexpected_error; END IF; -- conc end body -- concurrent footer log hand_conc_utl.log_footer; EXCEPTION WHEN fnd_api.g_exc_error THEN hand_conc_utl.log_message_list; retcode := '1'; fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => l_msg_count, p_data => l_msg_data); IF l_msg_count > 1 THEN l_msg_data := fnd_msg_pub.get_detail(p_msg_index => fnd_msg_pub.g_first, p_encoded => fnd_api.g_false); END IF; errbuf := l_msg_data; WHEN fnd_api.g_exc_unexpected_error THEN hand_conc_utl.log_message_list; retcode := '2'; fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => l_msg_count, p_data => l_msg_data); IF l_msg_count > 1 THEN l_msg_data := fnd_msg_pub.get_detail(p_msg_index => fnd_msg_pub.g_first, p_encoded => fnd_api.g_false); END IF; errbuf := l_msg_data; WHEN OTHERS THEN fnd_msg_pub.add_exc_msg(p_pkg_name => g_pkg_name, p_procedure_name => 'MAIN', p_error_text => substrb(SQLERRM, 1, 240)); hand_conc_utl.log_message_list; retcode := '2'; errbuf := SQLERRM; END; function get_gl_doc(p_group_id number, p_batch_name varchar2) return number is l_doc_seq number;begin select h.doc_sequence_value into l_doc_seq from gl_je_batches b, gl_je_headers h WHERE h.je_batch_id + 0 = b.je_batch_id + 0 AND (h.display_alc_journal_flag = 'Y' or h.display_alc_journal_flag is null) and b.group_id = p_group_id and b.name like p_batch_name || '%' and h.doc_sequence_value is not null and rownum = 1; return l_doc_seq;exception when others then return null;end;function get_extra_fee(p_DOC_BILLS_ID number,p_Extra_Fee number ) return number is l_sum number;begin select nvl(sum(CDOC.Extra_Fee),0) into l_sum from CUX_DOC_OUT_CST CDOC where cdoc.extra_impflag = 'Y' and cdoc.doc_bills_id = p_DOC_BILLS_ID ; if l_sum =0 and p_Extra_Fee is null then return null; else return (l_sum+nvl(p_Extra_Fee,0)); end if;exception when others then return null;end;END cux_post_batch_pkg;
至此,可以查看总账模块。看是否总账和分录是否生成。
- GL接口导入
- GL-日记账接口导入
- GL-日记账接口导入
- GL
- GL
- GL
- TOPGP5.3:导入jar包并在4GL中引用
- EBS 采购订单接口导入
- Oracle EBS导入物料接口
- Oracle EBS供应商接口导入
- Item 通过接口导入Demo
- Oracle EBS供应商接口导入
- 5GL
- 4GL
- GL Studio
- gl参考
- gl.glTexParameterx
- GL入门
- python 更新版本后库的安装
- 让 Nginx 关闭版本显示信息
- Vim/Cscope 入门指导
- 基础加强---反射的学习
- [开心学php100天]第五天:与基本功搞一搞基(上)
- GL接口导入
- IOS 下拉刷新--downPullRefreshView
- 谷歌帮:中国最牛的创业帮派
- 小明英语
- lease引发的血案
- Android popupwindow弹出对话框
- textview换行问题
- 线程
- [Android]利用run-as命令在不root情况下读取data下面的数据