PDA

Ver la Versión Completa : Bapi BAPI_OBJCL_CHANGE


andresf02
15/11/11, 11:23:14
Buenos dias.

Estoy intentando usar la bapi BAPI_OBJCL_CHANGE pero no me esta realizando lo que necesito.

En el foro me dijeron que esta bapi me servia para realizar el proceso que se realiza normalmente por la transaccion estandar IL02; es decir, quiero actualizar o cambiar el valor actual de una caracteristica de una ubicacion tecnica.

Si entran a la IL02, dan el codigo de una ubicacion tecnica, la transaccion despliega los datos de la ubicacion y en la pestaña "Caracteristicas" muestra todos los valores que tiene cada una de las caracteristicas asociadas a dicha ubicacion tecnica. Lo que quiero es modificar el valor de una de esas caracteristicas.

El codigo que tengo y que no me esta funcionando es el siguiente:



*Obtengo las caracteristicas de una clase
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = wa_kssk-objek " = '1001-010'
objecttable = p_tcode " = 'IFLOT'
classnum = l_classnum " = 'SUERTE'
classtype = wa_kssk-klart " = '003'
TABLES
allocvaluesnum = i_CARACT_NUM "devuelve las caract num
allocvalueschar = i_CARACT_CHAR "devuelve las caract char
allocvaluescurr = i_CARACT_CURR "devuelve las caract curr
return = i_return.






loop at i_caract_num.
read table caract_num into wa_num with key charact = i_caract_num-charact.
if sy-subrc ne 0.
append i_caract_num to caract_num.
endif.
endloop.
loop at i_caract_char.
read table caract_char into wa_char with key charact = i_caract_char-charact.
if sy-subrc ne 0.
append i_caract_char to caract_char.
endif.
endloop.
loop at i_caract_curr.
read table caract_curr into wa_curr with key charact = i_caract_curr-charact.
if sy-subrc ne 0.
append i_caract_curr to caract_curr.
endif.
endloop.


*Aqui es donde no me funciona
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = wa_kssk-objek " = '1001-010'
objecttable = p_tcode " = 'IFLOT'
classnum = l_classnum " = 'SUERTE'
classtype = wa_kssk-klart " = '003'
TABLES
allocvaluesnumnew = caract_num
allocvaluescharnew = caract_char
allocvaluescurrnew = caract_curr
return = return.



No se como especificarle a la bapi la caracterisitca que quiero cambiar y el nuevo valor que le quiero poner.

En mi caso quiero cambiar una caracteristica tipo CURR, asi que mediante debugging modifcaba la caracteristica que quedaba alojada en la tabla "caract_curr" y en el campo "value_to" le ponia el nuevo valor, pero al ajecutar la bapi no hacia nada; consultaba por la IL02 y seguia con el valor antiguo.


Los datos basicos son:

Clase = 'SUERTE'
Cat. Clase = '003' "ubicacion tecnica
Tabla = 'IFLOT'
Caracteristica = 'VALOR_STOCK_APS' "Tipo CURR
Valor actual = 0 USD
Valor nuevo = 1000 USD


Si puedieran explicarme como debo pasar estos valores a la bapi de tal manera que luego de ejecutarla me cambie el valor de la caracteristica "VALOR_STOCK_APS" de 0 a 1000 USD y que lo pueda ver reflejado al entrar a la transaccion IL02.

Gracias!

DCErick
15/11/11, 14:47:20
Hola, que te regresa en la tabla return despues de ejecutar la BAPI?

Si en return te dice que todo salio bien, entonces puede ser que te falte ejecutar la función BAPI_TRANSACTION_COMMIT despues de ejecutar la BAPI.

andresf02
15/11/11, 18:39:53
Hola,

Gracias por la respuesta.

Esta es la forma como estoy ejecutando la BAPI:


CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = wa_kssk-objek " = '1001-010'
objecttable = p_tcode " = 'IFLOT'
classnum = l_classnum " = 'SUERTE'
classtype = wa_kssk-klart " = '003' "Ub.Tecnica
TABLES
allocvaluesnumnew = caract_num
allocvaluescharnew = caract_char
allocvaluescurrnew = caract_curr
return = return.



Voy a modificar 1 caracteristica que se encuentra en la tabla CARACT_CURR. En las otras 2 tablas hay otras caratceristicas pero no las quiero modificar.


La tabla CARACT_CURR tiene un solo registro y estructura:


CHARACT VALOR_STOCK_APS
VALUE_FROM 5.0000000000000000E+06
VALUE_TO 1.0000000000000000E+00
VALUE_RELATION 1
CURRENCY_FROM COP
CURRENCY_TO COP
CURRENCY_FROM_ISO COP
CURRENCY_TO_ISO COP
INHERITED
INSTANCE 000
CHARACT_DESCR VALOR STOCK APS



Desconozco para que sirven TODOS los campos de esta tabla, solo estoy colocando el valor nuevo que quiero actualizar en el campo VALUE_TO; pero no se si en los demas campos me haga falta algo.


Asi como esta, ejecuto la bapi por debugging y luego recibo lo siguiente en la tabla RESULT:


REGISTRO #1:
======================
TYPE S
ID CL
NUMBER 506
MESSAGE Las asignaciones serán modificadas
LOG_NO $000003
LOG_MSG_NO 000001
MESSAGE_V1
MESSAGE_V2
MESSAGE_V3
MESSAGE_V4
PARAMETER
ROW 0
FIELD
SYSTEM


REGISTRO #2:
======================
TYPE S
ID CL
NUMBER 737
MESSAGE Asignación modificada
LOG_NO
LOG_MSG_NO 000000
MESSAGE_V1
MESSAGE_V2
MESSAGE_V3
MESSAGE_V4
PARAMETER
ROW 0
FIELD
SYSTEM





Luego hago lo siguiente justo despues de la BAPI


LOOP AT return into wa_return WHERE type = 'S'.
EXIT.
ENDLOOP.

IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ELSE.
RAISE error_funcion.
ENDIF.

Por debugging me doy cuenta que si entra y ejecuta la BAPI_TRANSACTION_COMMIT

pero al ir a la transaccion IL02 y colocar el codigo de la ubicacion tecnica 1001-010 voy a buscar el valor de la caracteristica VALOR_STOCK_APS y continua con el valor viejo 5.0000000000000000E+06 que era el que aparecia en la tabla CARACT_CURR en el campo VALUE_FROM



Podria ayudarme a encontrar que es que me hace falta para que se actualice este valor y poder visualizarlo por la IL02


Gracias!

andresf02
15/11/11, 18:47:59
Ok, ya pude resolver el problema.

Era que el valor que actualiza la BAPI es el VALUE_FROM y no el VALUE_TO.

Puse los valores nuevos en el VALUE_FROM de la tabla CARACT_CURR y los actualizo perfecto.

Gracias por la ayuda

DCErick
15/11/11, 19:36:47
Ok, ya pude resolver el problema.

Era que el valor que actualiza la BAPI es el VALUE_FROM y no el VALUE_TO.

Puse los valores nuevos en el VALUE_FROM de la tabla CARACT_CURR y los actualizo perfecto.

Gracias por la ayuda

jeje eso te queria postear, que los campos esos no indican que vas a pasar de un valor a otro, mas bien son como un rango Entre 5 y 1 FROM TO