Realizar Abono mediante BAPI BAPI_ACC_DOCUMENT_POST

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • raulgar
    Junior Member
    • dic
    • 28

    #1

    Realizar Abono mediante BAPI BAPI_ACC_DOCUMENT_POST

    Hola,

    Tengo el siguiente problema. Cuando utilizo esta bapi para crear el documento, si la cantidad de la factura es negativa, me tiene que realizar un abono cargando en la primera posición un 31. Sin embargo me realiza un cargo, introduciendo un 21. He estado mirando si hay algún parámetro para indicarle que realice el asiento al 31 pero no encuentro nada.

    Os pongo el link a dos capturas, una con el abono mal al 21 y otra que sería correcta al 31:
    Dropbox lets you back up photos from your iPhone, Android, Windows, or Mac. Learn more about secure cloud photo storage with Dropbox.


    A continuación os pego el código usado para rellenar las estructuras que le paso a la BAPI:

    *&---------------------------------------------------------------------*
    *& Form cargar_datos_documentheader
    *&---------------------------------------------------------------------*
    * Carga de la estructura DOCUMENTHEADER
    *----------------------------------------------------------------------*
    form cargar_documentheader.

    "Clase de documento
    wt_documentheader-doc_type = w_clfac.
    "Fecha de documento
    wt_documentheader-doc_date = sy-datum.
    "Fecha Contabilizacion
    wt_documentheader-pstng_date = wp_fechc.
    "Referencia
    wt_documentheader-ref_doc_no = wt_factura-vbeln.
    "Sociedad
    if wp_mmpp = 'X'.
    wt_documentheader-comp_code = '0101'.
    else.
    wt_documentheader-comp_code = wt_factura-kunrg+1(4).
    endif.
    "Texto cabecera documento
    if wp_mmpp = 'X'.
    concatenate 'FARLINE' ' ' sy-datum+4(2) '/' sy-datum(4) into
    wt_documentheader-header_txt.
    elseif wp_sum = 'X'.
    concatenate 'Suministro COFARES' ' ' sy-datum+4(2) '/'
    sy-datum(4) into wt_documentheader-header_txt.
    else.
    concatenate 'Servicio Suministro' ' ' sy-datum+4(2) '/'
    sy-datum(4) into wt_documentheader-header_txt.
    endif.
    "Usuario
    wt_documentheader-username = sy-uname.

    append wt_documentheader.

    endform. " cargar_datos_documentheader

    *&---------------------------------------------------------------------*
    *& Form CARGAR_DATOS_ACOUNTPAYABLE
    *&---------------------------------------------------------------------*
    * Carga de la estructura ACCOUNTPAYABLE
    *----------------------------------------------------------------------*
    form cargar_acountpayable.

    w_posicion = 1.
    "Posicion
    wt_accountpayable-itemno_acc = w_posicion.
    "Acreedor
    if wp_ic = 'X'.
    concatenate 'P' wt_factura-vkorg into wt_accountpayable-vendor_no.
    else.
    if wp_acree is initial.
    concatenate 'P' wt_factura-vkorg into wp_acree.
    endif.
    wt_accountpayable-vendor_no = wp_acree.
    endif.
    "Fecha base
    wt_accountpayable-bline_date = sy-datum.
    "Texto
    select name1 into wt_accountpayable-item_text from kna1
    where kunnr = wt_factura-kunag.
    endselect.

    append wt_accountpayable.

    endform. " CARGAR_DATOS_ACOUNTPAYABLE


    *&---------------------------------------------------------------------*
    *& Form CARGAR_DATOS_ACCOUNTGL
    *&---------------------------------------------------------------------*
    * Cargo la estructura ACCOUNTGL
    *----------------------------------------------------------------------*
    form cargar_accountgl.

    loop at wt_posiciones_normal.

    w_posicion = w_posicion + 1.
    "Posicion
    wt_accountgl-itemno_acc = w_posicion.
    "Indicador de impuestos
    wt_accountgl-tax_code = wt_posiciones_normal-mwskz.
    replace wt_accountgl-tax_code(1) with 'S'
    into wt_accountgl-tax_code.
    "Cuenta de mayor
    wt_accountgl-gl_account = wp_cuent.
    "Centro de coste
    if wp_mmpp = 'X'.
    select single cencos
    from ztb_mm_07
    into wt_accountgl-costcenter
    where centro = '0301'.
    else.
    select single cencos
    from ztb_mm_07
    into wt_accountgl-costcenter
    where sociedad = wt_factura-kunrg+1(4)
    and centro = wt_posiciones_normal-werks.
    endif.
    "Centro de beneficio
    if wp_mmpp <> 'X'.
    select single cebe
    from ztb_mm_07
    into wt_accountgl-profit_ctr
    where sociedad = wt_factura-kunrg+1(4)
    and centro = wt_posiciones_normal-werks.
    endif.
    "Segmento
    wt_accountgl-segment = wt_posiciones_normal-segment.

    append wt_accountgl.
    clear wt_accountgl.

    endloop.

    loop at wt_posiciones_iva.
    data: w_indicador type bapiacgl09-tax_code.

    w_indicador = wt_posiciones_iva-mwskz.
    replace w_indicador(1) with 'S'
    into w_indicador.
    read table wt_indicadores with key indicador = w_indicador.
    if sy-subrc <> 0.
    clear wt_indicadores.
    wt_indicadores-indicador = w_indicador.
    wt_indicadores-netwr = wt_posiciones_iva-hwbas.
    wt_indicadores-mwsbp = wt_posiciones_iva-dmbtr.
    append wt_indicadores.
    else.
    wt_indicadores-netwr = wt_indicadores-netwr +
    wt_posiciones_iva-hwbas.
    wt_indicadores-mwsbp = wt_indicadores-mwsbp +
    wt_posiciones_iva-dmbtr.
    modify wt_indicadores index sy-tabix.
    endif.
    endloop.
    endform. " CARGAR_DATOS_ACCOUNTGL

    *&---------------------------------------------------------------------*
    *& Form CARGAR_DATOS_ACCOUNTTAX
    *&---------------------------------------------------------------------*
    * Cargo la estructura ACCOUNTTAX
    *----------------------------------------------------------------------*
    form cargar_accounttax.

    loop at wt_indicadores.

    w_posicion = w_posicion + 1.
    "Posicion
    wt_accounttax-itemno_acc = w_posicion.
    "Condicion
    select single a003~kschl
    from konp inner join a003
    on konp~knumh = a003~knumh
    into wt_accounttax-cond_key
    where aland = 'ES' and
    mwskz = wt_indicadores-indicador.
    "Tipo de impuesto
    wt_accounttax-tax_code = wt_indicadores-indicador.

    append wt_accounttax.
    clear wt_accounttax.

    endloop.

    endform. " CARGAR_DATOS_ACCOUNTTAX

    *&---------------------------------------------------------------------*
    *& Form CARGAR_DATOS_CURRENCYAMOUNT
    *&---------------------------------------------------------------------*
    * Carga de la estructura CURRENCYAMOUNT
    *----------------------------------------------------------------------*
    form cargar_currencyamount.
    data: w_netwr like vbrk-netwr,
    w_mwsbk like vbrk-mwsbk.


    "---------------POSICION 1-------------------------------------
    w_posicion = 1.
    "Posicion
    wt_currencyamount-itemno_acc = w_posicion.
    "Importe
    wt_currencyamount-amt_doccur = ws_posicion1-dmbtr * ( - 1 ) .
    "Moneda
    wt_currencyamount-currency = 'EUR'.

    append wt_currencyamount.
    clear wt_currencyamount.

    "---------------POSICION 2-------------------------------------
    loop at wt_posiciones_normal.
    w_posicion = w_posicion + 1.
    "Posicion
    wt_currencyamount-itemno_acc = w_posicion.
    "Importe
    if wt_posiciones_normal-shkzg = 'S'.
    wt_currencyamount-amt_doccur = wt_posiciones_normal-dmbtr * ( -1 ).
    else.
    wt_currencyamount-amt_doccur = wt_posiciones_normal-dmbtr.
    endif.
    "Moneda
    wt_currencyamount-currency = 'EUR'.

    append wt_currencyamount.
    clear wt_currencyamount.
    endloop.

    "---------------POSICION 3-------------------------------------
    loop at wt_indicadores.
    w_posicion = w_posicion + 1.
    "Posicion
    wt_currencyamount-itemno_acc = w_posicion.
    "Base
    wt_currencyamount-amt_base = wt_indicadores-netwr.
    "Importe
    wt_currencyamount-amt_doccur = wt_indicadores-mwsbp.
    "Moneda
    wt_currencyamount-currency = 'EUR'.

    append wt_currencyamount.
    clear wt_currencyamount.
    endloop.

    endform. " CARGAR_DATOS_CURRENCYAMOUNT


    call function 'BAPI_ACC_DOCUMENT_POST'
    exporting
    documentheader = wt_documentheader
    * CUSTOMERCPD =
    * CONTRACTHEADER =
    * IMPORTING
    * OBJ_TYPE =
    * OBJ_KEY =
    * OBJ_SYS =
    tables
    accountgl = wt_accountgl
    * ACCOUNTRECEIVABLE =
    accountpayable = wt_accountpayable
    accounttax = wt_accounttax
    currencyamount = wt_currencyamount
    * CRITERIA =
    * VALUEFIELD =
    * EXTENSION1 =
    return = wt_retorno
    * PAYMENTCARD =
    * CONTRACTITEM =
    * EXTENSION2 =
    * REALESTATE =
    * ACCOUNTWT =
    .
  • nyolo
    Junior Member
    • may
    • 4

    #2
    Me imagino que a nadie le importará, pero respondo para que sirva.

    La clave contable la deriva del tipo de cuenta (acreedor, deudor, mayor,...), y del signo del importe. En tu caso, tendrás que multiplicar *-1 para que te de le resultado correcto.

    Comentario

    Trabajando...