Oracle EBS 应付发票 接口导入 API

本章主要目的是介绍Oracle EBS 应付发票 接口导入的API,因为有时需要开发一些应付发票批量导入或者给外围系统提供应付发票导入功能。

背景介绍:因为有时需要开发一些应付发票批量导入或者从外围系统导入功能,这些时候我们就需要用到Oracle提供的应付发票接口表和API。

Oracle EBS 版本:11.5i

开发工具:PL/SQL Developer


代码:(以下代码已经在11.5i环境测试通过)

  1. --author:jimmy  
  2. --Date:2014.05.24  
  3. --program:invoice_import  
  4. --desc:应付发票导入程序  
  5. DECLARE  
  6.   l_iface_rec       ap_invoices_interface%ROWTYPE;  
  7.   l_iface_lines_rec ap_invoice_lines_interface%ROWTYPE;  
  8.   l_org_id          NUMBER := 232;  
  9.   gv_user_id        NUMBER := 0;--fnd_global.user_id;  
  10.   gv_login_id       NUMBER := 0;--fnd_global.login_id;  
  11.   l_success         BOOLEAN;  
  12.   --  
  13.   v_batch_error_flag     VARCHAR2(30);  
  14.   v_invoices_fetched     NUMBER;  
  15.   v_invoices_created     NUMBER;  
  16.   v_total_invoice_amount NUMBER; -- bug 989221  
  17.   v_print_batch_flag     VARCHAR2(30);  
  18.    l_input_batch_number VARCHAR2(80);  
  19.   --  
  20. BEGIN  
  21.   --SELECT * FROM fnd_user WHERE user_name='SYSADMIN';  
  22.   
  23.   --初始化环境变量变量  
  24.   fnd_global.apps_initialize(user_id      => gv_user_id,    
  25.                              resp_id      => 50243,    
  26.                              resp_appl_id => 20003);  
  27.   --set who date  
  28.   --发票头最后更新人  
  29.   l_iface_rec.last_updated_by := gv_user_id;  
  30.   --发票头创建时间  
  31.   l_iface_rec.creation_date := SYSDATE;  
  32.   --发票头创建人  
  33.   l_iface_rec.created_by := gv_user_id;  
  34.   --发票头最后登录人  
  35.   l_iface_rec.last_update_login := gv_login_id;  
  36.   --发票行最后更新时间  
  37.   l_iface_lines_rec.last_update_date := SYSDATE;  
  38.   --发票行最后更新人  
  39.   l_iface_lines_rec.last_updated_by := gv_user_id;  
  40.   --发票行创建时间  
  41.   l_iface_lines_rec.creation_date := SYSDATE;  
  42.   --发票行的创建人  
  43.   l_iface_lines_rec.created_by := gv_user_id;  
  44.   --发票行最后更新人  
  45.   l_iface_lines_rec.last_update_login := gv_login_id;  
  46.   
  47.   --  
  48.   --发票头  
  49.   --获取发票invoice id  
  50.   SELECT ap_invoices_interface_s.NEXTVAL  
  51.     INTO l_iface_rec.invoice_id  
  52.     FROM dual;  
  53.   dbms_output.put_line('提示:发票ID:' || l_iface_rec.invoice_id);  
  54.   --发票编号  
  55.   l_iface_rec.invoice_num := 'invoice_test_01';  
  56.   
  57.   --发票类型  
  58.   l_iface_rec.invoice_type_lookup_code := 'STANDARD';  
  59.   --发票日期  
  60.   l_iface_rec.invoice_date := SYSDATE;  
  61.   --供应商ID  
  62.   l_iface_rec.vendor_id := 7811;  
  63.   --供应商地点  
  64.   l_iface_rec.vendor_site_id := 9099;  
  65.   --发票金额  
  66.   l_iface_rec.invoice_amount := 1000;  
  67.   --发票币别  
  68.   l_iface_rec.invoice_currency_code := 'CNY';  
  69.   --汇率类型  
  70.   l_iface_rec.exchange_rate_type := NULL;  
  71.   --汇率日期  
  72.   l_iface_rec.exchange_date := NULL;  
  73.   --汇率  
  74.   l_iface_rec.exchange_rate := NULL;  
  75.   --来源  
  76.   l_iface_rec.SOURCE := 'INV IMPORT';  
  77.   
  78.   --发票头-附件张数(根据每个环境实际环境填写,可选)  
  79.   l_iface_rec.attribute1 := 2;  
  80.   
  81.   --发票批次号  
  82.   l_input_batch_number := 'TEST_B_040599';  
  83.   
  84.   --Lookup type SOURCE  
  85.   l_iface_rec.group_id := l_iface_rec.invoice_id;  
  86.   l_iface_rec.org_id   := l_org_id;  
  87.   --把数据插入到发票头接口表  
  88.   INSERT INTO ap_invoices_interface VALUES l_iface_rec;  
  89.   
  90.   --发票行  
  91.   SELECT ap_invoice_lines_interface_s.NEXTVAL  
  92.     INTO l_iface_lines_rec.invoice_line_id  
  93.     FROM dual;  
  94.   --OU  
  95.   l_iface_lines_rec.org_id := l_iface_rec.org_id;  
  96.   --发票ID  
  97.   l_iface_lines_rec.invoice_id := l_iface_rec.invoice_id;  
  98.   --发票行日期  
  99.   l_iface_lines_rec.accounting_date := SYSDATE;  
  100.   --发票行号  
  101.   l_iface_lines_rec.line_number := 1;  
  102.   --发票行类型  
  103.   l_iface_lines_rec.line_type_lookup_code := 'ITEM';  
  104.   --发票行金额  
  105.   l_iface_lines_rec.amount := 1000;  
  106.   --发票行账户  
  107.   l_iface_lines_rec.dist_code_combination_id := 4614;  
  108.   --把数据插入发票行接口表  
  109.   INSERT INTO ap_invoice_lines_interface VALUES l_iface_lines_rec;  
  110.   
  111.   --提交事务处理  
  112.   COMMIT;  
  113.   --调用api把发票导入  
  114.   l_success := ap_import_invoices_pkg.import_invoices(p_batch_name           => l_input_batch_number,  
  115.                                                       p_gl_date              => NULL,  
  116.                                                       p_hold_code            => NULL,  
  117.                                                       p_hold_reason          => NULL,  
  118.                                                       p_commit_cycles        => NULL,  
  119.                                                       p_source               => l_iface_rec.SOURCE,  
  120.                                                       p_group_id             => l_iface_rec.invoice_id,  
  121.                                                       p_conc_request_id      => -1,  
  122.                                                       p_debug_switch         => 'Y',  
  123.                                                       p_batch_error_flag     => v_batch_error_flag,  
  124.                                                       p_invoices_fetched     => v_invoices_fetched,  
  125.                                                       p_invoices_created     => v_invoices_created,  
  126.                                                       p_total_invoice_amount => v_total_invoice_amount, -- bug 989221  
  127.                                                       p_print_batch          => v_print_batch_flag,  
  128.                                                       p_calling_sequence     => 'invoice_import');  
  129.   
  130.   IF NOT l_success THEN  
  131.     dbms_output.put_line('错误提示:发票导入失败。错误信息:' || SQLERRM||v_batch_error_flag);  
  132.     --把接口表的数据删除  
  133.     --发票头  
  134.     DELETE ap_invoices_interface aii  
  135.      WHERE aii.invoice_id = l_iface_rec.invoice_id;  
  136.     --发票行  
  137.     DELETE ap_invoice_lines_interface aili  
  138.      WHERE aili.invoice_id = l_iface_rec.invoice_id;  
  139.     --提交事务处理  
  140.     COMMIT;  
  141.   ELSE  
  142.     dbms_output.put_line('成功:发票(' || l_iface_rec.invoice_num || ')导入成功');  
  143.   END IF;  
  144.   
  145. END;  

需要注意:

1.因为是在PL/SQL Developer工具直接调用,这是需要初始化一下环境变量(用户ID、职责ID、应用ID);

2.因为是在PL/SQL Developer工具直接调用,数据已经插入到标准的接口表,不能够提交请求标准发票接口导入请求“APXIIMPT”,生成应付发票。不过Oracle EBS系统给开发者提供应付发票导入的API(ap_import_invoices_pkg.import_invoices),详细使用方法请看以上的代码;

3.本次测试代码,并没有对数据进行校验,假如实际情况需要对数据进行校验,读者可以自行添加。(校验内容例如:发票号码、供应商、供应商地点、弹性域等等)


以下介绍是,把数据插入到接口表中,通过调用请求生成应付发票(适用范围:需要把改方法挂到Oracle EBS,直接在PL/SQL是不能执行的)。

代码:

  1. dbms_output.put_line('运行发票接口导入请求 : APXIIMPT');  
  2. l_phase  := NULL;  
  3. l_status := NULL;  
  4. l_req_id := 0;  
  5. l_req_id := fnd_request.submit_request(application => 'SQLAP',  
  6.                                        program     => 'APXIIMPT',  
  7.                                        description => NULL,  
  8.                                        start_time  => NULL,  
  9.                                        sub_request => FALSE,  
  10.                                        argument1   => l_iface_rec.SOURCE,  
  11.                                        argument2   => l_iface_rec.invoice_id ---group_id  
  12.                                       ,  
  13.                                        argument3   => l_input_batch_number --l_batch_number  
  14.                                       ,  
  15.                                        argument4   => '',  
  16.                                        argument5   => '',  
  17.                                        argument6   => '',  
  18.                                        argument7   => 'Y',  
  19.                                        argument8   => 'N',  
  20.                                        argument9   => 'N',  
  21.                                        argument10  => 'N',  
  22.                                        argument11  => 1000,  
  23.                                        argument12  => gv_user_id,  
  24.                                        argument13  => gv_login_id);  
  25. COMMIT;  
  26. IF (l_req_id = 0) THEN  
  27.   dbms_output.put_line('错误提示:发票接口导入请求提交出错');  
  28.   --把接口表的数据删除  
  29.   --发票头  
  30.   DELETE ap_invoices_interface aii  
  31.    WHERE aii.invoice_id = l_iface_rec.invoice_id;  
  32.   --发票行  
  33.   DELETE ap_invoice_lines_interface aili  
  34.    WHERE aili.invoice_id = l_iface_rec.invoice_id;  
  35.   --提交事务处理  
  36.   COMMIT;  
  37.   dbms_output.put_line('已经把数据接口表的数据删除');  
  38.   --RAISE submit_failed;  
  39. ELSE  
  40.   COMMIT;  
  41.   --等待“运行发票接口导入请求”运行完成  
  42.   l_wait_outcome := fnd_concurrent.wait_for_request(request_id => l_req_id,  
  43.                                                     INTERVAL   => 10,  
  44.                                                     phase      => l_phase,  
  45.                                                     status     => l_status,  
  46.                                                     dev_phase  => l_dev_phase,  
  47.                                                     dev_status => l_dev_status,  
  48.                                                     message    => l_message);  
  49. END IF;  
  50.   
  51. IF upper(l_dev_phase) = 'COMPLETE' AND upper(l_dev_status) = 'NORMAL' THEN  
  52.   dbms_output.put_line('应付发票导入结束:' ||  
  53.                        to_char(SYSDATE, 'YYYY/MM/DD HH24:MI:SS'));  
  54.   
  55.   dbms_output.put_line('应付发票导入结束:' ||  
  56.                        to_char(SYSDATE, 'YYYY/MM/DD HH24:MI:SS'));  
  57.   dbms_output.put_line('应付发票');  
  58.   COMMIT;  
  59. ELSE  
  60.   dbms_output.put_line('发票接口导入出错,请检查日志文件');  
  61. END IF;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值