
Hola expertos,
Publicar los documentos con Compensación de partidas abiertas y hacer las transferencias es un requisito muy común en la mayoría de los proyectos basados en FICO de implementación de SAP.
La limpieza se puede hacer de múltiples maneras
Hasta el día de hoy, para los requisitos personalizados, usamos BDC en las transacciones F-30 o FB05 con publicación de transferencia con opciones de compensación o usamos los tres módulos de funciones a continuación que se detallan en el blog a continuación.
https://blogs.sap.com/2016/10/04/fb05-or-f-30-using-a-sap-fm-estándar/
Sin embargo, con la nube ABAP y las aplicaciones Fiori que están apareciendo, se requería un enfoque alternativo para realizar las publicaciones de transferencia.
Nuevo enfoque para las publicaciones de transferencia:
Durante el análisis para encontrar una nueva clase o módulo de función para evitar la codificación BDC y realizar la actividad anterior, las siguientes aplicaciones cargan la aplicación de entrada de diario F2548 https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail /Apps(‘F2548’)/S24OP y la interfaz basada en SOAP https://api.sap.com/api/OP_JOURNALENTRYBULKCLEARINGREQUEST_IN/overview que está publicando las entradas de diario se evalúa y se da cuenta de que la clase CL_FDC_ACCDOC_POST=> ACCDOC_POST se usa en la misma.
Antes de pasar a la solución técnica, comprendamos qué es la publicación de Transferencia con Compensación:
Digamos que el cliente 1 tiene un total de artículos abiertos de 2000 Eur y quiere transferir 1500 a otro cliente y borrar la publicación original, podemos usar cualquiera de las transacciones FB05 o F-30 para hacer lo mismo usando las opciones
Transacción F-30
Ingrese el monto a transferir del Cliente 1
Monto de la transferencia
Ahora haga clic en los botones Procesar elementos abiertos y verifique la lista de elementos abiertos
Ahora haga clic en la diferencia de cargo para cargar los montos restantes al Cliente 2 para la compensación como se muestra a continuación, ingrese el monto como *
Al hacer clic en el botón Atrás, la publicación se verá como se muestra a continuación con los elementos de línea del cliente y los montos que se transferirán.
Por lo tanto, puede hacer las contabilizaciones y borrar el Cliente 1. Cuando abra las posiciones abiertas nuevamente para el Cliente 1, se borrarán 1500.
Encuentre el siguiente código de referencia para la referencia del escenario de contabilización Cliente – Transferencia de cliente.
NOTA: El siguiente código ayudará a comenzar con las publicaciones con compensación, pero podría no funcionar 1-1 en escenarios prácticos.
*&---------------------------------------------------------------------*
*& Report Z_POST_CLEAR
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_post_clear.
DATA: fdc_accdoc_tax TYPE fdc_t_accdoc_tax,
fdc_accdoc_whtax TYPE fdc_t_accdoc_whtax,
fdc_accdoc_itm_to_be_clrd TYPE fdc_t_accdoc_itm_to_be_clrd,
fdc_accdoc_pay_diff TYPE fdc_t_accdoc_pay_diff,
accdoc_itm_copa TYPE fdc_t_accdoc_itm_copa,
fdc_accdoc_itm TYPE fdc_t_accdoc_itm,
accdoc_dispute TYPE fdc_t_accdoc_dispute,
accdoc_one_time_account TYPE fdc_t_accdoc_one_time_account,
itm_payment_only TYPE fdc_s_accdoc_with_item,
fdc_accdoc_warning_messages TYPE fdc_t_accdoc_warning_messages,
warning TYPE fdc_t_accdoc_warning_messages.
** Fill header info
DATA(headerinfo) = VALUE fdc_s_accdoc_hdr( bukrs="0001"
blart = cl_abap_context_info=>get_system_date( )
budat = cl_abap_context_info=>get_system_date( )
waers="EUR"
hwaer="EUR" " Get the currencies from CDS View p_ldcmpcurr
hwae2 = 'EUR' " Get the currencies from CDS View p_ldcmpcurr
xblnr="Test13"
gjahr="2023"
tcode = cl_fdc_posting_impl=>co_fdc_s_accdoc_hdr_tcode-ar_clearing "FBDC_C022'
auglv = 'UMBUCHNG'
curt1 = '10' " Get the currencies from CDS View p_ldcmpcurr
curt2 = '10' " Get the currencies from CDS View p_ldcmpcurr
awtyp = 'BKPFF'
augtx = 'cleared header text' ).
"Get the Open Items from the CDS view I_OperationalAcctgDocItem and loop at it and fill the item informations
DATA(iteminfo) = VALUE fdc_t_accdoc_itm(
( shkzg = 'S'
bschl="17" " Other Clearing
bukrs="0001"
gjahr="2023"
wrbtr = 1500
dmbtr = 1500
dmbe2 = 1500
zuonr="zuonr"
kunnr = Customer 1 " for the GL clearing fill HKONT instead of KUNNR
posnr="0000000001"
koart="D"
)
).
DATA(clearinfo) = VALUE fdc_t_accdoc_itm_to_be_clrd(
( belnr="0100000000""Get the Open Documents from the CDS view I_OperationalAcctgDocItem
bukrs="0001"
gjahr="2023"
awitem = '000002'
wrbtr = 100
dmbtr = 100
dmbe2 = 100
shkzg = 'H'
xaktp = abap_true
koart="D"
konko = Customer2
hkont="1331100010"
)
).
** Simulate the posting to check the errors
cl_fdc_accdoc_post=>accdoc_simulate(
IMPORTING
et_ausz2 = DATA(ausz2)
et_ausz3 = DATA(ausz3)
et_message = DATA(return)
et_simulated_gl_view = DATA(simulated_gl_view)
et_fdc_accdoc_hdr_sim = DATA(fdc_accdoc_hdr_sim)
es_fdc_accdoc_disc_doc = DATA(fdc_accdoc_disc_doc)
CHANGING
cs_fdc_accdoc_hdr = headerinfo
ct_fdc_accdoc_tax = fdc_accdoc_tax
ct_fdc_accdoc_whtax = fdc_accdoc_whtax
ct_fdc_accdoc_itm_to_be_clrd = clearinfo
ct_fdc_accdoc_pay_diff = fdc_accdoc_pay_diff
ct_accdoc_itm_copa = accdoc_itm_copa
ct_fdc_accdoc_itm = iteminfo
ct_accdoc_dispute = accdoc_dispute
ct_accdoc_one_time_account = accdoc_one_time_account
cs_with_itm_payment_only = itm_payment_only
ct_fdc_accdoc_warning_messages = fdc_accdoc_warning_messages " Warning Messages
).
IF return IS INITIAL.
** For RAP based apps use thie function module with destination None to avoid commit dumps
CALL METHOD cl_fdc_accdoc_post=>accdoc_post
EXPORTING
is_fdc_accdoc_hdr = headerinfo
it_fdc_accdoc_itm = iteminfo
iv_ignore_warnings = abap_true
IMPORTING
et_message = DATA(message)
ev_awref = DATA(awref)
es_posted_document = DATA(posted_document)
CHANGING
ct_fdc_accdoc_itm_to_be_clrd = clearinfo
ct_fdc_accdoc_warning_messages = warning
RECEIVING
rv_save_rejected = DATA(rejected).
IF posted_document IS NOT INITIAL.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
Por lo tanto, puede evitar la programación de BDC para las transacciones F-30 y FB05.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073