15 ноября 2018

Создание FI-документа с проводкой на налоговые счета (BAPI BAPI_ACC_DOCUMENT_POST)

Используется функциональный модуль BAPI_ACC_DOCUMENT_POST.




  DATA:
    ls_docheader  TYPE bapiache09,
    lv_obj_type   TYPE bapiache09-obj_type,
    lv_obj_key    TYPE bapiache09-obj_key,
    lv_obj_sys    TYPE bapiache09-obj_sys,
    lt_accountgl  TYPE TABLE OF bapiacgl09,
    lt_accountrec TYPE TABLE OF bapiacar09,
    lt_accountpay TYPE TABLE OF bapiacap09,
    lt_accounttax TYPE TABLE OF bapiactx09,
    lt_curramount TYPE TABLE OF bapiaccr09,
    lt_return     TYPE TABLE OF bapiret2,

    lv_bukrs      TYPE bkpf-bukrs VALUE 'RU01',
    lv_blart      TYPE bkpf-blart 'AB',
    lv_mwskz      TYPE bseg-mwskz 'A1',
    lv_wrbtr      TYPE bseg-wrbtr,
    lv_fwste      TYPE bset-fwste,
    lt_mwdat      TYPE TABLE OF rtax1u15.

  FIELD-SYMBOLS:
    <lfs_accountgl>  LIKE LINE OF lt_accountgl,
    <lfs_accountrec> LIKE LINE OF lt_accountrec,
    <lfs_accountpay> LIKE LINE OF lt_accountpay,
    <lfs_accounttax> LIKE LINE OF lt_accounttax,
    <lfs_curramount> LIKE LINE OF lt_curramount,
    <lfs_return>     LIKE LINE OF lt_return.

  CLEAR:
    ls_docheader,
    lv_obj_type,
    lv_obj_key,
    lv_obj_sys.

  REFRESH:
    lt_accountgl,
    lt_curramount,
    lt_return.

  ls_docheader-username = sy-uname.
  ls_docheader-comp_code = lv_bukrs.
  ls_docheader-doc_date = sy-datum.
  ls_docheader-pstng_date = sy-datum.
  ls_docheader-doc_type = lv_blart.
  ls_docheader-ref_doc_no = ''.
  ls_docheader-bus_act = 'RFBU'.

  INSERT INITIAL LINE INTO TABLE lt_accounttax ASSIGNING <lfs_accounttax>.
  <lfs_accounttax>-itemno_acc = 1.
  <lfs_accounttax>-gl_account = '0000480000'.
  <lfs_accounttax>-tax_code = lv_mwskz.
  <lfs_accounttax>-direct_tax = 'X'.

  INSERT INITIAL LINE INTO TABLE lt_curramount ASSIGNING <lfs_curramount>.
  <lfs_curramount>-itemno_acc = 1.
  <lfs_curramount>-curr_type = '00'.
  <lfs_curramount>-currency = 'RUB'.
  <lfs_curramount>-amt_base = -100.

  lv_wrbtr = <lfs_curramount>-amt_base.

  CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
    EXPORTING
      i_bukrs           = ls_docheader-comp_code
      i_mwskz           = lv_mwskz
      i_waers           = 'RUB'
      i_wrbtr           = lv_wrbtr
    IMPORTING
      e_fwste           = lv_fwste
    TABLES
      t_mwdat           = lt_mwdat
    EXCEPTIONS
      bukrs_not_found   = 1
      country_not_found = 2
      mwskz_not_defined = 3
      mwskz_not_valid   = 4
      ktosl_not_found   = 5
      kalsm_not_found   = 6
      parameter_error   = 7
      knumh_not_found   = 8
      kschl_not_found   = 9
      unknown_error     = 10
      account_not_found = 11
      txjcd_not_valid   = 12
      OTHERS            = 13.
   
  <lfs_curramount>-amt_doccur = lv_fwste.

  INSERT INITIAL LINE INTO TABLE lt_accounttax ASSIGNING <lfs_accounttax>.
  <lfs_accounttax>-itemno_acc = 2.
  <lfs_accounttax>-gl_account = '0000430000'.
  <lfs_accounttax>-tax_code = lv_mwskz.
  <lfs_accounttax>-direct_tax = 'X'.

  INSERT INITIAL LINE INTO TABLE lt_curramount ASSIGNING <lfs_curramount>.
  <lfs_curramount>-itemno_acc = 2.
  <lfs_curramount>-curr_type = '00'.
  <lfs_curramount>-currency = 'RUB'.
  <lfs_curramount>-amt_base = 100.

  lv_wrbtr = <lfs_curramount>-amt_base.

  CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
    EXPORTING
      i_bukrs           = ls_docheader-comp_code
      i_mwskz           = lv_mwskz
      i_waers           = 'RUB'
      i_wrbtr           = lv_wrbtr
    IMPORTING
      e_fwste           = lv_fwste
    TABLES
      t_mwdat           = lt_mwdat
    EXCEPTIONS
      bukrs_not_found   = 1
      country_not_found = 2
      mwskz_not_defined = 3
      mwskz_not_valid   = 4
      ktosl_not_found   = 5
      kalsm_not_found   = 6
      parameter_error   = 7
      knumh_not_found   = 8
      kschl_not_found   = 9
      unknown_error     = 10
      account_not_found = 11
      txjcd_not_valid   = 12
      OTHERS            = 13.
  
  <lfs_curramount>-amt_doccur = lv_fwste.

  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader    = ls_docheader
*     customercpd       =
*     contractheader    =
    IMPORTING
      obj_type          = lv_obj_type
      obj_key           = lv_obj_key
      obj_sys           = lv_obj_sys
    TABLES
      accountgl         = lt_accountgl
      accountreceivable = lt_accountrec
      accountpayable    = lt_accountpay
      accounttax        = lt_accounttax
      currencyamount    = lt_curramount
*     criteria          =
*     valuefield        =
*     extension1        =
      return            = lt_return
*     paymentcard       =
*     contractitem      =
*     extension2        =
*     realestate        =
*     accountwt         =
    .

  LOOP AT lt_return ASSIGNING <lfs_return>
    WHERE type CA 'EAX'.
    EXIT.
  ENDLOOP.

  IF sy-subrc EQ 0.
    ROLLBACK WORK.
  ELSE.
    COMMIT WORK AND WAIT.
  ENDIF.


Комментариев нет:

Отправить комментарий