Bapi BAPI_OBJCL_CHANGE

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • andresf02
    Senior Member
    • nov
    • 190

    #1

    Bapi BAPI_OBJCL_CHANGE

    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:

    Código:
    *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
    Moderator
    • mar
    • 1090

    #2
    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.
    -------------------
    ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

    Comentario

    • andresf02
      Senior Member
      • nov
      • 190

      #3
      Hola,

      Gracias por la respuesta.

      Esta es la forma como estoy ejecutando la BAPI:

      Código:
      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:

      Código:
      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:

      Código:
      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

      Código:
      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!

      Comentario

      • andresf02
        Senior Member
        • nov
        • 190

        #4
        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

        Comentario

        • DCErick
          Moderator
          • mar
          • 1090

          #5
          Originalmente publicado por andresf02
          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
          -------------------
          ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

          Comentario

          Trabajando...