Difference between revisions of "SAP FI BAPI"

From SapWiki
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
==BAPI_ACC_DOCUMENT_POST ==
 
==BAPI_ACC_DOCUMENT_POST ==
 
*Ejemplo con extensión
 
*Ejemplo con extensión
  FORM document_post USING p_pernr
+
  <nowiki>FORM document_post USING p_pernr
                          p_begda
+
                        p_begda
                          p_endda
+
                        p_endda
                          p_monto
+
                        p_monto
                          p_modo
+
                        p_modo
                CHANGING p_subrc
+
                CHANGING p_subrc
                          p_return TYPE bapiret2.
+
                        p_return TYPE bapiret2.
  DATA:
+
  DATA:
    ls_documentheader    LIKE bapiache09,
+
    ls_documentheader    LIKE bapiache09,
    l_customercpd        LIKE bapiacpa09,
+
    l_customercpd        LIKE bapiacpa09,
    l_fica_hd            LIKE bapiaccahd,
+
    l_fica_hd            LIKE bapiaccahd,
    it_accountreceivable LIKE TABLE OF bapiacar09 WITH HEADER LINE,
+
    it_accountreceivable LIKE TABLE OF bapiacar09 WITH HEADER LINE,
    it_accountgl        LIKE TABLE OF bapiacgl09 WITH HEADER LINE,
+
    it_accountgl        LIKE TABLE OF bapiacgl09 WITH HEADER LINE,
    it_accounttax        LIKE TABLE OF bapiactx09 WITH HEADER LINE,
+
    it_accounttax        LIKE TABLE OF bapiactx09 WITH HEADER LINE,
    it_criteria          LIKE TABLE OF bapiackec9 WITH HEADER LINE,
+
    it_criteria          LIKE TABLE OF bapiackec9 WITH HEADER LINE,
    it_valuefield        LIKE TABLE OF bapiackev9 WITH HEADER LINE,
+
    it_valuefield        LIKE TABLE OF bapiackev9 WITH HEADER LINE,
    it_currencyamount    LIKE TABLE OF bapiaccr09 WITH HEADER LINE,
+
    it_currencyamount    LIKE TABLE OF bapiaccr09 WITH HEADER LINE,
    it_return            LIKE TABLE OF bapiret2  WITH HEADER LINE,
+
    it_return            LIKE TABLE OF bapiret2  WITH HEADER LINE,
    it_receivers        LIKE TABLE OF bdi_logsys WITH HEADER LINE,
+
    it_receivers        LIKE TABLE OF bdi_logsys WITH HEADER LINE,
    it_fica_it          LIKE TABLE OF bapiaccait WITH HEADER LINE,
+
    it_fica_it          LIKE TABLE OF bapiaccait WITH HEADER LINE,
    it_accountpayable    LIKE TABLE OF bapiacap09 WITH HEADER LINE,
+
    it_accountpayable    LIKE TABLE OF bapiacap09 WITH HEADER LINE,
    it_paymentcard      LIKE TABLE OF bapiacpc09 WITH HEADER LINE,
+
    it_paymentcard      LIKE TABLE OF bapiacpc09 WITH HEADER LINE,
    it_ext              LIKE TABLE OF bapiacextc WITH HEADER LINE,
+
    it_ext              LIKE TABLE OF bapiacextc WITH HEADER LINE,
    it_re                LIKE TABLE OF bapiacre09 WITH HEADER LINE,
+
    it_re                LIKE TABLE OF bapiacre09 WITH HEADER LINE,
    it_ext2              LIKE TABLE OF bapiparex  WITH HEADER LINE.
+
    it_ext2              LIKE TABLE OF bapiparex  WITH HEADER LINE.
 +
 
 +
  DATA: lt_p0001 TYPE TABLE OF p0001 WITH HEADER LINE,
 +
        lt_p0185 TYPE TABLE OF p0185 WITH HEADER LINE.
 +
 
 +
  DATA: l_type LIKE ls_documentheader-obj_type,
 +
        l_key  LIKE ls_documentheader-obj_key,
 +
        l_sys  LIKE ls_documentheader-obj_sys.
 +
  DATA l_pos TYPE posnr_acc.
 +
  DATA l_amount  TYPE bapicurr-bapicurr.
 +
 
 +
  CALL FUNCTION 'HR_READ_INFOTYPE'
 +
    EXPORTING
 +
      pernr          = p_pernr
 +
      infty          = '0001'
 +
* IMPORTING
 +
*    SUBRC          =
 +
    TABLES
 +
      infty_tab      = lt_p0001
 +
    EXCEPTIONS
 +
      infty_not_found = 1
 +
      OTHERS          = 2.
 +
  IF sy-subrc <> 0.
 +
* Implement suitable error handling here
 +
  ENDIF.
 +
 
 +
  LOOP AT lt_p0001 WHERE begda <= p_endda
 +
                    AND endda >= p_begda.
 +
  ENDLOOP.
 +
 
 +
*  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
 +
*    IMPORTING
 +
*      own_logical_system = ls_documentheader-obj_sys.
 +
*  ls_documentheader-obj_type  = 'BKPFF'.
 +
*  ls_documentheader-obj_key = '$'.
 +
  ls_documentheader-bus_act = 'RFBU'.
 +
*  ls_documentheader-obj_key    =
 +
  ls_documentheader-username  = sy-uname.
 +
  ls_documentheader-header_txt = 'Bonificación'.            "#EC NOTEXT
 +
* gd_documentheader-obj_key_r  =
 +
* GD_DOCUMENTHEADER-reason_rev =
 +
  ls_documentheader-comp_code  = lt_p0001-bukrs.
 +
* GD_DOCUMENTHEADER-AC_DOC_NO  =
 +
  ls_documentheader-fisc_year  = sy-datum(4).
 +
  ls_documentheader-doc_date  = sy-datum.
 +
  ls_documentheader-doc_type  = 'SA'.
 +
  ls_documentheader-pstng_date = sy-datum.
 +
* GD_DOCUMENTHEADER-TRANS_DATE =
 +
* GD_DOCUMENTHEADER-VALUE_DATE =
 +
  ls_documentheader-fis_period = sy-datum+4(2).
 +
* GD_DOCUMENTHEADER-DOC_TYPE  =
 +
* GD_DOCUMENTHEADER-REF_DOC_NO =
 +
* GD_DOCUMENTHEADER-COMPO_ACC  =
 +
  ls_documentheader-bus_act    = 'RFBU'.
 +
*  l_documentheader-ref_doc_no  = '1'.
 +
 
 +
  DATA l_valor(100).
 +
 
 +
  l_pos = l_pos + 1.
 +
  CLEAR: it_accountgl.
 +
 
 +
  l_valor = '11111'.  "cuenta
 +
  it_accountgl-itemno_acc  = l_pos.
 +
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
 +
    EXPORTING
 +
      input  = l_valor
 +
    IMPORTING
 +
      output = it_accountgl-gl_account.
 +
 
 +
  CONCATENATE 'Bonificación Empleado' p_pernr INTO it_accountgl-item_text
 +
                                  SEPARATED BY space.
 +
 
 +
  it_accountgl-value_date  = sy-datum.
 +
  APPEND it_accountgl.
 +
 
 +
* 2da pos
 +
  CLEAR it_accountgl.
 +
  l_pos = l_pos + 1.
 +
 
 +
  l_valor = '22222000'. "N° cuenta
 +
 
 +
  it_accountgl-itemno_acc  = l_pos.
 +
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
 +
    EXPORTING
 +
      input  = l_valor
 +
    IMPORTING
 +
      output = it_accountgl-gl_account.
 +
 
 +
  CONCATENATE 'Bonificación Empleado' p_pernr INTO it_accountgl-item_text.
 +
 
 +
  APPEND it_accountgl.
 +
 
 +
* ver SAP Note 487722 - Using EXTENSION1 for accounting BAPIs
 +
* extension 1
 +
  CLEAR it_ext.
 +
  it_ext-field1 = it_accountgl-itemno_acc.
 +
  it_ext-field2 = 'PERNR'.
 +
  MOVE p_pernr TO it_ext-field3.
 +
  APPEND it_ext.
 +
 
 +
* montos
 +
  l_amount = p_monto.
 +
 
 +
  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
 +
    EXPORTING
 +
      currency        = 'CLP'
 +
      amount_internal = l_amount
 +
    IMPORTING
 +
      amount_external = l_amount.
 +
 
 +
  CLEAR it_currencyamount.
 +
  it_currencyamount-itemno_acc  = 1.
 +
*  it_currencyamount-curr_type    = '00'.
 +
  it_currencyamount-currency    = 'CLP'.
 +
* IT_CURRENCYAMOUNT-CURRENCY_ISO =
 +
  it_currencyamount-amt_doccur  =  l_amount.
 +
* IT_CURRENCYAMOUNT-EXCH_RATE    = .
 +
* it_currencyamount-amt_base    =
 +
* IT_CURRENCYAMOUNT-DISC_BASE    =
 +
* it_currencyamount-exch_rate_v  =
 +
* it_currencyamount-disc_amt    =
 +
  APPEND it_currencyamount.
 +
 
 +
  CLEAR it_currencyamount.
 +
  it_currencyamount-itemno_acc  = 2.
 +
*it_currencyamount-curr_type    = '00'.
 +
  it_currencyamount-currency    = 'CLP'.
 +
* IT_CURRENCYAMOUNT-CURRENCY_ISO =
 +
  it_currencyamount-amt_doccur  = l_amount * -1.
 +
* IT_CURRENCYAMOUNT-EXCH_RATE    =
 +
*  it_currencyamount-amt_base    =
 +
* IT_CURRENCYAMOUNT-DISC_BASE    =
 +
*  it_currencyamount-exch_rate_v =
 +
* it_currencyamount-disc_amt    =
 +
  APPEND it_currencyamount.
 +
 
 +
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
 +
    EXPORTING
 +
      documentheader = ls_documentheader
 +
*    customercpd    = ls_customercpd
 +
*    contractheader = ls_fica_hd
 +
    IMPORTING
 +
      obj_type      = l_type
 +
      obj_key        = l_key
 +
      obj_sys        = l_sys
 +
    TABLES
 +
      accountgl      = it_accountgl
 +
*    accountreceivable = it_accountreceivable
 +
      accountpayable = it_accountpayable
 +
*    accounttax    = it_accounttax
 +
      currencyamount = it_currencyamount
 +
*    criteria      = it_criteria
 +
*    valuefield    = it_valuefield
 +
      extension1    = it_ext
 +
      return        = it_return
 +
*    paymentcard    = it_paymentcard
 +
*    contractitem  = it_fica_it
 +
*    extension2    = it_ext2
 +
*    realestate    = it_re
 +
    .
 +
 
 +
  LOOP AT it_return INTO p_return WHERE type = 'E'.
 +
  ENDLOOP.
 +
  IF sy-subrc NE 0.
 +
    p_subrc = 0.
 +
  ELSE.
 +
    p_subrc = 1.
 +
 
 +
    MESSAGE ID p_return-id  TYPE 'I' NUMBER p_return-number
 +
          WITH p_return-message_v1
 +
          p_return-message_v2
 +
          p_return-message_v3
 +
          p_return-message_v4  DISPLAY LIKE 'E'.
 +
  ENDIF.
 +
 
 +
ENDFORM.                    " PAGO_ANTICIPADO</nowiki>
 +
 
 +
==Notas BAPI FI==
 +
===SAP Note 487722 - Using EXTENSION1 for accounting BAPIs===
 +
 
 +
===Implementing CMOD/SMOD exit ACBAPI01 with enhancement structure EXTENSION1, exit EXIT_SAPLACC4_001, include ZXACCU15===
 +
===Implementing the Business Transaction Event (BTE, also OPEN FI) RWBAPI01 with enhancement structure EXTENSION1 at BAPI_ACC_DOCUMENT_POST===
 +
 
 +
Transaction FIBF:
 +
#Call the menu path "Settings > Products -> ...of a customer" and create a product that mirrors the function which is to be mapped in the BTE.
 +
#Create a function module that contains the same interface, such as example module SAMPLE_INTERFACE_RWBAPI01.
 +
#Call menu path "Settings -> Process function modules > ...of a customer" enter process = RWBAPI01, the function module created and the product.
 +
#Finally, activate the product you have created in the first step so that the module will run.
 +
 
 +
ejemplo para colocar Nº de Personal:
 
   
 
   
  DATA: lt_p0001 TYPE TABLE OF p0001 WITH HEADER LINE,
+
<nowiki>* extension 1, ver funcion Z_SAMPLE_INTERFACE_RWBAPI01, BTE RWBAPI01 (tran. FIBF)
        lt_p0185 TYPE TABLE OF p0185 WITH HEADER LINE.
+
  CLEAR it_ext.
+
  it_ext-field1 = it_accountgl-itemno_acc.
  DATA: l_type LIKE ls_documentheader-obj_type,
+
  it_ext-field2 = 'PERNR'.
        l_key  LIKE ls_documentheader-obj_key,
+
  MOVE p_pernr TO it_ext-field3.
        l_sys  LIKE ls_documentheader-obj_sys.
+
  APPEND it_ext.
  DATA l_pos TYPE posnr_acc.
+
 
  DATA l_amount  TYPE bapicurr-bapicurr.
+
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
+
    EXPORTING
  CALL FUNCTION 'HR_READ_INFOTYPE'
+
      documentheader    = ls_documentheader
    EXPORTING
+
    IMPORTING
      pernr          = p_pernr
+
      obj_type          = l_type
      infty           = '0001'
+
      obj_key           = l_key
* IMPORTING
+
      obj_sys           = l_sys
*    SUBRC           =
+
    TABLES
    TABLES
+
       accountgl        = it_accountgl
      infty_tab       = lt_p0001
+
      accountpayable    = it_accountpayable
    EXCEPTIONS
+
      currencyamount    = it_currencyamount
      infty_not_found = 1
+
      extension1       = it_ext
       OTHERS          = 2.
+
      return            = it_return
  IF sy-subrc <> 0.
+
    .
* Implement suitable error handling here
+
 
  ENDIF.
+
FUNCTION z_sample_interface_rwbapi01.
+
*"----------------------------------------------------------------------
  LOOP AT lt_p0001 WHERE begda <= p_endda
+
*"*"Interfase local
                    AND endda >= p_begda.
+
*" TABLES
  ENDLOOP.
+
*"      IT_ACCIT STRUCTURE ACCIT
+
*"     IT_ACCCR STRUCTURE ACCCR
*  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
+
*"      RETURN STRUCTURE BAPIRET2
*   IMPORTING
+
*"     EXTENSION STRUCTURE BAPIACEXTC
*      own_logical_system = ls_documentheader-obj_sys.
+
*"     IT_ACCWT STRUCTURE  ACCIT_WT
*  ls_documentheader-obj_type  = 'BKPFF'.
+
*" CHANGING
*  ls_documentheader-obj_key = '$'.
+
*"    VALUE(DOCUMENT_HEADER) LIKE ACCHD STRUCTURE ACCHD
  ls_documentheader-bus_act = 'RFBU'.
+
*"----------------------------------------------------------------------
*  ls_documentheader-obj_key    =
+
  DATA : ls_bapi_extension TYPE bapiacextc.
  ls_documentheader-username  = sy-uname.
+
  DATA ld_posnr TYPE posnr_acc.
  ls_documentheader-header_txt = 'Bonificación'.            "#EC NOTEXT
+
 
* gd_documentheader-obj_key_r  =
+
  CLEAR: ls_bapi_extension.
* GD_DOCUMENTHEADER-reason_rev =
+
 
  ls_documentheader-comp_code  = lt_p0001-bukrs.
+
  LOOP AT extension INTO ls_bapi_extension.
* GD_DOCUMENTHEADER-AC_DOC_NO  =
+
     ld_posnr = ls_bapi_extension-field1.
  ls_documentheader-fisc_year  = sy-datum(4).
+
* evaluate fieldname
  ls_documentheader-doc_date  = sy-datum.
+
     CASE ls_bapi_extension-field2.
  ls_documentheader-doc_type  = 'SA'.
+
       WHEN 'PERNR'.
  ls_documentheader-pstng_date = sy-datum.
+
* set document Status
* GD_DOCUMENTHEADER-TRANS_DATE =
+
         READ TABLE it_accit
* GD_DOCUMENTHEADER-VALUE_DATE =
+
            WITH KEY posnr = ld_posnr.
  ls_documentheader-fis_period = sy-datum+4(2).
+
        CHECK sy-subrc EQ 0.
* GD_DOCUMENTHEADER-DOC_TYPE  =
+
        it_accit-pernr = ls_bapi_extension-field3.
* GD_DOCUMENTHEADER-REF_DOC_NO =
+
        MODIFY it_accit INDEX sy-tabix.
* GD_DOCUMENTHEADER-COMPO_ACC  =
+
    ENDCASE.
  ls_documentheader-bus_act    = 'RFBU'.
+
  ENDLOOP.
*  l_documentheader-ref_doc_no  = '1'.
 
 
  DATA l_valor(100).
 
 
  l_pos = l_pos + 1.
 
  CLEAR: it_accountgl.
 
 
  l_valor = '11111'.  "cuenta
 
  it_accountgl-itemno_acc  = l_pos.
 
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
 
    EXPORTING
 
      input  = l_valor
 
    IMPORTING
 
      output = it_accountgl-gl_account.
 
 
  CONCATENATE 'Bonificación Empleado' p_pernr INTO it_accountgl-item_text
 
                                    SEPARATED BY space.
 
 
  it_accountgl-value_date  = sy-datum.
 
  APPEND it_accountgl.
 
   
 
* 2da pos
 
  CLEAR it_accountgl.
 
  l_pos = l_pos + 1.
 
   
 
  l_valor = '22222000'. "N° cuenta
 
   
 
  it_accountgl-itemno_acc = l_pos.
 
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
 
     EXPORTING
 
      input = l_valor
 
     IMPORTING
 
      output = it_accountgl-gl_account.
 
   
 
  CONCATENATE 'Bonificación Empleado' p_pernr INTO it_accountgl-item_text.
 
   
 
  APPEND it_accountgl.
 
   
 
* ver SAP Note 487722 - Using EXTENSION1 for accounting BAPIs
 
* Implementing CMOD/SMOD exit ACBAPI01 with enhancement structure EXTENSION1:
 
* extension 1
 
  CLEAR it_ext.
 
  it_ext-field1 = it_accountgl-itemno_acc.
 
  it_ext-field2 = 'PERNR'.
 
  MOVE p_pernr TO it_ext-field3.
 
  APPEND it_ext.
 
 
* montos
 
  l_amount = p_monto.
 
 
  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
 
    EXPORTING
 
      currency        = 'CLP'
 
      amount_internal = l_amount
 
    IMPORTING
 
      amount_external = l_amount.
 
 
  CLEAR it_currencyamount.
 
  it_currencyamount-itemno_acc  = 1.
 
*  it_currencyamount-curr_type    = '00'.
 
  it_currencyamount-currency    = 'CLP'.
 
* IT_CURRENCYAMOUNT-CURRENCY_ISO =
 
  it_currencyamount-amt_doccur  =  l_amount.
 
* IT_CURRENCYAMOUNT-EXCH_RATE    = .
 
* it_currencyamount-amt_base    =
 
* IT_CURRENCYAMOUNT-DISC_BASE    =
 
* it_currencyamount-exch_rate_v  =
 
* it_currencyamount-disc_amt    =
 
  APPEND it_currencyamount.
 
 
  CLEAR it_currencyamount.
 
  it_currencyamount-itemno_acc  = 2.
 
*it_currencyamount-curr_type    = '00'.
 
  it_currencyamount-currency    = 'CLP'.
 
* IT_CURRENCYAMOUNT-CURRENCY_ISO =
 
  it_currencyamount-amt_doccur  = l_amount * -1.
 
* IT_CURRENCYAMOUNT-EXCH_RATE    =
 
*  it_currencyamount-amt_base    =
 
* IT_CURRENCYAMOUNT-DISC_BASE    =
 
*  it_currencyamount-exch_rate_v =
 
* it_currencyamount-disc_amt    =
 
  APPEND it_currencyamount.
 
 
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
 
    EXPORTING
 
      documentheader = ls_documentheader
 
*    customercpd    = ls_customercpd
 
*     contractheader = ls_fica_hd
 
    IMPORTING
 
      obj_type      = l_type
 
      obj_key        = l_key
 
      obj_sys        = l_sys
 
    TABLES
 
      accountgl      = it_accountgl
 
*     accountreceivable = it_accountreceivable
 
      accountpayable = it_accountpayable
 
*     accounttax    = it_accounttax
 
      currencyamount = it_currencyamount
 
*    criteria       = it_criteria
 
*     valuefield    = it_valuefield
 
      extension1    = it_ext
 
      return         = it_return
 
*    paymentcard    = it_paymentcard
 
*    contractitem  = it_fica_it
 
*    extension2    = it_ext2
 
*    realestate    = it_re
 
    .
 
 
  LOOP AT it_return INTO p_return WHERE type = 'E'.
 
  ENDLOOP.
 
  IF sy-subrc NE 0.
 
    p_subrc = 0.
 
  ELSE.
 
    p_subrc = 1.
 
 
    MESSAGE ID p_return-id  TYPE 'I' NUMBER p_return-number
 
          WITH p_return-message_v1
 
          p_return-message_v2
 
          p_return-message_v3
 
          p_return-message_v4  DISPLAY LIKE 'E'.
 
  ENDIF.
 
 
ENDFORM.                   " PAGO_ANTICIPADO
 
  
==Notas BAPI FI==
+
ENDFUNCTION.</nowiki>
*SAP Note 487722 - Using EXTENSION1 for accounting BAPIs
+
==BAPI_EXCHRATE_CREATEMULTIPLE - Insert One or More Exchange Rates in SAP Tables==

Latest revision as of 19:05, 22 November 2024

BAPI_ACC_DOCUMENT_POST

  • Ejemplo con extensión
FORM document_post USING p_pernr
                         p_begda
                         p_endda
                         p_monto
                         p_modo
                CHANGING p_subrc
                         p_return TYPE bapiret2.
  DATA:
    ls_documentheader    LIKE bapiache09,
    l_customercpd        LIKE bapiacpa09,
    l_fica_hd            LIKE bapiaccahd,
    it_accountreceivable LIKE TABLE OF bapiacar09 WITH HEADER LINE,
    it_accountgl         LIKE TABLE OF bapiacgl09 WITH HEADER LINE,
    it_accounttax        LIKE TABLE OF bapiactx09 WITH HEADER LINE,
    it_criteria          LIKE TABLE OF bapiackec9 WITH HEADER LINE,
    it_valuefield        LIKE TABLE OF bapiackev9 WITH HEADER LINE,
    it_currencyamount    LIKE TABLE OF bapiaccr09 WITH HEADER LINE,
    it_return            LIKE TABLE OF bapiret2   WITH HEADER LINE,
    it_receivers         LIKE TABLE OF bdi_logsys WITH HEADER LINE,
    it_fica_it           LIKE TABLE OF bapiaccait WITH HEADER LINE,
    it_accountpayable    LIKE TABLE OF bapiacap09 WITH HEADER LINE,
    it_paymentcard       LIKE TABLE OF bapiacpc09 WITH HEADER LINE,
    it_ext               LIKE TABLE OF bapiacextc WITH HEADER LINE,
    it_re                LIKE TABLE OF bapiacre09 WITH HEADER LINE,
    it_ext2              LIKE TABLE OF bapiparex  WITH HEADER LINE.

  DATA: lt_p0001 TYPE TABLE OF p0001 WITH HEADER LINE,
        lt_p0185 TYPE TABLE OF p0185 WITH HEADER LINE.

  DATA: l_type LIKE ls_documentheader-obj_type,
        l_key  LIKE ls_documentheader-obj_key,
        l_sys  LIKE ls_documentheader-obj_sys.
  DATA l_pos TYPE posnr_acc.
  DATA l_amount  TYPE bapicurr-bapicurr.

  CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
      pernr           = p_pernr
      infty           = '0001'
* IMPORTING
*     SUBRC           =
    TABLES
      infty_tab       = lt_p0001
    EXCEPTIONS
      infty_not_found = 1
      OTHERS          = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  LOOP AT lt_p0001 WHERE begda <= p_endda
                    AND endda >= p_begda.
  ENDLOOP.

*  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
*    IMPORTING
*      own_logical_system = ls_documentheader-obj_sys.
*  ls_documentheader-obj_type   = 'BKPFF'.
*  ls_documentheader-obj_key = '$'.
  ls_documentheader-bus_act = 'RFBU'.
*  ls_documentheader-obj_key    =
  ls_documentheader-username   = sy-uname.
  ls_documentheader-header_txt = 'Bonificación'.            "#EC NOTEXT
* gd_documentheader-obj_key_r  =
* GD_DOCUMENTHEADER-reason_rev =
  ls_documentheader-comp_code  = lt_p0001-bukrs.
* GD_DOCUMENTHEADER-AC_DOC_NO  =
  ls_documentheader-fisc_year  = sy-datum(4).
  ls_documentheader-doc_date   = sy-datum.
  ls_documentheader-doc_type   = 'SA'.
  ls_documentheader-pstng_date = sy-datum.
* GD_DOCUMENTHEADER-TRANS_DATE =
* GD_DOCUMENTHEADER-VALUE_DATE =
  ls_documentheader-fis_period = sy-datum+4(2).
* GD_DOCUMENTHEADER-DOC_TYPE   =
* GD_DOCUMENTHEADER-REF_DOC_NO =
* GD_DOCUMENTHEADER-COMPO_ACC  =
  ls_documentheader-bus_act    = 'RFBU'.
*  l_documentheader-ref_doc_no  = '1'.

  DATA l_valor(100).

  l_pos = l_pos + 1.
  CLEAR: it_accountgl.

  l_valor = '11111'.  "cuenta
  it_accountgl-itemno_acc  = l_pos.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = l_valor
    IMPORTING
      output = it_accountgl-gl_account.

  CONCATENATE 'Bonificación Empleado' p_pernr INTO it_accountgl-item_text
                                   SEPARATED BY space.

  it_accountgl-value_date  = sy-datum.
  APPEND it_accountgl.

* 2da pos
  CLEAR it_accountgl.
  l_pos = l_pos + 1.

  l_valor = '22222000'. "N° cuenta

  it_accountgl-itemno_acc  = l_pos.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = l_valor
    IMPORTING
      output = it_accountgl-gl_account.

  CONCATENATE 'Bonificación Empleado' p_pernr INTO it_accountgl-item_text.

  APPEND it_accountgl.

* ver SAP Note 487722 - Using EXTENSION1 for accounting BAPIs
* extension 1
  CLEAR it_ext.
  it_ext-field1 = it_accountgl-itemno_acc.
  it_ext-field2 = 'PERNR'.
  MOVE p_pernr TO it_ext-field3.
  APPEND it_ext.

* montos
  l_amount = p_monto.

  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
    EXPORTING
      currency        = 'CLP'
      amount_internal = l_amount
    IMPORTING
      amount_external = l_amount.

  CLEAR it_currencyamount.
  it_currencyamount-itemno_acc   = 1.
*  it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'CLP'.
* IT_CURRENCYAMOUNT-CURRENCY_ISO =
  it_currencyamount-amt_doccur   =  l_amount.
* IT_CURRENCYAMOUNT-EXCH_RATE    = .
* it_currencyamount-amt_base     =
* IT_CURRENCYAMOUNT-DISC_BASE    =
* it_currencyamount-exch_rate_v  =
* it_currencyamount-disc_amt     =
  APPEND it_currencyamount.

  CLEAR it_currencyamount.
  it_currencyamount-itemno_acc   = 2.
*it_currencyamount-curr_type    = '00'.
  it_currencyamount-currency     = 'CLP'.
* IT_CURRENCYAMOUNT-CURRENCY_ISO =
  it_currencyamount-amt_doccur   = l_amount * -1.
* IT_CURRENCYAMOUNT-EXCH_RATE    =
*  it_currencyamount-amt_base    =
* IT_CURRENCYAMOUNT-DISC_BASE    =
*  it_currencyamount-exch_rate_v =
* it_currencyamount-disc_amt     =
  APPEND it_currencyamount.

  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader = ls_documentheader
*     customercpd    = ls_customercpd
*     contractheader = ls_fica_hd
    IMPORTING
      obj_type       = l_type
      obj_key        = l_key
      obj_sys        = l_sys
    TABLES
      accountgl      = it_accountgl
*     accountreceivable = it_accountreceivable
      accountpayable = it_accountpayable
*     accounttax     = it_accounttax
      currencyamount = it_currencyamount
*     criteria       = it_criteria
*     valuefield     = it_valuefield
      extension1     = it_ext
      return         = it_return
*     paymentcard    = it_paymentcard
*     contractitem   = it_fica_it
*     extension2     = it_ext2
*     realestate     = it_re
    .

  LOOP AT it_return INTO p_return WHERE type = 'E'.
  ENDLOOP.
  IF sy-subrc NE 0.
    p_subrc = 0.
  ELSE.
    p_subrc = 1.

    MESSAGE ID p_return-id  TYPE 'I' NUMBER p_return-number
          WITH p_return-message_v1
          p_return-message_v2
          p_return-message_v3
          p_return-message_v4  DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.                    " PAGO_ANTICIPADO

Notas BAPI FI

SAP Note 487722 - Using EXTENSION1 for accounting BAPIs

Implementing CMOD/SMOD exit ACBAPI01 with enhancement structure EXTENSION1, exit EXIT_SAPLACC4_001, include ZXACCU15

Implementing the Business Transaction Event (BTE, also OPEN FI) RWBAPI01 with enhancement structure EXTENSION1 at BAPI_ACC_DOCUMENT_POST

Transaction FIBF:

  1. Call the menu path "Settings > Products -> ...of a customer" and create a product that mirrors the function which is to be mapped in the BTE.
  2. Create a function module that contains the same interface, such as example module SAMPLE_INTERFACE_RWBAPI01.
  3. Call menu path "Settings -> Process function modules > ...of a customer" enter process = RWBAPI01, the function module created and the product.
  4. Finally, activate the product you have created in the first step so that the module will run.

ejemplo para colocar Nº de Personal:

* extension 1, ver funcion Z_SAMPLE_INTERFACE_RWBAPI01, BTE RWBAPI01 (tran. FIBF)
  CLEAR it_ext.
  it_ext-field1 = it_accountgl-itemno_acc.
  it_ext-field2 = 'PERNR'.
  MOVE p_pernr TO it_ext-field3.
  APPEND it_ext.

  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader    = ls_documentheader
    IMPORTING
      obj_type          = l_type
      obj_key           = l_key
      obj_sys           = l_sys
    TABLES
      accountgl         = it_accountgl
      accountpayable    = it_accountpayable
      currencyamount    = it_currencyamount
      extension1        = it_ext
      return            = it_return
    .

FUNCTION z_sample_interface_rwbapi01.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  TABLES
*"      IT_ACCIT STRUCTURE  ACCIT
*"      IT_ACCCR STRUCTURE  ACCCR
*"      RETURN STRUCTURE  BAPIRET2
*"      EXTENSION STRUCTURE  BAPIACEXTC
*"      IT_ACCWT STRUCTURE  ACCIT_WT
*"  CHANGING
*"     VALUE(DOCUMENT_HEADER) LIKE  ACCHD STRUCTURE  ACCHD
*"----------------------------------------------------------------------
  DATA : ls_bapi_extension TYPE bapiacextc.
  DATA ld_posnr TYPE posnr_acc.

  CLEAR: ls_bapi_extension.

  LOOP AT extension INTO ls_bapi_extension.
    ld_posnr = ls_bapi_extension-field1.
* evaluate fieldname
    CASE ls_bapi_extension-field2.
      WHEN 'PERNR'.
* set document Status
        READ TABLE it_accit
             WITH KEY posnr = ld_posnr.
        CHECK sy-subrc EQ 0.
        it_accit-pernr = ls_bapi_extension-field3.
        MODIFY it_accit INDEX sy-tabix.
    ENDCASE.
  ENDLOOP.

ENDFUNCTION.

BAPI_EXCHRATE_CREATEMULTIPLE - Insert One or More Exchange Rates in SAP Tables