Truco 29. Sustituciones en Controlling(CO). Usando Exits (II).


En nuestra anterior entrada del blog hablamos de las sustituciones en los diferentes módulos (FI,CO,PS), analizando en que consistian y las transacciones disponibles en Sap para su definición y transporte. En esta entrada vamos a profundizar en el caso concreto de que queramos realizar sustituciones utilizando las exits y su correspondiente código Abap.

En primer lugar, cuando estamos creando el paso de sustitucion dentro de la transaccion OKC9 (para el caso de sustituciones de CO), seleccionaremos como tipo el valor EXIT.

A continuación deberemos de indicar el nombre de la exit en la que vamos a incluir el código Abap que determinará el valor del campo a sustituir:

Como norma general, los nombres de las exits tienen la sintaxis Uzzzz, aunque no es necesario utilizar todos los carácteres (por ejemplo, podriamos nombrarla como U101 o U1001). El nombre indicado deberá de existir dentro del Pool de funciones con la siguiente estructura:

FORM Uzzzz USING CAMPO.

Por ejemplo, si estamos sustituyendo el centro de coste, la función se llamará FORM U001 USING COST_CENTER. El Modul Pool donde iremos creando las funciones de las diferentes exits se parametriza en la vista V_T80D, a través de la transacción SM31. En nuestro ejemplo, hemos tomado el modelo estandar (include RGGBS000) y lo hemos copiado con la transacción SE38 al include Z_RGGBS000. Luego hemos modificado en la tabla V_T080D el registro «GBLS – Val/Sus:Exits para sustitución», indicando el nuevo include con el que vamos a trabajar.

Esta parametrización es la que informa al sistema del lugar donde ha de ir a buscar el código fuente para las sustituciones del tipo EXIT.

Ademas de existir la exit como FORM en el Modul Pool, ha de cumplirse otra condición muy importante para que la exit este correctamente definida. Dentro del Modul Pool que tengamos configurado, existe un FORM llamado  FORM get_exit_titles. Dentro de este FORM se han de incluir las siguientes lineas para cada una de las exits:

   exits-name  = ‘U101’.
  exits-param = c_exit_param_field.
  exits-title = text-101.             «Cost center from CSKS
  APPEND exits.

En el campo de texto text-ZZZ indicaremos la descripción que identifique a la exit.

Con estos pasos tenemos preparada la configuración básica de las exits (solo se realizara la parametrización de la V_T080D la primera vez). Cada vez que añadamos una nueva exit, modificaremos el include siguiendo los pasos descritos (creación del FORM y actualización del FORM get_exit_titles).

Para terminar, en el include incluiremos nuestro código Abap con la lógica que requieran los requerimientos de nuestro cliente, y ya tendremos nuestra «flamante» exit funcionando y realizando la sustitución de valores en la imputación según las condiciones que se hayan establecido. El ejemplo Abap siguiente sustituye un centro de coste por un valor existente en sus datos maestros (el departamento): 

  SELECT * FROM CSKS
            WHERE KOSTL EQ COST_CENTER
              AND KOKRS EQ ‘0001’.
    IF CSKS-DATBI >= SY-DATUM AND
       CSKS-DATAB <= SY-DATUM.

      MOVE CSKS-ABTEI TO COST_CENTER .

    ENDIF.

  ENDSELECT..

El transporte a productivo (una vez validado en los sistemas de Test), se realizará de la forma habitual, con la transacción OKE9. Cuidado al transportar, de forma que nunca dejemos el código fuente en el sistema de desarrollo sin traspasar. En ese caso la exit fallara.

Esta entrada fue publicada en Abap, Sap CO, Sap FI. Guarda el enlace permanente.

19 respuestas a Truco 29. Sustituciones en Controlling(CO). Usando Exits (II).

  1. Glen Ruiz dijo:

    Buen día:
    mira esta es mi validación a nivel de posición,

    Programa: ZRGGBS000

    **
    * Actualizacion del ceco que trar el documento y lo cambia por el centro que traen las demas posiciones.
    * @param Movimientos de documento contable
    *
    **
    FORM UCECO.

    » Si se trata de la cuenta de otros ingresos y el centro es 1900
    IF BSEG-HKONT = ‘0004401000’ AND BKPF-BLART = ‘RF’
    AND ( BSEG-KOSTL = ‘0000001900’ OR BSEG-KOSTL = ‘0000002915’ OR
    BSEG-KOSTL = ‘0000003915’ OR BSEG-KOSTL = ‘0000004996’ OR
    BSEG-KOSTL = ‘0000006001 ‘).

    » Mover centro de costos al detalle de documento.
    MOVE: COBL-KOSTL TO BSEG-KOSTL,
    COBL-KOSTL+6(4) TO BSEG-GSBER,
    COBL-KOSTL TO BSEG-PRCTR.

    ENDIF.

    ENDFORM. «ACTCECO

    este es el exit que estoy usando y al hacer la verificacion de factura en la miro,
    le verifico con debuggin y si entra al proceso mas no me cambia el valor. La verdad ya tengo mucho tiempo queriando hacer esto y nomas no me sale. NO se porque no salga, verificando con el debuggin nunca lleva con datos la tabla bseg, no se si haya un proceso mas adelante que la llena.

    • Necesito que me digas que tipo de sustitucion estas haciendo:

      1) ¿Es de FI o de CO?.
      2) Si es de CO, lo que cambias es la imputacion en la tabla COBL, no tocas la BSEG.

      En tu texto hablas de validacion. Si es una validacion, ahi no puedes cambiar nada. Las validaciones son para hacer comprobaciones y dar mensajes de error/aviso, no para cambiar valores.

      A ver si podemos hacerlo funcionar.

      • ana dijo:

        Hola buen dia, en mi caso es una sustitucion en co del ceco pero valdiand la cuenta del banco es decir la de la BSEG,alli como se haria cuando se combinan tablas de Co y de FI? porque si hago la sustitucion desde FI si puede obtener la cuenta del banco y validar los criterios para poder sustituir pero no hara la sustitucion del ceco,y si la hago desde co si sustituye pero no puedo validar la cuenta de mayor de banco que está en la BSEG,ya que la COBL solo me trae el HKONT del gasto.

        Mil gracias por todos tus aportes son maravillosos!

  2. Glen Ruiz dijo:

    Lo primero que dice validación es sustitucion.

    El problema es el siguiente:

    Necesito cambiar o estoy intentado cambiar la contabilización que cae al hacer la verificación de facturas(trx MIRO) cuando hay una diferencias de precios se genera un partida a la cuenta contable de ingresos(Esta cuenta esta ligada a la un clases de costes, por tanto la partida debe llevar el centro), esto no se puedo configurar par que caiga al centro de la verificacion, pero en la configurado en la OKB9 para esta cuenta de ingresos se asigne un centro XXXX si la partida no lleva centro.

    Pues ahora necesito que si hay un diferencia de precios al a cuenta de ingresos se haga al centro correcto y no al que se tiene por defaul en la okb9.

    Ya le eh intentado de muchas maneras pero no logro cambiar este valor.

  3. Glen Ruiz dijo:

    Ok esta bien gracias.. Roberto

    • Hola Glen:

      Esto tiene que funcionarte. Te digo los pasos que yo he creado y me funciona correctamente:

      1) Creacion de sustitucion de CO: transaccion OKC9. He creado una sustitucion del tipo evento 1 Posicion de documento.
      2) He creado un paso individual, seleccionando los campos que tu tienes en el codigo abap:

      COBL-GSBER Division
      COBL-KOSTL Centro de coste
      COBL-PRTCR Cebe

      y le he indicado tipo de sustitucion VALOR CONSTANTE (podria haber hecho exit o asignacion campo-campo), pero para probar es suficiente.

      3) He indicado encondiciones todas las condiciones que tu tienes puesta en el codigo abap:

      IF BSEG-HKONT = ’0004401000′ AND BKPF-BLART = ‘RF’
      AND ( BSEG-KOSTL = ’0000001900′ OR BSEG-KOSTL = ’0000002915′ OR
      BSEG-KOSTL = ’0000003915′ OR BSEG-KOSTL = ’0000004996′ OR
      BSEG-KOSTL = ’0000006001 ‘).

      He puesto valores acordes con la configuracion de mi sistema.

      Y me funciona perfectamente al contabilizar desde la MIRO. Te tiene que ir sin problema. Te comento que el codigo que tienes puesto:

      ” Mover centro de costos al detalle de documento.
      MOVE: COBL-KOSTL TO BSEG-KOSTL,
      COBL-KOSTL+6(4) TO BSEG-GSBER,
      COBL-KOSTL TO BSEG-PRCTR.

      Eso no es correcto. TU estas sustituyendo en la imputacion CO, y ahi no se puede tocar la BSEG (que es la parte contable de un apunte, la parte FI)..

      Tu tocas la COBL que es la parte de coste, la parte que se puede modificar en la sustuticion.

      Un saludo.

  4. Glen Ruiz dijo:

    Buen días: Entonces viendo lo que me dices lo que necesito es una sustitucion en FI, voy a checar en OBBH, esto para hacer los mismos pasas que describes, para ver si puedo cambiar el centro.

    Lo checo y les informo.

    Gracias.

    • Hola Glen:

      No tienes que utilizar la sustitucion FI. La sustitucion CO te vale, lo que tu indiques para el centro de coste (campo COBL-KOSTL) a nivel de CO sera lo que aparezca en el apunte contable a nivel de FI (tabla bseg).

      EN sap todo esta relacionado y no puedes tener una imputacion en FI que luego sea distinta en CO. Y la sustitucion en CO tiene el cometido de cambiar los valores de imputacion (afectando al origen del apunte en CO, que es el movimiento FI).

      Un saludo.

  5. Glen Ruiz dijo:

    Buen días pues ya lo hice por la OBBH y pues estoy checando que no tiene campos de la BKPF y BSEG para poder buscar los demás datos de la entrada cuando pasa por la sustitución, veo ningun dato que me pueda servir para poder obtener este campo que me sirva para obtener el centro correspondiente.

  6. Glen Ruiz dijo:

    Gracias Roberto ya puede hacer el cambio que me dices.

    Y pues ahora que nomas me falta sacar los datos de la entrada en la MB01 ya que los tengo el numero de referencia.

    Gracias..

  7. Pingback: Truco 30. Validaciones en Controlling(CO), Finanzas (FI) , Proyectos(PS). « Notas y trucos SAP (Bitacora)

  8. Blacksoul dijo:

    Buenas, agradezco su guía, estoy por la GGB1 realizando una sustitución a nivel de documento FI.
    Lo que requiero hacer es
    cuando BSEG-KOSTL » que me sustituya el campo BSEG-AUFNR por lo que está en BSEG-AUFNR
    pero no me funciona¡¡¡ alguna sugerencias
    lo que quiero es que cada vez que se utilice el ceco me lo replique en el campo orden.
    gracias

    • Hola Sandra:

      La sustitucion la tienes que hacer con una sustitucion de CO, no a nivel de FI. Ese es el sitio correcto:

      1.Controlling: transacción OKC9. Se transportan con la transacción OKE9.

      Un saludo.

  9. Martha Colmenares dijo:

    Hola, quisiera preguntar si sustitución es la indicada para dejar modificable el campo hkont, en viñeta detalle de la miro , leo acá en internet, diferentes versiones, sustitución, cambiar vistas, usar user exit, badis, y no veo con certeza que sea mejor para esta situacion. si alguna vez ud ha tenido que hacerlo sera de gran ayuda ahora para mi …muchas gracias

  10. Pingback: Crear sustituciones – GGB1 | Blog de ABAP - SAP en General

  11. Hernán Cabezas dijo:

    Hola Roberto, aplicando OBBH deseo sustituir en MSEG-BUPLA cuando realizo canje de letras,ya que cuando se trata de doc.de lugares distintos lo deja en blanco sin embargo la Tx ZFIOS014 tiene una pantalla la cual capturo con la funcion DYNP_VALUES_READ y realizo la sustitucion con el campo GW_BUPLA, pero no funciona 😦 …. que me esta faltando! una pronta ayudaaaaaa pfv ni siquiera para en el break point
    aquí mi código:
    FORM z012.
    DATA: lt_idynpread TYPE STANDARD TABLE OF dynpread,
    ls_idynpread LIKE LINE OF lt_idynpread.
    BREAK-POINT.
    CLEAR ls_idynpread.
    REFRESH lt_idynpread.
    MOVE ‘GW_BUPLA’ TO ls_idynpread-fieldname.
    APPEND ls_idynpread TO lt_idynpread.

    CALL FUNCTION ‘DYNP_VALUES_READ’
    EXPORTING
    dyname = ‘ZOSFI_INT_CANJELETRAS’
    dynumb = ‘0120’
    TABLES
    dynpfields = lt_idynpread
    EXCEPTIONS
    invalid_abapworkarea = 1
    invalid_dynprofield = 2
    invalid_dynproname = 3
    invalid_dynpronummer = 4
    invalid_request = 5
    no_fielddescription = 6
    invalid_parameter = 7
    undefind_error = 8
    double_conversion = 9
    stepl_not_found = 10
    OTHERS = 11.

    READ TABLE lt_idynpread INTO ls_idynpread INDEX 1.
    bseg-bupla = ls_idynpread-fieldvalue.

    ENDFORM.

  12. Amigo Roberto, el exit U100 que cree en la sustitución de un texto en la BSEG no me levanta la función debugging. Quiero saber cómo logro esto ya que el texto en la bseg me lo está dejando en blanco.

    Agradeceria tu valioso apoyo en esto.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.