Truco 107. Trabajando con calendarios en SAP. Calculo de dias.


En nuestro truco de hoy vamos a hablar de los calendarios de SAP, como podemos utilizarlos en diferentes ámbitos y algún truco de programación para leer la información registrada en ellos.

Básicamente, estamos hablando de una funcionalidad transversal (utilizada en muchos módulos), que nos permite indicar los días que son hábiles o no para diferentes procesos.

Donde podemos utilizar los calendarios.

Algunos ejemplos de utilización de los calendarios son los siguientes:

  • Calendario asociado a un centro: nos permite indicar los días que son hábiles para el centro, siendo utilizada la información en el cálculo de planificación de necesidades, programación de ordenes, etc.
Asignación de calendario a centro (transacción OX10)
  • Calendario asociado a un puesto de expedición: asociado a un puesto de expedición nos permite indicar los días laborables en los procesos de preparación de pedido (se utilizará en la verificación de disponibilidad de los pedidos y en el calculo de la programación de los pedidos). En los puesto de expedición podremos afinar aún mas indicando horarios y turnos de trabajo.
Asignación de calendario a puesto de expedición (transacción OVLZ)
  • Calendario asociado a rutas: indicando un calendario en una ruta, podemos indicar los días en los que realmente trabaja la ruta, siendo tenido en cuenta para la planificación de la entrega.
Definición de rutas en el customizing (transacción 0VTC)
  • Calendarios de facturación: nos permite indicar, por cliente, los días que son hábiles para la emisión de facturas. Se utilizará para llenar la propuesta de fecha de factura en los pedidos de venta que creemos. Por ejemplo, si un cliente nos exige facturación mensual (último día de mes), podremos gestionar esta necesidad utilizando calendarios.
Asignación de calendario a cliente en los datos de ventas (transacción XD02)
  • Calendarios para la gestión de rappels de ventas: tanto en la parametrización de los rappels como en la definición de acuerdos se pueden indicar calendarios de rappels para indicar los días previstos de liquidación o para realizar la prolongación automática de acuerdos.
  • Calendarios laborales para planificación de jobs: podemos utilizarlos igualmente cuando planificamos jobs en el sistema para indicar las fechas en las que se ejecutaran los procesos o evitar que se realicen en determinados momentos.
Utilización de calendario para restricciones de ejecución al crear un job
  • Desarrollos a medida: los calendarios pueden utilizarse en desarrollos Z para reporting o controlar procesos. Por ejemplo, un calendario donde indicamos los dias de trabajo de los comerciales para hacer cálculo de previsiones y grado de previsiones cumplidas según los días de venta.

Configurando los calendarios.

La configuración de los calendarios se realiza utilizando la transacción SCAL. Hemos de distinguir 3 componentes en la definición de calendarios:

  • Festivos: podemos predefinir los días festivos utilizando reglas y luego incluirlos en el calendario de festivos para que el cálculo de los festivos se haga de forma automática.
  • Calendario de festivos: no es más que una recopilación de festivos. Los calendarios de festivos se asocian posteriormente a los calendarios de fábrica.
  • Calendario de fábrica: el calendario de fábrica es el elemento que nosotros asignamos en la parametrización o funcionalidad, y consiste en un conjunto de días que se consideran hábiles según la definición realizada, a partir de días laborables en general, calendario de festivos y excepciones o reglas especiales.

Veamos un poco más en detalle cada uno de estos elementos.

Con la opción “Días festivos” realizamos la definición individual de los diferentes festivos que podemos tener en nuestro sistema. No es imprescindible utilizarlo, aunque si facilita la automatización del mantenimientos de los calendarios de fábrica.

Básicamente, al crear un festivo el sistema nos pedirá la definición de su tipología, teniendo disponibles 5 opciones.

En detalle:

  • con fecha fija: se indica una fecha (mes y día) que siempre es festivo en un determinado ámbito. En este caso se puede determinar como se comporta el festivo si cae en un determinado día, por ejemplo, un domingo (con las opciones de garantía)
  • con día fijo a partir de esta fecha: se indica una fecha y el día de la semana a partir de esa fecha que aplicará el festivo.
  • Distancia Pascuas: para calcular los festivos asociados con la semana santa (que varían cada año). Se puede indicar un número de días antes del domingo de Pascua (por ejemplo, para calcular el jueves o viernes santo) o un numero de días a posteriori (por ejemplo para el lunes santo).
  • Domingo de Pascua: idem del anterior, en este caso para identificar el Domingo de Pascual, que es variable cada año como hemos indicado.
  • Festivo irregular: puede haber festivos que sean irregulares y que dependiendo del año aplican o no. Con esta definición de festivo, podemos definir la relevancia del festivo matizándolo con el año. Por ejemplo, en la ciudad de Alicante el día 25 de junio es festivo algunos años. Con este tipo de festivo podríamos definir esa casuística.

Además a cada festivo se le puede asignar una descripción, un texto breve y una clave de clasificación (para que sea más fácil relacionar los festivos asociado, por ejemplo a un país, categoría de festivo, religión, etc).

Una vez definidos los diferentes festivos, los agruparemos creando un “Calendario de festivos”. El calendario de festivos tiene un periodo de validez (año inicial y año final) y en el se enumeran los diferentes festivos asociados (igualmente indicando un intervalo de validez en la asociación de cada día festivo al calendario de festivos).

Definición de calendario de festivos

Con la opción Visualizar Calendario podríamos vez como quedaría la asignación de festivos en un calendario de fechas real.

Finalmente, procederemos a la creación del “Calendario de fábrica”. En la definición de un calendario de fábrica hemos de indicar es su periodo de validez, el calendario de festivos asociado (que habremos definido previamente) y los días que se consideran laborables.

Definición de un calendario de fábrica

La definición de días laborables dependerá si la empresa trabaja todos los días de semana, solo de lunes a viernes, etc (y del ámbito donde vayamos a utilizar el calendario). Una vez definido el calendario, ya podremos consultar su configuración con un calendario de fechas utilizando la opción Calendario.

El sistema nos mostrará un resumen por año con la cantidad de días laborables y festivos, pudiendo entrar a visualizar el detalle de cada año (apareciendo en naranja los días laborables y en verde los días festivos).

Si necesitamos definir reglas especiales para determinados días en un año, podemos realizarlo utilizando la opción “Reglas especiales”. Por ejemplo, para mi calendario de facturación mensual, donde solo el último día de cada mes es “laborable”, he definido reglas especiales para esos días, que me permiten indicar los días que son relevantes (el resto de días por el calendario de festivos asignado o por la definición de días laborables son no laborables).

Si no hubiera marcado el flag de “Dia labor.” estaría añadiendo con las reglas especiales días festivos o excepciones adicionales. Es otra manera más sencilla de definir los festivos de un años, aunque habrá que acodarse cada año de definirlos como excepciones.

Transporte de calendarios.

Respecto al transporte de los calendarios, aunque se puede realizar desde la SCAL de forma estándar, el transporte borra todos los calendarios existentes en el sistema destino, por lo que mi recomendación es realizar la configuración en cada sistema (abriendo el mandante con la transacción SCC4).

Este es el texto que muestra Sap cuando pulsamos la opción de transportar. Como podéis observar, no es nada tranquilizadora la forma en la que el estándar realizar dicho transporte.

Leyendo los calendarios en nuestros desarrollos.

Si necesitamos disponer de la información de los calendarios en nuestros desarrollos, es muy sencillo hacerlo utilizando diferentes módulos de función estándar.

Por ejemplo, con el MF HOLIDAY_GET, indicando el periodo que queremos analizar y el calendario de fábrica.

El sistema nos devuelve la lista de días que son no laborables (por ser festivos o días considerados no hábiles en el calendario de fábrica).

Resultado de la ejecución del módulo de función HOLIDAY_GET

Otro módulo de función interesante es el DAY_ATTRIBUTES_GET, que nos permite obtener los parámetros para un día o un intervalo de fechas (si el día es laboral o no, si es un festivo, etc).

Resultado de la ejecución del módulo de función DAY_ATTRIBUTES_GET

Si necesitáis ampliar información, os recomiendo la lectura de los links que se anexan a continuación.

Bibliografía.

https://blogs.sap.com/2016/03/20/step-by-step-getting-working-days-from-sap-calendars-by-universe-on-sap-erp/

https://blogs.sap.com/2015/03/10/significance-of-calendar-in-sap-logistics/

https://blogs.sap.com/2014/02/13/public-holiday-calendar-and-work-schedule-rules/

https://wiki.scn.sap.com/wiki/display/NWTech/SAP+Calendar+Master

Esta entrada fue publicada en Formacion, Sap Basis, SAP MM, Sap SD y etiquetada , , , . Guarda el enlace permanente.

Una respuesta a Truco 107. Trabajando con calendarios en SAP. Calculo de dias.

  1. Maria dijo:

    Hola, una consulta: en una implementacion nueva, quien o que modulo es el responsable de crear el calendario de fabrica? Gracias de antemano por la respuesta.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.