Comparto un Perform donde tengo como cambiar la condición de pago en un pedido.
Para ello utilizaré la Bapi BAPI_PO_CHANGE.
FORM modificar_condicion_pago .
* Tabla y estructuras para la bapi de cambio
DATA: l_st_poheaderx LIKE bapimepoheaderx,
l_st_poheader LIKE bapimepoheader,
l_st_resultado LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: l_ebeln_new(1) TYPE c. " Indicador nuevo doc.compras
DATA: gc_2 LIKE bapita-wait VALUE '2'.
SORT g_it_ped_compras BY ebeln.
LOOP AT g_it_ped_compras.
* La cabecera de pedido de compras sólo se realizará una vez por
* nº de documento.
AT NEW ebeln.
* Se informa la variable de nuevo documento de compras.
l_ebeln_new = 'X'.
ENDAT.
* Si se activó la variable de nuevo documento de compras.
IF NOT l_ebeln_new IS INITIAL.
* Se inicializa la variable de nuevo documento de compras.
CLEAR l_ebeln_new.
IF g_it_ped_compras-bukrs BETWEEN '0001' AND '1000'.
SELECT SINGLE * FROM lfa1
WHERE lifnr = g_it_ped_compras-lifnr
AND vbund BETWEEN '000001' AND '001000'.
IF sy-subrc = 0.
l_st_poheader-pmnttrms = 'ZXXX'. "Condición de pago nueva
* Marcar la referencia
l_st_poheaderx-pmnttrms = 'X'.
* Modificar el campo ZTERM de la tabla ekko
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = g_it_ped_compras-ebeln
poheader = l_st_poheader
poheaderx = l_st_poheaderx
TABLES
return = l_st_resultado.
* Si no existe error se genera un commint
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = gc_2.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.