2013年10月10日 星期四

BAPI_ACC_DOCUMENT_POST enhancement

緣起:
由於一般費用請款需要上傳tax,而user又要求tax要註明憑證資訊;偏偏 BAPI_ACC_DOCUMENT_POST根本就沒有tax 的item text欄位可以填...不得以之下,只好動用BAPI_ACC_DOCUMENT_POST的EXTENSION1這個table來輔助上傳tax item_text。

步驟:
1. 首先客製Z_ACC_DOCUMENT_POST,呼叫 BAPI_ACC_DOCUMENT_POST
FUNCTION Z_ACC_DOCUMENT_POST.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_DOCUMENTHEADER) TYPE  BAPIACHE09
*"     VALUE(I_CUSTOMERCPD) TYPE  BAPIACPA09 OPTIONAL
*"     VALUE(I_CONTRACTHEADER) TYPE  BAPIACCAHD OPTIONAL
*"  EXPORTING
*"     VALUE(E_OBJ_TYPE) TYPE  BAPIACHE09-OBJ_TYPE
*"     VALUE(E_OBJ_KEY) TYPE  BAPIACHE09-OBJ_KEY
*"     VALUE(E_OBJ_SYS) TYPE  BAPIACHE09-OBJ_SYS
*"  TABLES
*"      T_ACCOUNTGL STRUCTURE  BAPIACGL09 OPTIONAL
*"      T_ACCOUNTRECEIVABLE STRUCTURE  BAPIACAR09 OPTIONAL
*"      T_ACCOUNTPAYABLE STRUCTURE  BAPIACAP09 OPTIONAL
*"      T_ACCOUNTTAX STRUCTURE  BAPIACTX09 OPTIONAL
*"      T_CURRENCYAMOUNT STRUCTURE  BAPIACCR09
*"      T_CRITERIA STRUCTURE  BAPIACKEC9 OPTIONAL
*"      T_VALUEFIELD STRUCTURE  BAPIACKEV9 OPTIONAL
*"      T_EXTENSION1 STRUCTURE  BAPIACEXTC OPTIONAL
*"      T_RETURN STRUCTURE  BAPIRET2
*"      T_PAYMENTCARD STRUCTURE  BAPIACPC09 OPTIONAL
*"      T_CONTRACTITEM STRUCTURE  BAPIACCAIT OPTIONAL
*"      T_EXTENSION2 STRUCTURE  BAPIPAREX OPTIONAL
*"      T_REALESTATE STRUCTURE  BAPIACRE09 OPTIONAL
*"      T_ACCOUNTWT STRUCTURE  BAPIACWT09 OPTIONAL
*"----------------------------------------------------------------------
  data l_ok type char0001.

  call function 'BAPI_ACC_DOCUMENT_POST'
    exporting
      DOCUMENTHEADER    = I_DOCUMENTHEADER
      CUSTOMERCPD       = I_CUSTOMERCPD
      CONTRACTHEADER    = I_CONTRACTHEADER
    importing
      OBJ_TYPE          = E_OBJ_TYPE
      OBJ_KEY           = E_OBJ_KEY
      OBJ_SYS           = E_OBJ_SYS
    tables
      ACCOUNTGL         = T_ACCOUNTGL
      ACCOUNTRECEIVABLE = T_ACCOUNTRECEIVABLE
      ACCOUNTPAYABLE    = T_ACCOUNTPAYABLE
      ACCOUNTTAX        = T_ACCOUNTTAX
      CURRENCYAMOUNT    = T_CURRENCYAMOUNT
      CRITERIA          = T_CRITERIA
      VALUEFIELD        = T_VALUEFIELD
      EXTENSION1        = T_EXTENSION1
      RETURN            = T_RETURN
      PAYMENTCARD       = T_PAYMENTCARD
      CONTRACTITEM      = T_CONTRACTITEM
      EXTENSION2        = T_EXTENSION2
      REALESTATE        = T_REALESTATE
      ACCOUNTWT         = T_ACCOUNTWT.

  l_ok = '1'.

  loop at t_return.
    if t_return-type = 'E'.
      l_ok = '0'.
    endif.
  endloop.

  if l_ok = '1'.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait = 'X'.
  endif.
ENDFUNCTION.
 
 

2.上傳example
T_ACCOUNTGL
ITEMNO_ACC                     0000000010
GL_ACCOUNT                     67390010
ITEM_TEXT                      TEST -消耗品
DOC_TYPE                       SA
COMP_CODE                      1000
BUS_AREA                       1000
PSTNG_DATE                     2013/10/09
VALUE_DATE                     2013/10/09


T_ACCOUNTPAYABLE
ITEMNO_ACC                     0000000020
VENDOR_NO                      100696
COMP_CODE                      1000
BUS_AREA                       1000
PMNTTRMS                       M030
BLINE_DATE                     2013/10/09
ITEM_TEXT                      TEST -消耗品


T_ACCOUNTTAX
ITEMNO_ACC                     0000000030
GL_ACCOUNT                     12640010
TAX_CODE                       21
ITEMNO_TAX                     000010

T_CURRENCYAMOUNT
ITEMNO_ACC                     0000000010
CURRENCY_ISO                   TWD
AMT_DOCCUR                                        1,000.0000


ITEMNO_ACC                     0000000020
CURRENCY_ISO                   TWD
AMT_DOCCUR                                        1,050.0000-
DISC_BASE                                           210.0000-


ITEMNO_ACC                     0000000030
CURRENCY_ISO                   TWD
AMT_DOCCUR                                           50.0000
AMT_BASE                                          1,000.0000


T_EXTENSION1
FIELD1                             30
FIELD2                             SGTXT
FIELD3                             ZE10000000 1021001 86378995
FIELD4


3.copy SAMPLE_INTERFACE_RWBAPI01 to ZSAMPLE_INTERFACE_RWBAPI01,並implement code:
  data: wa like IT_ACCIT,
        i type i value 0,
        wa_e like EXTENSION,
        ind type sy-tabix.

  loop at EXTENSION into wa_e.
    read table IT_ACCIT with key POSNR = wa_e-field1 into wa.
    ind = sy-tabix.
    if wa_e-field2 eq 'SGTXT'.
      wa-SGTXT = wa_e-field3.
      modify IT_ACCIT from wa index ind.
      i = i + 1.
    endif.
  endloop.
  


4.客製IMG(在各client都要做,無法transport)





5. 結果







 

沒有留言:

張貼留言