MIR7预制发票创建

*&---------------------------------------------------------------------*
*& 包含               ZBAPI_MIR7
*&---------------------------------------------------------------------*

FORM FRM_MIR7_CREATE TABLES   PT_ITEM  STRUCTURE ZSMM0030
                      USING    PS_HEAD  TYPE ZSMM0029
                      CHANGING P_RETURN TYPE ZSMM_RFC_RETURN.

  DATA:LS_HEADERDATA       TYPE BAPI_INCINV_CREATE_HEADER,
       LT_ITEMDATA         TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_ITEM,
       LS_ITEMDATA         TYPE BAPI_INCINV_CREATE_ITEM,
       LT_RETURN           TYPE STANDARD TABLE OF BAPIRET2,
       LS_RETURN           TYPE BAPIRET2,
       LV_INVOICEDOCNUMBER TYPE BAPI_INCINV_FLD-INV_DOC_NO,
       LV_FISCALYEAR       TYPE BAPI_INCINV_FLD-FISC_YEAR,
       LV_GROSS_AMOUNT     TYPE BAPI_RMWWR,
       LT_TAX              TYPE TABLE OF BAPI_INCINV_CREATE_TAX.
  CLEAR LS_HEADERDATA.
  IF PS_HEAD-VORGANG = '1'.
    LS_HEADERDATA-INVOICE_IND = 'X'. "发票
  ENDIF.
  IF PS_HEAD-VORGANG = '2'.
    LS_HEADERDATA-INVOICE_IND = ''.  "贷项
  ENDIF.
  LS_HEADERDATA-DOC_TYPE    = 'RE'.
  LS_HEADERDATA-DOC_DATE    = PS_HEAD-BLDAT.   "凭证日期
  LS_HEADERDATA-PSTNG_DATE  = PS_HEAD-BUDAT.    "发票日期
  LS_HEADERDATA-HEADER_TXT  = PS_HEAD-ZZTXT.   "抬头文本
  LS_HEADERDATA-DEL_COSTS   = PS_HEAD-ZH01.     "计划外交货成本。
  LS_HEADERDATA-COMP_CODE   = PS_HEAD-BUKRS.    "公司代码
  LS_HEADERDATA-DIFF_INV    = PS_HEAD-LIFRE .   " 供应商编码
  LS_HEADERDATA-CURRENCY    = PS_HEAD-WAERS.     "货币
  LS_HEADERDATA-PMNTTRMS    = PS_HEAD-ZTERM.     "付款条件。

  IF PS_HEAD-MWSKZ EQ 'J0'.
    LS_HEADERDATA-CALC_TAX_IND = 'X'. "J0默认不计税
  ELSE.
    LT_TAX = VALUE #( BASE LT_TAX ( TAX_CODE = PS_HEAD-MWSKZ TAX_AMOUNT = PS_HEAD-WMWST ) ).
  ENDIF.

  LS_HEADERDATA-GROSS_AMOUNT = PS_HEAD-WRBTR."   总金额(含税) 行项目含税金额之和。
  LS_HEADERDATA-HEADER_TXT  = PS_HEAD-ZH02."   收票说明
  LS_HEADERDATA-ALLOC_NMBR  = 'SRM'."   SRM创建的预制发票标识

  CLEAR LV_GROSS_AMOUNT.
  REFRESH LT_ITEMDATA.

  DATA LV_RBLGP TYPE RBLGP.

  LOOP AT PT_ITEM INTO DATA(LS_INVINFO).

    CLEAR:LS_ITEMDATA.
    LV_RBLGP = LV_RBLGP + 10.
    LS_ITEMDATA-INVOICE_DOC_ITEM = LV_RBLGP.               "行号
    LS_ITEMDATA-PO_NUMBER        = LS_INVINFO-EBELN.       "采购订单号
    LS_ITEMDATA-PO_ITEM          = LS_INVINFO-EBELP.       "采购订单行号
    LS_ITEMDATA-REF_DOC_YEAR     = LS_INVINFO-ZI01+0(4).   "参考凭证号. "需要为采购订单收货的年份
    LS_ITEMDATA-REF_DOC          = LS_INVINFO-ZI01+4(10).  "参考凭证号. "需要为采购订单收货的物料凭证号
    LS_ITEMDATA-REF_DOC_IT       = LS_INVINFO-ZI01+14(4).  "参考凭证号. "需要为采购订单收货的物料凭证行项目号
    LS_ITEMDATA-ITEM_AMOUNT      = LS_INVINFO-WRBTR.        "金额(净价)
    LS_ITEMDATA-QUANTITY         = LS_INVINFO-ERFMG.        "数量
    LS_ITEMDATA-QUANTITY         = ABS( LS_INVINFO-ERFMG ). "数量
    LS_ITEMDATA-PO_UNIT          = LS_INVINFO-ERFME.        "输入单位

*    ls_itemdata-po_pr_qnt         = abs( ls_invinfo-menge ). "数量
*    ls_itemdata-po_pr_uom         = ls_invinfo-meins.        "输入单位

    LS_ITEMDATA-TAX_CODE         = LS_INVINFO-MWSKZ.        "税别

    SELECT SINGLE ISOCODE
      INTO LS_ITEMDATA-PO_PR_UOM_ISO
      FROM T006
     WHERE MSEHI = LS_INVINFO-ERFME .

    APPEND LS_ITEMDATA TO LT_ITEMDATA.
    CLEAR LS_ITEMDATA.
  ENDLOOP.

  CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
    EXPORTING
      HEADERDATA       = LS_HEADERDATA
    IMPORTING
      INVOICEDOCNUMBER = LV_INVOICEDOCNUMBER
      FISCALYEAR       = LV_FISCALYEAR
    TABLES
      ITEMDATA         = LT_ITEMDATA
      TAXDATA          = LT_TAX
      RETURN           = LT_RETURN.

  IF LT_RETURN IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    P_RETURN-TYPE    = 'E'.
    P_RETURN-MESSAGE = '预制保存失败:'.
    LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E'.
      CONCATENATE P_RETURN-MESSAGE LS_RETURN-MESSAGE INTO P_RETURN-MESSAGE .
    ENDLOOP.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = ABAP_TRUE.

    P_RETURN-TYPE    = 'S'.
    P_RETURN-MESSAGE = '预制保存成功'.
    P_RETURN-BELNR   = LV_INVOICEDOCNUMBER.
    P_RETURN-GJAHR   = LV_FISCALYEAR.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = LV_INVOICEDOCNUMBER
      IMPORTING
        OUTPUT = LV_INVOICEDOCNUMBER.

  ENDIF.

ENDFORM.


关键词: ABAP MM

网友评论

发表评论