PDA

Ver la Versión Completa : BAPI_PO_CHANGE no aplica por posicion


beginabap
26/07/10, 23:07:08
Hola todos! Tengo una BAPI que deberia modificar solamente una posicion de la tabla ekpo pero no esta funcionando y esta modificando el campo BSGRU de las posiciones que repiten el material. el Codigo es el siguiente:
-----------------------
DATA:
t_POITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
t_POITEMx LIKE BAPIMEPOITEMx OCCURS 0 WITH HEADER LINE,
l_flag(1),
flag_exebapi(1),
g_text(50) TYPE c.


LOOP AT it_ekpo.

READ TABLE it_ekbe WITH KEY ebeln = it_ekpo-ebeln
ebelp = it_ekpo-ebelp.

flag_exebapi = 'N'.

IF SY-SUBRC = 4.
WRITE: / ' NINGUN REGISTRO ENCONTRADO ', it_ekpo-ebeln, ' POSICION: ', it_ekpo-ebelp, ' MAT.: ',it_ekpo-matnr.
flag_exebapi = 'S'.

ELSE.
IF it_ekpo-menge > it_ekbe-menge.
WRITE: / ' REGISTRO CON DIFERENCIA: ', it_ekpo-ebeln, ' POSICION: ', it_ekpo-ebelp, ' cant_ekpo: ',it_ekpo-MENGE, ' vrs Cant_ekbe: ', it_ekbe-menge.
flag_exebapi = 'S'.
ELSE.
WRITE: / ' REGISTRO ENCONTRADO: ', it_ekpo-ebeln, ' POSICION: ', it_ekpo-ebelp, ' cant ',it_ekpo-MENGE, ' versus ', it_ekbe-menge.
flag_exebapi = 'N'.
ENDIF.
ENDIF.

IF flag_exebapi = 'S'. " Ejecuta la bapi para actualizar el registro.
*-------------------------------------------------
clear t_poitem.
* * perform move_to_bapi.
t_POITEM-po_item = it_ekpo-ebelp.
t_POITEM-order_reason = '100'.
APPEND t_poitem.

clear t_poitemx.
t_POITEMx-po_item = it_ekpo-ebelp.
t_POITEMx-po_itemx = 'X'.
t_POITEMx-order_reason = '100'.
APPEND t_poitemx.

CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = it_ekpo-ebeln
TABLES
POITEM = t_POITEM
POITEMx = t_POITEMx.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
*------------------------------------------------
ENDIF.
ENDLOOP.
Que tendre malo que no modifica por posicion?

beginabap
30/07/10, 22:58:07
Alguien que sepa como resolver este problema?

Fabian leonardo velasquez
30/07/10, 23:51:36
Buena tarde
En la asignacion de valor que estas haciendo
para el campo
t_POITEMx-order_reason = '100'. esta mal. en esta tabla informas que campo es el que se modifica
debes enviarlo
t_POITEMx-order_reason = 'X'.

Intenta y me comentas si no te funciona.