Archivo

Posts Tagged ‘BAPI_ACC_DOCUMENT_POST’

BAPI_ACC_DOCUMENT_POST – Actualizar campo REBZG

Caso: Al querer modificar los campos REBZG, REBZZ, REBZJ, la BAPI_ACC_DOCUMENT_POST no tiene disponibles los campos.

Solución: Se debe revisar la nota SAP 487722, en la cual indica en la segunda opción (la que utilicé yo) la creación de una BTE por la FIBF.

Pasos:

1. Por lo pronto, se debe hacer la llamada a la BAPI BAPI BAPI_ACC_DOCUMENT_POST con la tabla EXTENSION1 (no agrego todo el código para no aburrir)

DATA:it_bapiacextc TYPE TABLE OF bapiacextc.

DATA lwa_bapiacextc TYPE bapiacextc.

CLEAR lwa_bapiacextc.

lwa_bapiacextc-field1 = lv_posnr.

lwa_bapiacextc-field2 = lwa_out-belnr. » Nro. documento factura

lwa_bapiacextc-field3 = lwa_out-gjahr. » Ejercicio doc.factura

lwa_bapiacextc-field4 = ‘001’. » Posición doc.factura (siempre 001)

APPEND lwa_bapiacextc TO it_bapiacextc.

CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’

EXPORTING

documentheader = lwa_header

TABLES

accountgl = lit_accountgl

currencyamount = lit_curr

extension1 = it_bapiacextc » Se habilita esta tabla para enviar el doc.ref.fact

return = lit_return

extension2 = it_bapiparex.

2. Luego por la SE37, copiamos el módulo de función SAMPLE_INTERFACE_RWBAPI01 (en mi caso la copié al módulo ZACT_DOC_REF_FACT_RWBAPI01), en donde vamos a agregar el código para actualizar los campos. Se crea entonces el módulo de funciones: ZACT_DOC_REF_FACT_RWBAPI01.

3. Modificamos la función para modificar los campos

DATA: lw_bapiacextc TYPE bapiacextc.

LOOP AT extension.

MOVE extension TO lw_bapiacextc.

LOOP AT it_accit WHERE posnr = lw_bapiacextc-field1.

it_accit-rebzg = lw_bapiacextc-field2.

it_accit-rebzj = lw_bapiacextc-field3.

it_accit-rebzz = lw_bapiacextc-field4.

modify it_accit.

ENDLOOP.

ENDLOOP.

4. Luego ingresamos a la transacción FIBF para crear una BTE:

5. Finalmente al ejecutar la BAPI, vemos que se actualizan los campos requeridos

Anuncio publicitario

Error RW022 en BAPI_ACC_DOCUMENT_POST o BAPI_ACC_DOCUMENT_CHECK

Caso: Al ejecutar la BAPI BAPI_ACC_DOCUMENT_CHECK o la BAPI_ACC_DOCUMENT_POST se genera el error RW022 “Interfase RW: Saldo en moneda de transacción” y el monto de diferencia es de un monto mínimo (ejemplo, 1 o 2 pesos chilenos –CLP-). También aparece como cabecera el error RW609: Error en el documento: BKPFF ….


Solución:
Luego de dar varias vueltas al tema y dado que estaba trabajando con una moneda distinta a la moneda de la sociedad, el problema era al traspasar los valores al campo AMT_DOCCUR. Utilicé entonces la BAPI_CURRENCY_CONV_TO_EXTERNAL y funcionó OK.

CALL FUNCTION ‘BAPI_CURRENCY_CONV_TO_EXTERNAL’
EXPORTING
currency = wa_currencyamount-currency
amount_internal = wa_datos-monto_prov
IMPORTING
amount_external = wa_currencyamount-amt_doccur.

Va el código:

DATA: wa_documentheader TYPE bapiache09,
      it_accountgl      TYPE STANDARD TABLE OF bapiacgl09,
      wa_accountgl      TYPE bapiacgl09,
      it_currencyamount TYPE STANDARD TABLE OF bapiaccr09,
      wa_currencyamount TYPE bapiaccr09,
      it_return         TYPE STANDARD TABLE OF bapiret2,
      wa_return         TYPE bapiret2,
      lw_error          TYPE ty_error,
      lv_posnr_acc      TYPE posnr_acc,
      wa_datos          TYPE ty_datos,
      lv_gl_account     TYPE hkont,
      lv_importe        TYPE bapidoccur.
 
* Clear de tablas internas
REFRESH: it_accountgl,
         it_currencyamount,
         it_return.
 
* Cabecera del documento
CLEAR: wa_documentheader.
MOVE sy-uname                TO wa_documentheader-username.   " Usuario
MOVE p_bukrs                 TO wa_documentheader-comp_code.  " Sociedad
MOVE pa_stida                TO wa_documentheader-doc_date.   " Fecha del documento
MOVE p_fecha_doc             TO wa_documentheader-pstng_date. " Fecha de contabilización
MOVE 'AB'                    TO wa_documentheader-doc_type.   " Tipo de documento
MOVE p_texto_periodo         TO wa_documentheader-header_txt. " Texto cabecera documento
MOVE 'RFBU'                  TO wa_documentheader-bus_act.    " Operación empresarial
 
lv_posnr_acc = '0000000000'.                                  " Inicializo la Posición
* GL Account 001
CLEAR: lv_importe.
LOOP AT pt_datos INTO wa_datos.
 
  CLEAR : wa_accountgl, wa_currencyamount.
  ADD 1 TO lv_posnr_acc.
  MOVE lv_posnr_acc              TO wa_accountgl-itemno_acc.  " Line Item No
 
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = pa_gast          " Cuenta de gasto
    IMPORTING
      output = lv_gl_account.
 
  MOVE lv_gl_account             TO wa_accountgl-gl_account.  " Cuenta contable - G/L Account
  MOVE p_texto_periodo           TO wa_accountgl-item_text.   " Texto del ítem
  MOVE p_bukrs                   TO wa_accountgl-comp_code.   " Sociedad
  MOVE wa_datos-gsber            TO wa_accountgl-bus_area.    " División
  MOVE wa_datos-kostl            TO wa_accountgl-costcenter.  " Centro de costo = CeBe
  wa_accountgl-acct_type = 'S'.
  APPEND wa_accountgl TO it_accountgl.
 
* Fill Currency Line item
  MOVE lv_posnr_acc              TO wa_currencyamount-itemno_acc.  " Line Item No
* curr_type ==>  00  Moneda del documento /// curr_type ==>  10  Moneda de sociedad
  MOVE '00'                      TO wa_currencyamount-curr_type.  " Currency Type
  MOVE p_moneda                  TO wa_currencyamount-currency .  " Moneda
 
*      wa_currencyamount-amt_doccur = wa_datos-monto_prov.           " Aquí estaba el error, para CLP no funcionaba
  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
    EXPORTING
      currency        = wa_currencyamount-currency
      amount_internal = wa_datos-monto_prov
    IMPORTING
      amount_external = wa_currencyamount-amt_doccur.
 
  ADD wa_currencyamount-amt_doccur TO lv_importe.                " MOD Q_EPURICELLI - 21.04.2016 -
  APPEND wa_currencyamount TO it_currencyamount.
ENDLOOP.
 
* GL Account 002
CLEAR : wa_accountgl, wa_currencyamount.
 
ADD 1 TO lv_posnr_acc.
MOVE lv_posnr_acc              TO wa_accountgl-itemno_acc.  " Line Item No
 
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  EXPORTING
    input  = pa_prov          " Cuenta de provisión
  IMPORTING
    output = lv_gl_account.
 
MOVE lv_gl_account             TO wa_accountgl-gl_account.  " Cuenta contable - G/L Account
MOVE p_bukrs                   TO wa_accountgl-comp_code.   " Sociedad
MOVE 'Prov.incobrables'        TO wa_accountgl-item_text.   " Texto del ítem
wa_accountgl-acct_type = 'S'.
APPEND wa_accountgl TO it_accountgl.
 
* Fill Currency Line item
MOVE lv_posnr_acc              TO wa_currencyamount-itemno_acc.  " Line Item No
* curr_type ==>  00  Moneda del documento // curr_type ==>  10  Moneda de sociedad
MOVE '00'                      TO wa_currencyamount-curr_type.   " Currency Type
MOVE p_moneda                  TO wa_currencyamount-currency .   " Moneda
lv_importe = lv_importe * -1.
MOVE  lv_importe               TO wa_currencyamount-amt_doccur. " Monto
APPEND wa_currencyamount TO it_currencyamount.
 
* Llamado a la BAPI MODO TEST
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
  EXPORTING
    documentheader = wa_documentheader
  TABLES
    accountgl      = it_accountgl
    currencyamount = it_currencyamount
    return         = it_return.
 
LOOP AT it_return INTO wa_return WHERE type = 'E'.
  p_error = 'X'.
  CONCATENATE 'E' wa_return-id wa_return-number INTO lw_error-error.
  lw_error-mensaje = wa_return-message.
  APPEND lw_error TO pt_error.
ENDLOOP.