Truco 28. Sustituciones en Controlling(CO), Finanzas (FI) , Proyectos(PS).


Después de un tiempo sin publicar (casi 5 meses), ya iba siendo hora de retomar el blog y ofreceros nuevos contenidos. En esta entrada y en la próxima voy a hablaros sobre las sustituciones y validaciones. Son una funcionalidad Sap sobre la que he recibido muchas consultas y creo que puede ser un tema de interes.

Las sustituciones son un mecanismo que nos permiten, en los módulos de Finanzas, Controlling o Proyectos (ademas de en otros componentes) realizar la sustitución de valores en el momento de realizar la contabilización de apuntes contables, las imputaciones de costes o en la definición de los datos maestros que componen la estructura de los proyectos y los elementos que los estructuran (Peps).

Sustitucion en Finanzas

Las transacciones para parametrizar las sustituciones son las siguientes:

  1. Controlling: transacción OKC9. Se transportan con la transacción OKE9.
  2. Finanzas: transacción OBBH. Se transportan con la transacción GCT0.
  3. Proyectos: transacción OPSN. Se transportan con la transacción GCT0
  4. Todos los modulos: desde la transacción GGB4 también podemos acceder de forma global a las sustituciones, además de las disponibles en otros componentes de Sap diferentes a los mencionados.

Basicamente, a las sustituciones las podriamos definir como reglas de reemplazo de valores que se completan cuando se cumplen determinadas condiciones. Las sustituciones se componen de diferentes pasos (seria cada una de las secuencias de cambio de valores definidas dentro de la sustitución) en los que podemos realizar la sustitución de un valor (campo) por una constante, una asignación campo-campo o bien una exit, donde realizar la logica de programación necesaria para determinar los valores a sustituir. Ademas, a cada uno de estos pasos se le pueden indicar condiciones, de forma que solo se realizara si se cumplen estas.

Dentro de las sustituciones se pueden reemplazar los valores de determinados campos (los que el estandar determina), no todos. Como ejemplos básicos de sustituciones, podemos señalar:

  1. Controlling: modificar la lógica de imputación al realizar contabilizaciones. Por ejemplo, obligar a que cuando se realiza un movimiento desde determinada transacción siempre se impute a un centro de coste determinado, o bien cuando se contabilice contra una determinada cuenta contable. O forzar a que el centro de beneficio sea un valor determinado en condiciones concretas, etc.
  2. Finanzas: modificar determinados valores cuando estamos creando apuntes contables (valores en cabecera o posicion del asiento). Por ejemplo, valores en los campos de texto, clase de coste, cebe, asignación, etc. Para sustituciones más complejas deberemos utilizar las Business Transactions Events (BTE), que se acceden desde la transaccion FIBF.
  3. Proyectos: cuando estamos trabajando con el modulo de proyecto, y creamos la estructura de un proyecto, las sustituciones nos pueden permitir heredar valores de los nodos superiores de un proyecto a los inferiores (Peps), por ejemplo. O desde el nodo del proyecto al nodo de los peps.

El funcionamiento de las sustituciones es similar en todos los módulos, aunque con alguna peculariadad no demasiado destacable. En nuestro caso, vamos a ver un ejemplo sencillo de sustitución en el módulo de Controlling.

Ejemplo de sustitución en Controlling.

Accedemos a la funcionalidad bien desde la ruta de customizing (Controlling –> Controlling General –> Logica de imputacion –> Definir sustitución  ) o desde la transacción OKC9. Los pasos para crear una nueva sustitución son los siguientes:

1) Crear una entrada en la pantalla inicial para la sociedad CO donde vayamos a definir la sustitución. Es importante definir el evento con el que estamos trabajando, ya que este determinara el objeto que se esta tratando y los campos disponibles para la sustitución. Por ejemplo, tenemos disponibles los valores:

0001   Posición de documento
0010   Orden
0060   Ledger reconciliación: Determ.ctas.
0100   Cabecera documento
0500   Imputación: Emisor-Receptor
0510   Imputación: Emisor
0520   Imputación: Receptor

En nuestro caso, vamos a realizar una sustitución por posición del documento de CO, y seleccionaremos el valor 0001.

2) Creación de la sustitucion propiamente dicha: una vez creada la entrada en el punto 1, accederemos a la pantalla de detalle de la sustitución, donde seleccionaremos el icono para crear la sustitución. Le asignaremos un nombre y una descripción y grabaremos los valores.

3) Asignación de la sustitución creada a la sociedad CO y activación: volvemos a la pantalla inicial. Indicaremos para nuestra sociedad CO en el campo Sustitución el valor de la que acabamos de crear. Igualmente, para que una vez definida este activa, indicaremos en el campo Activo el valor 1. Grabamos los valores y ya podremos continuar con la definición de los pasos de sustitución.

4) Creación de los pasos que componen la sustitución: accedemos de nuevo al detalle de la sustitución, seleccionando el icono Paso para crear una nueva secuencia de reemplazo de valores. En nuestro ejemplo, queremos que en determinada operación contable se sustituya el centro de coste por uno determinado. En concreto, cuando se este contabilizando contra una cuenta contable especifica en una sociedad determinada. Por tanto, al crear el paso seleccionare el campo COBL-KOSTL que representa al centro de coste. La sustitución sera siempre con un valor constante, seleccionando por tanto dicho metodo de sustitucion (pudiendo ser también la sustitución por el valor de otro campo o bien una exit de programación).

En el paso de la sustitución podemos indicar también una condición, que determinará que, en el caso de cumplirse, se llevara a cabo la sustitución. Al crear la condición tenemos disponibles todos los campos que intervienen en la imputación, con un asistente para ir construyendo la condición lógica (campos, operadores, AND, OR, parentesis, etc).

En la definición de condiciones se pueden utilizar valores individuales o bien conjuntos de datos (SETS, que se pueden definir desde la transacción GS02). EL uso de Sets nos puede facilitar la vida, ya que con modificar el set estaremos cambiando el comportamiento de la sustitución sin necesidad de tocarla y transportarla a todos los sistemas (Desarrollo, Calidad, Producción).

5) Transporte de la sustitución: desde la transacción OKE9 realizaremos el transporte de la sustitución, incluyendola en una orden de transporte para llevarla a los sistemas productivos.

Con unos sencillos pasos hemos conseguido personalizar el comportamiento del sistema en la lógica de imputación del modulo de Costes. Es algo muy útil y por mi experiencia os digo que se ha utilizado en todos los proyectos de implantación y de mantenimiento de Sap donde he participado. ¿Que experiencias habeis tenido en vuestras empresas utilizando las sustituciones?.

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

39 respuestas a Truco 28. Sustituciones en Controlling(CO), Finanzas (FI) , Proyectos(PS).

  1. Glen Ruiz dijo:

    Buen dia Roberto:

    Ya me genere un sustitución como indicas en estos pasos, pero siguen sin funcionar, ya entra a la sustitucion y tengo un break-point para ver los movimientos.

    Mi sustitucion es para cambiar una cuenta el centro definido por default en la OKB9 para una cuenta de mayor, pues te comento entra mi proceso y toma los datos del centro de correcto y los anexa a la tabla BSEG. Pero cuando se graba salen los registros a esta cuenta al centro definido por la OKB9.

    La sustitucion esta creada esta creada en la OBBH y esta activada ya que si entra, la sustitucion esta ligada a un exit el cual hace el cambios el tipo de evento es el 2 posicion de documento.

    Que otro paso tengo que generar o me falta para que actualice el registro.

    • La OBBH es la sustitucion de FI. Aunque tu indiques ahí un valor, cuando se ejecuta la contabilización, el valor indicado por ti es sustituido por los valores de la OKB9.

      Lo que tienes que hacer es hacer la sustitucion utilizando las sustituciones de CO (transacción OKC9). Lo que indiques aquí primara sobre lo parametrizado en la OKB9.

      Y recuerda, en la OKC9 siempre hay que activar la sustitucion poniendo el valor 1 en la pantalla principal (puedes seguir el ejemplo descrito en el blog). Yo acabo de montar una sustitucion similar a la tuya y tiene que funcionarte sin problema.

  2. Glen Ruiz dijo:

    Ok , lo voy a verificar y te aviso…

    saludos

  3. Glen Ruiz dijo:

    Buen dia:

    Viendo esto pues veo que te equivocaste con la transacción OKC9 en lugar de la OKE9(esta espa para transportar la sustitucion.)

  4. Pingback: Truco 29. Sustituciones en Controlling(CO). Usando Exits (II). « Notas y trucos SAP (Bitacora)

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

  6. YEKA dijo:

    Hola como puedo generar una sustitucion del campo WERKS necesito que lo que imputen en el campo XREF1 quede en el WERKS

    • Hola Yeka:

      El campo WERKS es el centro, no creo que tenga sentido sustituirlo por el valor del XREF1. De todas formas, tendrias que crear una sustitucion de FI (transaccion OBBH) y asignarla a la sociedad Fi que desees.

      • YEKA dijo:

        Hola Roberto,

        Gracias por tu respuesta pero ya intente por alli y no se pq el campo werks no viene en la lista de campo de la bseg

    • Es lo que intentaba decirte es mi respuesta. El campos WERKS es el centro, es un dato de unidades organizativas y Sap lo tiene protegido para que no se sustituya. Tiene su logica.

      Un saludo.

      • YEKA dijo:

        Ok, te explico lo que realmente necesito y se me ocurrio por sustitución pero ya veo que por ahi no se puede… el cliente necesita que en el extracto electronico del banco se suba el dato del centro ya que actualmente el TXT que envía el banco trae la información) el problema es que la FEBEP no trae el campo WERKS (centro) y por ahora en la tabla lo dejamos en el XREF1 pero lo que necesito es que al momento de generar la contabilización por la trx FF_5 el asiento contable le asigne el WERKS tomando el dato que deje en la tabla FEBEP en el XREF1,

        saludos

    • Hola de nuevo:

      Prueba a hacerlo utilizando las BTE (Business Transaction Events). En esta entrada del blog:

      Truco 15. Añadir nuevos campos en el informe de partidas de FI.

      Puse un ejemplo de como utilizarlas. Tendras que localizar el evento para la grabacion del apunte (no recuerdo el codigo) e intentar si por codigo abap ahi si te deja hacer el cambio que quieres.

      Espero por lo menos haberte dado una pista, no estoy seguro que se pueda hacer.

  7. Camilo Patino dijo:

    Buenas tardes,
    indicare lo que necesito para saber cual seria el proceso indicado:
    Cuando se hacen los consumos por el Movmiento 261 (Contra Orden de Mtto ) el sistema imputa el CeCo indicado en la Orden junto con la Cuenta relacionada en la OBYC, debido a que alli solo es posible poner una sola cuenta, necesitamos que: Si el CeCo = MXX y la cuenta = 2XX cambiar la cuenta por 1XX.

    Gracias por la ayuda.

  8. Hola Camilo:

    Tendras que hacer una sustitucion de CO. En esta misma entrada del blog y en la siguiente se explica la forma de hacerlo.

    Un saludo.

  9. Camilo Patino dijo:

    Gracias por la respuesta, intente hacer una sust.. de FI contra la Orden y al hacer el Trace veo que si valida la informacion pero no encuentra la cuenta de la OBYC, habia pensado en meterle un Exit para que haga lo que necesito en este punto y no quede el registro del consumo con una cuenta diferente a la que liquida en CO.

    • Hola Camilo:

      Si lo haces en la sustitucion de CO, tambien cambia la cuenta contable. Otra opción, si estas trabajando con ordenes, es contabililizar a esa cuenta y luego mediante la liquidacion de la orden llevar a otra cuenta/clase e coste (para esa orden en concreto).

      No se exactamente para que quieres separar las contabilizaciones especificas de esa orden, si es para reporting en CO, con esta alternativa lo tendrias solucionado.

  10. Camilo Patiño dijo:

    La sustitución de CO funcionaria en el momento de liquidar por las tx KO88 u KO8G?o q sucede es que la habilite y al liquidar no se va a la cuenta de sustitución, Lo necesitamos porqué existe una Validacion de costos q me frenA las liquidaciones cada mes haciendo que contabilidad tenga que reclasificar constantemente, gracias por su valiosa ayuda.

  11. Hola Camilo:

    La sustitucion funcionaria en el momento hicieses la contabilización del movimiento original (por ejemplo, imagina que haces una entrada de mercancia de un pedido imputado contra la orden). En ese momento, se cambiaria la cuenta por la cuenta de la sustitucion.

    Luego cuando llegaseis a la liquidacion de las ordenes ya no estaria esa cuenta, y no tendrias problema con la validacion.

    Ten en cuenta que la sustitucion de costes se ejecutan en cualquier transacción qeu tenga la pantalla de imputacion (pedido de compras, apunte contable, etc).

    un saludo.

  12. Hamlet Buitrago dijo:

    Hola, Estoy generando una sustitucion por la obbh para sustituir el centro de coste dependiendo del centro de beneficio.
    En la sustitucion por la obbh se creo un exit el cual coloca.
    cobl-kostl = bseg-kostl.
    cobl-prctr = bseg-prctr.
    Lo hace bien pero cuando sale de la sustitucion borra los campos cobl-kostl y cobl-prctr, pero los necesito llenos para que los asigne a la cuenta despues de hacer la simulacion.

    • Hola Hamlet:

      He estado mirando esto y tu correo. El sitio para hacer la sustitucion es la OKC9, como ya has podido comprobar (en la OBBH se borran los valores).

      Lo unico que se me ocurre alguna exit en la F-28 o alguna BTE (se acceden por la transaccion FIBF). Te dejo una entrada del blog donde se habla de ellas, aunque no estoy seguro que exista una para el proposito que buscas. Sera cosa de investigar:

      Truco 15. Añadir nuevos campos en el informe de partidas de FI.

      Otra alternativa es la OKB9, para realizar imputaciones por clase de coste a centro de coste o cebe…no se si igual por ahi.

      Siento no poder ayudarte mas, aunque recuerdo hacer algo parecido para contabilizaciones de dudoso cobro (donde tenia que completar en la simulacion el centro de coste) y usando la OKC9 funcionaba perfectamente.

      Un saludo.

  13. Alejandro dijo:

    Buen día,

    Quiero que al momento de liquidar una Orden de CO, en 2 centros de Costos, lo que va a uno de ellos le cambie la cuenta una sustitución.
    He intentado por sustitución FI, pero veo que la liquidación al ser un movimiento interno de CO no pasa por ellas.
    Entonces intenté hacer sustitución CO, pero no tengo disponible el campo CUENTA o CLASE de COSTOS para incluirla en una sustitución.
    Se les ocurre alguna otra forma o se puede agregar un campo extra a la lista de campos diponibles a ser sustituídos?

    Desde ya, muchas gracias!

  14. Nacho dijo:

    Buenas tardes, tengo un inconveniente y no se si es la solucion un substitucion, te comento, cuando ejecuto la transaccion MIRO, al guardar se genera un documento mediante la FB01, antes de guardarlo, necesito modificar el campo bseg-sgtxt por una concatenacion de valores, encontre un exit donde se encuentran todos los valores que necesito, pero cuando salvo los cambios y se genera el documento el campo en cuestion continua con el valor que tenia…por ahi a vos se te ocurre alguna solicion.

    Muchas gracias.

    Saludos.

  15. Osvaldo C dijo:

    Hola Roberto,

    Estoy intentando realizar la sustitucion de una cuenta de mayor, pero la posicion viene con una cuenta de mayor (koart = s) y la cuenta por la que la quiero sustituir es de tipo deudor (koart= D), pero no me deja, ya cambia la clave de contabilizacion (bschl), la cuenta del cliente (kunnr) y la cuenta asociada (hkont), pero a la salida, me modifica todos los campos de cuentas menos la kunnr y la bschl, dejandome el documento inconsistente (bschl= 50 y hkont = cuenta asociada a deudor).
    Esto se puede hacer asi, o hay otra forma de realizarlo.

    Muchas gracias por tu informacion.

    Osvaldo C.

  16. Guillermo Becerra dijo:

    Buenas tardes Roberto,

    Lo primero agradecerte por crear y mantener este blog, la verdad que muy completo y útil.

    Quería consultarte sobre un tema que tengo entre manos y no sé si con una validación de CO lo puedo resolver.

    Tengo un pedido estándar de MM con varios materiales, cada material tiene asociado N condiciones específicas (se corresponden con conceptos facturables a partir de cada material X).

    ¿Es posible utilizar una sustitución para informar un concepto de imputación a partir de las condiciones que lleve cada posición?.

    Es decir, si tengo esto en una misma posición del pedido:

    – Material A: Condición 1–> a CO debería llegar el valor Y (asociado al concepto 1).
    – Material A: Condición 2–> a CO debería llegar el valor Z (asociado al concepto 2).

    Todo va a la misma cuenta de gasto, pero algunos de los valores de la COBL dependen, además del material, el proveedor, etc.; de la condición.

    La opción más fácil sería crear tantas posiciones como conceptos vengan, pero al ser facturas mensuales, la agrupación de valores en el formulario se complicaría bastante (intervienen además distintas unidades de medida e importes).

    Quedo a la espera de tu respuesta, si necesitas más información me dices.
    Muchas gracias de antemano.

    Un saludo,
    Guillermo

    • HOla Guillermo:

      La lógica que tu quieres incluir creo que excede el ambito de las sustituciones de Co. Seguramente sea mas conveniente personalizar el comportamiento del sistema utilizando las BADIS de MM. Por ejemplo:

      BAdI: Ampliar procesamiento de pedidos Enjoy
      Utilización
      Componentes de aplicación: MM-PUR-PO, MM-PUR-PO-GUI

      Programa de control: SAPLMEPO

      El add-in empresarial (BAdI) ME_PROCESS_PO_CUST permite ampliar individualmente la lógica empresarial del pedido Enjoy.

      Con él el usuario puede adaptar las transacciones ME21N, ME22N, ME23N y ME29N, así como los BAPIs BAPI_PO_CREATE1 y BAPI_PO_CHANGE.

      Aplicaciones típicas para este add-in empresarial son:

      tratamiento de objetos propios
      tratamiento de datos adicionales de objetos estándar
      implementación de comprobaciones y derivaciones adicionales
      modificación de datos de los campos estándar
      Nota
      Asegúrese de garantizar la integridad de los datos.
      modificación de la selección de campos
      El BAdI cubre el ciclo completo de transacción para el pedido con sus métodos; ello permite al usuario intervenir en cada etapa del proceso con implementaciones propias:

      1. Inicio de la transacción
      Documentación acerca del método BAdI INITIALIZE
      2. Apertura de un pedido
      Documentación acerca del método BAdI OPEN
      3. Verificación de datos
      Datos de cabecera del pedido
      Documentación acerca del método BAdI PROCESS_HEADER
      Datos de posición del pedido
      Documentación acerca del método BAdI PROCESS_ITEM
      Repartos del pedido
      Documentación acerca del método BAdI PROCESS_SCHEDULE
      Imputaciones en el pedido
      Documentación acerca del método BAdI PROCESS_ACCOUNT
      4. Selección de campos
      a nivel de cabecera
      Documentación acerca del método BAdI FIELDSELECTION_HEADER_REFKEYS
      a nivel de posición
      Documentación acerca del método BAdI FIELDSELECTION_ITEM_REFKEYS
      reglas especiales a nivel de cabecera
      Documentación acerca del método BAdI FIELDSELECTION_HEADER
      reglas especiales a nivel de posición
      Documentación acerca del método BAdI FIELDSELECTION_ITEM
      5. Verificación global
      Documentación acerca del método BAdI CHECK
      6. Contabilizar
      Documentación acerca del método BAdI POST
      7. Tareas de cierre
      Documentación acerca del método BAdI CLOSE
      Condiciones previas
      Para implementar estos BAdIs se necesitan conocimientos avanzados de ABAP-OO.

      Parametriz.estándar
      En la versión estándar no está activo este add-in empresarial.
      El add-in empresarial no depende de filtros.
      El add-in empresarial no se puede utilizar varias veces.

      Ejemplo
      Puede consultar un modelo de implementación en Pasar a -> Ejemplo de coding.

      Notas adicionales
      Documentación acerca de la interfase de BAdI IF_EX_ME_PROCESS_PO_CUST

      Creo que esta te podria valer.

      • Guillermo Becerra dijo:

        Buenos días Roberto,

        Muchas gracias por la respuesta, lo reviso y te comento cómo va.

        Un saludo,
        Guillermo

  17. Edgar Mendoza dijo:

    Saludos Roberto, Gracias por compartir tus conocimientos, hasta el día de hoy de han sido de utilidad lo aprendido, ahora tengo un tema con el que estoy lidiando. Cree una validación en la OB28 y cuando la ejecuto en modo de Simulación desde la propia OB28 funciona de maravilla, pero sin embargo, cuando ejecuto la transacción F.80 o la FB08 o la MR8M (todas para anulaciones), simplemente mis validaciones no se levantan, ya regenere el código sin problema, y te digo, en modo simulación funcionan bien, pero no se logran levantar desde la transacción estandar. Habrá algún paso que me este faltando? Gracias.

    • veronica dijo:

      Hola Edgar! Has tenido solución al problema? Yo me encuentro en la misma situación. La sustitución no hace efecto en las anulaciones de documentos. ¿Qué puede estar pasando?
      Muchas gracias!

      • Carina dijo:

        Habíamos creado una nueva sustitución con dos pasos, probamos poniendo los pasos dentro de una sustitución existente y funcionó. Espero les sirva. Slds. Carina

  18. Carina Garcia dijo:

    Hola Roberto, buen día, gracias por compartir tus conocimientos.

    Te comento que tengo una sustitución en la OBBH para la Clase de Documento SB, en la que reemplazo la fecha de contabilización del documento (tx FSB1) por el último día del mes en curso.

    La testeo desde la OBBH y funciona pero la FBS1 no está pasando ya que no para en breakpoint ni cambia dicha fecha por la requerida.

    Podrías ayudarme? Muchas gracias.

    Slds.,

    Carina

  19. Ana García dijo:

    Buenos días Roberto, yo tengo la misma duda que Carina Garcia. Solo que yo la tengo configurada en la GGB1 y no funciona, pero las demás clases de documento si funcionan para otras transacciones.

  20. Carlos García dijo:

    Buenos días,

    Las sustituciones de la obbh para cuentas de mayor son más relevantes que la determinación automática de la OBYC?

  21. Cesar Guajardo dijo:

    Hola Guillermo, fijate que quiero sustituir un CeCo dentro de la Orden de Mantenimiento, lo que pasa es que en la Vista de Datos de Adicionales, me esta leyendo el CeCo Responsable que este lo trae el Dato de Maestro del Puesto de Trabajo Responsable, para efectos de Presupuesto, y lo que queremos es que lea el CeCo que viene dentro del Dato Maestro de Equipo.
    El campo de CeCo del Puesto de trabajo es: KOSTV
    El campo de CeCo del Equipo es: KOSTL
    Esto todo debe ser antes de liberar la Orden con el fin de que entre la validación de FM.
    Has visto algo asi antes?
    me comentas.

    Gracias

  22. JORGE HERNANDEZ LAZCANO dijo:

    hola alguie que me ayude en un tema de liquidacion

Replica a Carlos García Cancelar la respuesta

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