ABAP 预制发票 ‘BAPI_INCOMINGINVOICE_PARK’ 普通

DATA: ls_headerdata LIKE bapi_incinv_create_header,
lt_itemdata LIKE TABLE OF bapi_incinv_create_item,
ls_itemdata LIKE bapi_incinv_create_item,
lt_materialdata LIKE TABLE OF bapi_incinv_create_material,
ls_materialdata LIKE bapi_incinv_create_material,
lt_glaccountdata LIKE TABLE OF bapi_incinv_create_gl_account,
ls_glaccountdata LIKE bapi_incinv_create_gl_account,
lt_taxdata LIKE TABLE OF bapi_incinv_create_tax,
ls_taxdata LIKE bapi_incinv_create_tax,
lt_return LIKE TABLE OF bapiret2,
ls_return LIKE bapiret2,
lv_invoicedocnumber LIKE bapi_incinv_fld-inv_doc_no,
lv_fiscalyear LIKE bapi_incinv_fld-fisc_year.

CLEAR:ls_headerdata,lv_invoicedocnumber,lv_fiscalyear,lv_rblgp,ls_glaccountdata.
REFRESH:lt_itemdata,lt_taxdata,lt_return.
"header
ls_headerdata-invoice_ind = ‘X’. "发票标志
ls_headerdata-doc_type = ‘RE’. "凭证类型
ls_headerdata-comp_code = wa_head-bukrs. "公司代码
ls_headerdata-doc_date = wa_head-bldat. "凭证日期
ls_headerdata-pstng_date = wa_head-budat. "过账日期
ls_headerdata-bline_date = wa_head-zfbdt. "到期日期计算的起算日期
ls_headerdata-diff_inv = wa_head-lifnr. "出票方
ls_headerdata-gross_amount = wa_head-rmwwr. "总金额(调整后金额)
IF ls_headerdata-gross_amount < 0.
ls_headerdata-gross_amount = ls_headerdata-gross_amount * -1.
ls_headerdata-invoice_ind = ‘’.
ENDIF.
ls_headerdata-currency = wa_head-waers. "货币码
ls_headerdata-header_txt = wa_head-bktxt. "抬头文本
ls_headerdata-item_text = wa_head-sgtxt. "文本
ls_headerdata-ref_doc_no = wa_head-xblnr. "参考凭证编号
ls_headerdata-pmnttrms = wa_head-zterm. "付款条款
ls_headerdata-deliv_posting = ‘S’. "20220807-yuchengyi-add
ls_headerdata-return_posting = ‘H’. "20220807-yuchengyi-add

IF wa_head-waers = ‘JPY’.
ls_headerdata-gross_amount = ls_headerdata-gross_amount * 100.
ENDIF.
"item / tax
LOOP AT gt_out INTO wa_out WHERE sel = ‘X’.

  • lv_rblgp = lv_rblgp + 1.
    CLEAR: ls_itemdata,lv_bpumz,lv_bpumn."ls_taxdata.

  • ls_itemdata-invoice_doc_item = lv_rblgp. "行项目
    ls_itemdata-ref_doc_year = wa_out-gjahr. "物料凭证财年
    IF wa_out-bwart =‘105’ OR wa_out-bwart =‘106’ OR wa_out-bwart =‘122’ OR wa_out-bwart =‘123’ OR wa_out-bwart =‘162’ OR wa_out-bwart =‘102’ .
    ls_itemdata-ref_doc_year = wa_out-lfgja. "物料凭证财年
    ls_itemdata-ref_doc = wa_out-lfbnr. "参考物料凭证
    ls_itemdata-ref_doc_it = wa_out-lfpos. "参考物料凭证项目
    ELSE.
    ls_itemdata-ref_doc_year = wa_out-gjahr. "物料凭证财年
    ls_itemdata-ref_doc = wa_out-belnr. "参考物料凭证
    ls_itemdata-ref_doc_it = wa_out-buzei. "参考物料凭证项目
    ENDIF.

ls_itemdata-po_number    = wa_out-ebeln.            "采购订单号
ls_itemdata-po_item      = wa_out-ebelp.              "采购凭证的项目编号
ls_itemdata-quantity     =  wa_out-bpmng.             "数量
  • ls_itemdata-quantity = abs( wa_out-bpmng ). "数量
    ls_itemdata-item_amount = wa_out-netwr. "未税金额
    IF wa_head-waers = ‘JPY’.
    ls_itemdata-item_amount = ls_itemdata-item_amount * 100.
    ENDIF.
    SELECT SINGLE meins bprme bpumz bpumn INTO ( ls_itemdata-po_unit,ls_itemdata-po_pr_uom,lv_bpumz,lv_bpumn )
    FROM ekpo WHERE ebeln = wa_out-ebeln AND ebelp = wa_out-ebelp.
    IF lv_bpumn = ‘’.
    lv_bpumn = 1.
    ENDIF.
    ls_itemdata-po_pr_qnt = wa_out-bpmng * lv_bpumz / lv_bpumn. "采购订单价格单位的数量

  • ls_itemdata-po_pr_qnt = abs( wa_out-bpmng * lv_bpumz / lv_bpumn ). "采购订单价格单位的数量
    ls_itemdata-tax_code = wa_out-mwskz. "税码

  • APPEND ls_itemdata TO lt_itemdata.
    COLLECT ls_itemdata INTO lt_itemdata.

  • ls_taxdata-tax_code = wa_out-mwskz.

  • ls_taxdata-tax_amount = wa_out-zse.

  • COLLECT ls_taxdata INTO lt_taxdata.

ENDLOOP.

LOOP AT lt_itemdata INTO ls_itemdata.
lv_rblgp = lv_rblgp + 1.
ls_itemdata-invoice_doc_item = lv_rblgp. "行项目
ls_itemdata-quantity = abs( ls_itemdata-quantity ).
ls_itemdata-po_pr_qnt = abs( ls_itemdata-po_pr_qnt ).
ls_itemdata-item_amount = abs( ls_itemdata-item_amount ). "20220807-yuchengyi-add
"20221111-yuchengyi-工序委外PO设置最后发票标识 begin

  • IF ls_itemdata-item_amount <> 0 AND ls_itemdata-po_number+0(2) = ‘84’.
  •  CLEAR lw_ekpo.
    
  •  SELECT SINGLE * INTO CORRESPONDING FIELDS OF lw_ekpo FROM ekpo WHERE ebeln = ls_itemdata-po_number AND ebelp = ls_itemdata-po_item.
    
  •  IF sy-subrc = 0.
    
  •    IF lw_ekpo-matnr = '' AND lw_ekpo-knttp = 'F'.
    
  •      ls_itemdata-final_inv = 'X'.
    
  •    ENDIF.
    
  •  ENDIF.
    
  • ENDIF.
    "20221111-yuchengyi-工序委外PO设置最后发票标识 end
    MODIFY lt_itemdata FROM ls_itemdata TRANSPORTING invoice_doc_item quantity po_pr_qnt item_amount ."final_inv.
    ENDLOOP.

"税–用输入的纸质发票税额
CLEAR ls_taxdata.
ls_taxdata-tax_code = wa_head-mwskz1.

  • IF wa_head-wmwst3 <> 0. "当手工调整税额 <> 0
  • ls_taxdata-tax_amount = wa_head-wmwst3. "手工调整税额
  • ELSE.
  • ls_taxdata-tax_amount = wa_head-wmwst. "推荐税额
  • ENDIF.
    ls_taxdata-tax_amount = abs( wa_head-wmwst ). "税额

IF wa_head-waers = ‘JPY’.
ls_taxdata-tax_amount = ls_taxdata-tax_amount * 100.
ENDIF.
COLLECT ls_taxdata INTO lt_taxdata.

CHECK lt_itemdata[] IS NOT INITIAL.

CALL FUNCTION ‘BAPI_INCOMINGINVOICE_PARK’
EXPORTING
headerdata = ls_headerdata
IMPORTING
invoicedocnumber = lv_invoicedocnumber
fiscalyear = lv_fiscalyear
TABLES
itemdata = lt_itemdata
materialdata = lt_materialdata
glaccountdata = lt_glaccountdata
taxdata = lt_taxdata
return = lt_return.

IF lv_invoicedocnumber IS INITIAL OR lv_fiscalyear IS INITIAL.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

LOOP AT lt_return INTO ls_return.
  CONCATENATE lv_message ls_return-message INTO lv_message.
ENDLOOP.

lv_message = '预制发票失败:' && lv_message.
MESSAGE lv_message TYPE 'I'.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait = 'X'.
    ENDIF.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以了解到BAPI_INCOMINGINVOICE_CREATE1是一个用于创建进货发票的标准BAPI。而BAPI_INCOMINGINVOICE_PARK是一个用于将进货发票暂存的标准BAPI。下面是一个简单的示例代码,演示如何使用BAPI_INCOMINGINVOICE_PARK: ```ABAP DATA: lt_invoice_header TYPE STANDARD TABLE OF bapivbrk, lt_invoice_item TYPE STANDARD TABLE OF bapivbrp, ls_invoice_header LIKE LINE OF lt_invoice_header, ls_invoice_item LIKE LINE OF lt_invoice_item, ls_return LIKE bapiret2. * 填充进货发票头信息 ls_invoice_header-companycode = '1000'. ls_invoice_header-docdate = '20220101'. ls_invoice_header-pstngdate = '20220101'. ls_invoice_header-duedate = '20220131'. ls_invoice_header-vendor = '10000001'. APPEND ls_invoice_header TO lt_invoice_header. * 填充进货发票行项目信息 ls_invoice_item-material = 'MATERIAL001'. ls_invoice_item-quantity = 10. ls_invoice_item-netvalue = 1000. APPEND ls_invoice_item TO lt_invoice_item. * 调用BAPI_INCOMINGINVOICE_PARK CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK' EXPORTING headerdata = ls_invoice_header TABLES itemdata = lt_invoice_item return = lt_return. * 检查返回结果 IF lt_return IS NOT INITIAL. LOOP AT lt_return INTO ls_return. WRITE: / ls_return-type, ls_return-id, ls_return-number, ls_return-message. ENDLOOP. ENDIF. ``` 上述代码中,我们首先定义了进货发票的头信息和行项目信息,并将其填充到对应的表中。然后,我们调用了BAPI_INCOMINGINVOICE_PARK,并将进货发票的头信息作为EXPORTING参数传递给该BAPI,将进货发票的行项目信息作为TABLES参数传递给该BAPI。最后,我们检查了返回结果,如果有错误信息,则将其输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值