Foro de programación ABAP

SAP / ABAP => Programación ABAP => Mensaje iniciado por: AldoSosaMeza en 23 de Julio de 2010, 12:46:25 am

Título: BAPI_PO_CHANGE para cambiar ekpo-bsgru
Publicado por: AldoSosaMeza en 23 de Julio de 2010, 12:46:25 am
Hola a todos! Solamente quisiera saber si alguien me puede dar su consejo, tengo una bapi que modifica bien el campo bsgru en ekpo pero cuando hay mas de 1 posicion con el mismo codigo modifica  ambas posiciones! la bapi esta asi actualmente:
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.

cUAL SERA EL PROBLEMA?
Título: Re: BAPI_PO_CHANGE para cambiar ekpo-bsgru
Publicado por: dluis en 23 de Julio de 2010, 09:09:38 am
Hola, igual es un poco tontería preguntártelo, pero le estas haciendo el LOOP a las posiciones?

Algo así, aunque sería bueno ver mas de tu código para entender el problema.

Código: [Seleccionar]
LOOP AT  it_ekpo.
   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.
ENDLOOP.

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

Salu2.
Título: Re: BAPI_PO_CHANGE para cambiar ekpo-bsgru
Publicado por: AldoSosaMeza en 23 de Julio de 2010, 05:55:39 pm
Gracias por la ayuda el programa si tiene un loop donde compara con la tabla ekbe para ver las diferencias: aqui el loop
--------------------------
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.