在EBS 系统中客制化采购对账系统时,采用了ISP客户化,采购对账流程经历:1、手动/自动生成采购对账单;2、将采购对账单提交给供应商查看/确认;3、将供应商确认后的对账单进行审批,审批可提交放置在OA系统;4、审批后的对账单进行立账,即产生AP发票。

本章简要梳理产生AP发票的过程,即AP发票的接口导入。

AP发票接口相关表主要有:

ap_invoices_interface

ap_invoice_lines_interface

ap_interface_rejections

以及 APXIIMPT  标准发票接口导入请求

1、首先是校验需要导入发票的对账单信息,校验数据是否完整/正确,校验完成后再分别导入到AP接口表中。

可创建PKG进行CODE。

org_id            组织ID不可为空,有效
       vendor_id         供应商ID不可为空,有效
       vendor_site_id    供应商地点ID不可为空 ,有效
       currency_code     币种不可为空,有效,非本位币还需校验汇率

invoice_number    发票号不可为空,且不ap_invoices_all 重复

invoice_date      发票日期不可为空
       gl_date            记账日期不可为空
       condition_date     条件日期不可为空
       terms_id               付款条件不可为空,有效
       payment_method_lookup_code   付款方法不可为空,有效
        
        select  count(1)
          into  v_cnt
          from  Iby_Payment_Methods_b ipmb
         where  ipmb.payment_method_code = c.payment_method_lookup_code
           and  (ipmb.inactive_date is null or ipmb.inactive_date >= trunc(c.invoice_date));

if v_cnt = 0 then
          v_error_message := v_error_message || chr(13) || '付款方法【' ||
                             c.payment_method_lookup_code || '】无效!';
          v_error_count   := v_error_count + 1;
        end if;

LINE_LOCATION_ID  发运行id ,不为空,有效
        AMOUNT                       金额不可为空,有效
        inventory_item_id         物料ID不可为空!
        invoice_quantity            开票数量不可为空!

发票行ID 的产生:ap_invoice_lines_interface_s.nextval     => v_invoice_line_id

发票ID 的产生:ap_invoices_interface_s.nextval  => v_invoice_id

(1)导入ap_invoice_lines_interface数据

一个发票可能存在多条发票行。

声明接口表类型变量:

TYPE ap_inv_lines_ifc_tbl IS TABLE OF ap_invoice_lines_interface%rowtype INDEX BY BINARY_INTEGER;

v_ap_inv_line_ifc_tbl_c ap_inv_lines_ifc_tbl;

查看ap_invoice_lines_interface的表栏位字段,其中是ap发票接口所必需的,如下:

v_ap_inv_line_ifc_tbl_c(i).invoice_id       := v_invoice_id_c;              --发票ID
            v_ap_inv_line_ifc_tbl_c(i).invoice_line_id  := v_invoice_line_id;           --发票行ID
            v_ap_inv_line_ifc_tbl_c(i).line_number      := d.detail_number;             --发票行号
            v_ap_inv_line_ifc_tbl_c(i).line_type_lookup_code := xxcusp001.C_AP_INV_LINE_TYPE;   --发票行类型
            v_ap_inv_line_ifc_tbl_c(i).amount := d.amount;                              --金额             
            v_ap_inv_line_ifc_tbl_c(i).accounting_date := c.gl_date;                    --记账日期
            v_ap_inv_line_ifc_tbl_c(i).description := '';                               --发票行描述
            v_ap_inv_line_ifc_tbl_c(i).amount_includes_tax_flag := 'N';
            v_ap_inv_line_ifc_tbl_c(i).po_header_id        := v_po_header_id;           --PO 头ID
            v_ap_inv_line_ifc_tbl_c(i).po_line_id          := v_po_line_id;             --PO 行ID
            v_ap_inv_line_ifc_tbl_c(i).po_line_location_id := d.line_location_id;       --PO 发运行 id
            v_ap_inv_line_ifc_tbl_c(i).po_release_id       := v_po_release_id;
            v_ap_inv_line_ifc_tbl_c(i).org_id              := org_id;                   --组织
            v_ap_inv_line_ifc_tbl_c(i).rcv_transaction_id  := d.rcv_transaction_id;     --接收事务处理ID
            v_ap_inv_line_ifc_tbl_c(i).inventory_item_id   := d.inventory_item_id;      --料号ID
            v_ap_inv_line_ifc_tbl_c(i).quantity_invoiced   := d.invoice_quantity;       --发票数量
            v_ap_inv_line_ifc_tbl_c(i).unit_price          := d.unit_price;             --单价
            v_ap_inv_line_ifc_tbl_c(i).dist_code_combination_id := d.dist_code_combination_id; --发票行账户,可为空
 
            v_ap_inv_line_ifc_tbl_c(i).tax_classification_code := d.tax_classification_code;  --税分类代码
            v_ap_inv_line_ifc_tbl_c(i).reference_key1 := c.statement_header_id;      --对账单 头id
            v_ap_inv_line_ifc_tbl_c(i).reference_key2 := c.statement_line_id;        --对账单 行id
            v_ap_inv_line_ifc_tbl_c(i).reference_key3 := d.statement_details_id;     --对账单 明细id
            v_ap_inv_line_ifc_tbl_c(i).last_updated_by := fnd_global.USER_ID;
            v_ap_inv_line_ifc_tbl_c(i).last_update_date := sysdate;
            v_ap_inv_line_ifc_tbl_c(i).last_update_login := fnd_global.LOGIN_ID;
            v_ap_inv_line_ifc_tbl_c(i).created_by := fnd_global.USER_ID;
            v_ap_inv_line_ifc_tbl_c(i).creation_date := sysdate;

INSERT INTO ap_invoice_lines_interface VALUES v_ap_inv_line_ifc_tbl_c(i);

(2)导入ap_invoices_interface 数据 

v_ap_inv_ifc_rec    ap_invoices_interface%rowtype;

C_SOURCE           CONSTANT VARCHAR2(30) := 'USE';   --发票来源 ‘USE’

v_rate_type         gl_daily_rates.conversion_type%type;    -- 每日汇率信息
          v_rate_date         gl_daily_rates.conversion_date%type;
          v_rate              gl_daily_rates.conversion_rate%type;

v_ap_inv_ifc_rec.invoice_id                := v_invoice_id;   --发票ID
          v_ap_inv_ifc_rec.invoice_num              := c.invoice_number;      --发票号
          v_ap_inv_ifc_rec.invoice_type_lookup_code  := xxcusp001.C_AP_INV_TYPE_C;   --发票行类型
          v_ap_inv_ifc_rec.source                    := C_SOURCE;   --发票来源
          v_ap_inv_ifc_rec.invoice_date              := c.invoice_date;   --发票日期
          v_ap_inv_ifc_rec.vendor_id                 := c.vendor_id;         --供应商id
          v_ap_inv_ifc_rec.vendor_site_id            := c.vendor_site_id;   --供应商地点
          v_ap_inv_ifc_rec.invoice_amount            := v_invoice_amt;      --发票总金额,可由行汇总
          v_ap_inv_ifc_rec.control_amount            := c.tax - v_tax_amt_c;
          v_ap_inv_ifc_rec.invoice_currency_code     := c.currency_code;    --币种
          v_ap_inv_ifc_rec.exchange_rate             := v_rate;                         
          v_ap_inv_ifc_rec.exchange_rate_type        := v_rate_type;
          v_ap_inv_ifc_rec.exchange_date             := v_rate_date;
          v_ap_inv_ifc_rec.terms_id                  := c.terms_id;                --付款条件
          v_ap_inv_ifc_rec.terms_date                := c.condition_date;   --条件日期
          v_ap_inv_ifc_rec.description               := c.remark;                  --备注
          v_ap_inv_ifc_rec.group_id                  := pi_group_id;              --对账单处理批次
          v_ap_inv_ifc_rec.payment_method_code       := c.payment_method_lookup_code;
          v_ap_inv_ifc_rec.gl_date                   := c.gl_date;          --总账日期
          v_ap_inv_ifc_rec.org_id                    := c.org_id;            --组织
          v_ap_inv_ifc_rec.calc_tax_during_import_flag := 'Y';
          v_ap_inv_ifc_rec.add_tax_to_inv_amt_flag     := 'Y';
          v_ap_inv_ifc_rec.reference_key1              := c.statement_header_id;   --对账单头ID
          v_ap_inv_ifc_rec.reference_key2              := c.statement_line_id;       --对账单行ID
          v_ap_inv_ifc_rec.last_update_date            := sysdate;
          v_ap_inv_ifc_rec.last_updated_by             := fnd_global.USER_ID;
          v_ap_inv_ifc_rec.last_update_login           := fnd_global.LOGIN_ID;
          v_ap_inv_ifc_rec.creation_date               := sysdate;
          v_ap_inv_ifc_rec.created_by                  := fnd_global.USER_ID;

insert into ap_invoices_interface values v_ap_inv_ifc_rec;     --插入发票

2、插入AP发票接口表成功后,调用标准请求生成AP发票。

调用的请求为:应付款管理系统开放接口导入,并发执行简称为:APXIIMPT。

C_PROGRAM_SHORT_NAME :=  ‘APXIIMPT’;

--获取应用程式所属模块

SELECT  fa.application_short_name
        INTO  l_applica_code
        FROM  fnd_application fa, fnd_concurrent_programs fcp
       WHERE  fa.application_id = fcp.application_id
         AND  fcp.concurrent_program_name = C_PROGRAM_SHORT_NAME;

 2.1、调用并发程序

需要注意的是:

(1) 在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束; 
    (2) 在form里面则不行,要写满105个,而且我们参数结束之后要用一个chr(0)来表示结束 。

l_result := fnd_request.submit_request(application    => l_applica_code, --模块
                                           program        => C_PROGRAM_SHORT_NAME,      --应用程式 
                                           description    => '',   --请求说明(可选) 
                                           start_time     => to_char(sysdate),    --RUN 时间(可选) 
                                           sub_request =>  FALSE, --立刻提交请求 
                                           argument1    => C_SOURCE,    --参数1  --发票来源 ‘USE’
                                           argument2    => pi_group_id,   --参数2  --GROUP
                                           argument3    => 'N/A',               --参数3  --Batch Name  
                                           argument4    =>  '',                    --参数4 
                                           argument5    =>  '',                    --参数5

argument6    =>  '',   --参数6 
                                           argument7    =>  'Y' ,   --参数7   --Purge 清楚接口表中成功导入的数据
                                           argument8    =>  'N',   --参数8   --Trace Switch
                                           argument9    =>  'N',   --参数9   --Debug Switch 
                                           argument10  =>  'N',   --参数10 --Summarize Report

argument11  =>  '1000', --参数11 --commit batch size

argument12  =>  fnd_global.USER_ID,  --USER ID

argument13  =>  fnd_global.LOGIN_ID --LOGIN_ID);

l_result := fnd_request.submit_request(l_applica_code,
                                           C_PROGRAM_SHORT_NAME,
                                           '',
                                           to_char(sysdate),
                                           FALSE,

C_SOURCE,

pi_group_id,

'N/A',

'',

'',

'',

'Y' ,       --Purge 清楚接口表中成功导入的数据

'N',       --Trace Switch

'N',       --Debug Switch

'N',       --Summarize Report

'1000', --commit batch size

fnd_global.USER_ID,  --USER ID

fnd_global.LOGIN_ID,

CHR(0),

'','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','','','','','','');

2.2、判断导入是否成功

v_interval       NUMBER := 5;
      v_max_wait   NUMBER := 0;
      v_phase         VARCHAR2(80);
      v_status          VARCHAR2(80);
      v_dev_phase  VARCHAR2(80);
      v_dev_status   VARCHAR2(80);
      v_message     VARCHAR2(240)

IF  l_result  = 0 THEN    --不成功则删除接口表数据

DELETE ap_invoices_interface ai WHERE ai.invoice_id = v_invoice_id;

DELETE ap_invoice_lines_interface ail WHERE ail.invoice_id = v_invoice_id;

ELSE                      -- 成功则等待“运行发票接口导入请求”运行完成

v_ret := FND_CONCURRENT.WAIT_FOR_REQUEST(l_result  ,

v_interval,

v_max_wait,

v_phase,

v_status,

v_dev_phase,

v_dev_status,

v_message);

IF upper(rtrim(v_dev_phase) = 'COMPLETE' THEN

po_error_message := null;

ELSE

po_error_message := '程序' || pi_program_short_name || '异常终止!';

END IF;

END IF;

2.3、检查接口表错误信息

--首先获取错误的发票

select  count(1), max(i.invoice_id)
       into  v_cnt, v_invoice_id
       from ap_invoices_interface i
      where i.status = 'REJECTED'
        and i.group_id = to_char(pi_group_id)
        and i.reference_key1 = c.statement_header_id    --可选 对账单信息

and i.reference_key2 = c.statement_line_id;         --可选

--有错误则查找错误信息,分别查找发票 、 发票行 错误信息

IF v_cnt > 0 THEN

SELECT nvl(flv.meaning, a.reject_lookup_code) err_msg     --发票错误信息

INTO l_err_msg
              FROM ap_interface_rejections a,
                   ap_invoices_interface   b,
                   fnd_lookup_values       flv
             WHERE a.parent_id = b.invoice_id
               and a.parent_table = 'AP_INVOICES_INTERFACE'
               AND flv.lookup_type(+) = 'REJECT CODE'
               AND flv.lookup_code(+) = a.reject_lookup_code
               AND flv.language(+) = 'ZHS' --USERENV('LANG')
               AND b.invoice_id = v_invoice_id;

SELECT nvl(flv.meaning, a.reject_lookup_code) err_msg

INTO l_err_msg_line
              FROM ap_interface_rejections    a,
                   ap_invoices_interface      b,
                   ap_invoice_lines_interface c,
                   fnd_lookup_values          flv
            WHERE a.parent_id = c.invoice_line_id
              and c.invoice_id = b.invoice_id
              and a.parent_table = 'AP_INVOICE_LINES_INTERFACE'

AND flv.lookup_type(+) = 'REJECT CODE'
              AND flv.lookup_code(+) = a.reject_lookup_code
              AND flv.language(+) = USERENV('LANG')
              AND b.invoice_id = v_invoice_id;

--最后将错误信息更新到对账单中

update  xxx_po_statement_header h

set  h.error_mes := l_err_msg||l_err_msg_line,

h.status := 'ERROR'

where h.statement_header_id = c.statement_header_id;

ELSE

--无错误,最后将对账单中的状态更新为已对账

update  xxx_po_statement_header h

set  h.error_mes := NULL,

h.status := 'invoice'

where h.statement_header_id = c.statement_header_id;

END IF;

3、其他注意事项

以上只是简单介绍过程和主要代码,注意最开始数据的检验,以及程序的防呆,程序的健壮。

Oracle EBS AP发票接口导入相关推荐

  1. Oracle EBS 应付发票 接口导入 API

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

  2. ap导入 ebs oracle_Oracle EBS AP发票接口导入

    在EBS 系统中客制化采购对账系统时,采用了ISP客户化,采购对账流程经历:1.手动/自动生成采购对账单:2.将采购对账单提交给供应商查看/确认:3.将供应商确认后的对账单进行审批,审批可提交放置在O ...

  3. Oracle EBS AP发票类型SQL

    Oracle EBS AP发票类型SQL SELECT * FROM ap_lookup_codes t WHERE t.lookup_type = 'INVOICE TYPE'; LOOKUP_CO ...

  4. Oracle EBS AP 发票放弃行

    -- purpose: 应付发票放弃发票行 -- 12.2.6 环境 -- author:jenrry create_date: 2017-06-07 declarel_dummy_msg VARCH ...

  5. oracle 发票 付款分录,ORACLE EBS AP发票到付款的数据流

    --1.发票创建时生成数据如下表 --发票主表 SELECT * FROM AP_INVOICES_ALL A WHERE A.INVOICE_NUM = '20111213001'; --发票分配表 ...

  6. oracle预收核销,Oracle EBS AP取消核销

    --取消核销 created by jenrry 20170425 DECLARE l_result BOOLEAN; l_msg_count NUMBER; l_result_n varchar2( ...

  7. Oracle EBS AP预付款发票核销可用金额查询SQL

    Oracle EBS AP预付款发票核销可用金额查询SQL --  预付款发票每行可用金额 prepay_amount_remaining SELECT aia.invoice_num ,aia.in ...

  8. php导入开票系统,AP发票数据导入接口开发实例(ap_invoices_interface)

    数据库表:--CreatetableDROPTABLECUX.cux_ap_invoice_interface;createtableCUX.cux_ap_invoice_interface(OU_N ...

  9. Oracle ebs ap表结构,oracle,ebs,r12,常用表表结构总结之ap.docx

    oracle,ebs,r12,常用表表结构总结之ap EBSR12install(ap/db在同一台机器) ip: os:redhatlinuxx64 [root@siotest1ftptest]#l ...

最新文章

  1. 反客为主 ——浅议呼叫中心在网络营销4C策略中的角色与价值
  2. 浅显易懂讲讲网关和DNS的概念—Vecloud微云
  3. Python对象基础
  4. Linux的实际操作:用户管理(删除用户userdel userdel -r)
  5. 子网规划与组网实验_【干货】从0到1,“大型WLAN组网”基础知识分享~
  6. HTTP的长连接和短连接通俗解释以及应用场景
  7. MongoDB数据库的介绍和连接(非常详细、易懂)
  8. 交互设计软件 html,交互设计工具篇
  9. unix系统安装及应用
  10. 注意细节:Javascript中的变量作用域
  11. Android 获取当前日期算前一年、前一月、前一天Calendar
  12. [Python+Django]Web图书管理系统毕业设计之源码+论文篇
  13. HiJson(Json格式化工具)
  14. 网页微信linux,Ubuntu安装Linux网页版微信
  15. 世界坐标、相机坐标、图像坐标、像素坐标的原理、关系,并用matlab仿真
  16. 2016年年终总结--勿忘初心
  17. 2021年35个最佳WordPress企业主题和商业主题
  18. 【C语言】如何优雅地进行嵌入式C开发?(万字总结)
  19. N个数全排列的第M个排列是?(全排列)
  20. 零基础入门:实时音视频技术基础知识全面盘点

热门文章

  1. 使用JS+CSS的网易云轮播图的实现(完整代码)
  2. 【微信小程序分享:HR手机版-人力资源/组织人事/微人事/免费软件】
  3. ICV报告:乘光伏新能源汽车之势,功率器件蓄势待发
  4. chrome谷歌浏览器开发者模式禁用缓存的设置方法
  5. c语言程序结构环形队列入队,C语言 环形队列
  6. CentOS 6.x - 知识简谱(不定时继续完善)
  7. 【HTML+CSS】CSS初始化样式文件
  8. GBase 8a MPP Cluster 产品简介
  9. webpack 源码分析(四)——complier模块
  10. 面试题 请简述vue双向数据绑定原理