#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: 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 = . |
#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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|