Saltar a contenido

Procedimientos programados y grupos de recálculo#

Un procedimiento programado llama a su hora a un procedimiento almacenado de la base de datos del cliente: anotar una carga, preparar unas tablas, cerrar un periodo. Un grupo de recálculo encadena un procedimiento previo, el recálculo de varios libros a la vez y un procedimiento posterior: el cierre diario típico, en el que primero se cargan los datos, después se recalculan los libros y al final se marca el cierre.

Antes de empezar#

  • Necesita Administración de libros y Administración del sistema.
  • Elija la conexión en la que va a trabajar: las tareas son de la conexión activa.
  • El procedimiento tiene que existir en la BD del cliente y el usuario de la conexión tiene que poder ejecutarlo.
  • Los libros de un grupo tienen que ser de la conexión y usted tiene que poder abrirlos. Solo se recalculan sus documentos que conservan datos.

Crear un procedimiento programado#

El diálogo Nuevo procedimiento programado con la llamada a COMERCIAL.ANOTAR_CARGA, sus dos argumentos y una programación diaria a las 02:00El diálogo Nuevo procedimiento programado con la llamada a COMERCIAL.ANOTAR_CARGA, sus dos argumentos y una programación diaria a las 02:00
El diálogo Nuevo procedimiento programado con la llamada a COMERCIAL.ANOTAR_CARGA, sus dos argumentos y una programación diaria a las 02:00
  1. En Planificación, pulse Nuevo y elija Procedimiento programado….
  2. Escriba el Nombre de la tarea (hasta 100 caracteres), por ejemplo «Registro de la carga nocturna».
  3. En Llamada, escriba el nombre del procedimiento, con el esquema si hace falta y sin paréntesis: COMERCIAL.ANOTAR_CARGA.
  4. Añada sus argumentos en orden con Añadir argumento (véase la tabla siguiente).
  5. En Cuándo, elija la programación (abajo) y compruebe las Próximas ejecuciones.
  6. Deje marcada Activa si quiere que se ejecute sola.
  7. Pulse Crear procedimiento.

La tarea aparece en Procedimientos programados. Para probarla, ábrala y pulse Ejecutar ahora.

Los argumentos#

Cada argumento tiene un tipo y un valor, y se pasa al procedimiento como un parámetro, nunca escrito dentro de la sentencia:

Tipo Valor Ejemplo Se pasa como
Texto Cualquier texto. Vacío, se pasa NULL. Carga nocturna 'Carga nocturna'
Número Un número, con coma o punto decimal. 12,5 12.5
Fecha Un día del calendario. 30/09/2026 Esa fecha
Día de la ejecución El día en que se ejecuta, más o menos un número de días (−1 es ayer). −1 La fecha de ayer en cada ejecución

En el detalle de la tarea, Llamada la enseña completa: COMERCIAL.ANOTAR_CARGA('Carga nocturna', hoy − 1 día). El botón con el aspa de cada argumento lo quita.

Cómo se escribe el nombre#

El nombre del procedimiento se cita como las tablas de la conexión:

  • Si la conexión tiene Citar los nombres de tablas y columnas, escríbalo exactamente como está en la BD, con sus mayúsculas.
  • Si no, escriba un nombre llano (letras, cifras, _); se escribirá en la sentencia tal cual.

Si falta o lleva paréntesis, el diálogo no deja guardar y dice «Falta el procedimiento» o «El procedimiento es su nombre, con el esquema si hace falta, sin paréntesis».

Qué pasa con las transacciones#

Motor Cómo se llama
PostgreSQL Fuera de una transacción: el CALL es su propia transacción y el procedimiento puede confirmar por dentro (por ejemplo, por lotes). Lo que confirme queda confirmado aunque después falle.
Oracle En una transacción que se confirma si termina bien y se deshace si falla. Un COMMIT dentro del procedimiento confirma.
SQL Server En una transacción que se confirma si termina bien y se deshace si falla. Una transacción dentro del procedimiento queda anidada y no confirma hasta la de fuera.

Un error del procedimiento es un fallo de la ejecución, con el mensaje de la BD en su paso.

Crear un grupo de recálculo#

El diálogo de un grupo de recálculo con dos libros marcados, un reintento y los procedimientos previo y posteriorEl diálogo de un grupo de recálculo con dos libros marcados, un reintento y los procedimientos previo y posterior
El diálogo de un grupo de recálculo con dos libros marcados, un reintento y los procedimientos previo y posterior
  1. En Planificación, pulse Nuevo y elija Grupo de recálculo….
  2. Escriba el Nombre, por ejemplo «Cierre comercial diario».
  3. En Libros, marque los libros del grupo. Buscar libro filtra la lista por el nombre; los marcados se quedan a la vista. El título dice cuántos lleva marcados.
  4. En Reintentos de un libro que falla, escriba cuántas veces se vuelve a intentar un libro que falla, de 0 a 10.
  5. En Procedimientos, marque si hace falta:
    • Procedimiento previo (si falla, no se recalcula ningún libro), y escriba su llamada como en un procedimiento programado.
    • Procedimiento posterior (solo si todos los libros terminan bien), y su llamada.
  6. En Cuándo, elija la programación y deje marcada Activa.
  7. Pulse Crear grupo.

Si falta el nombre o no hay libros marcados, el pie del diálogo lo dice («Falta el nombre», «Elija los libros del grupo») y no deja crearlo.

Cómo se ejecuta un grupo#

Cómo se ejecuta un grupo de recálculo Un grupo de recálculo ejecuta el procedimiento previo; si termina bien recalcula todos los libros a la vez, con reintentos, y si todos acaban bien llama al procedimiento posterior; cualquier fallo lleva a Error. Sí No no se recalcula ningún libro no se llama al posterior No Sí si falla Inicio a su hora o Ejecutar ahora Procedimiento previo opcional ¿Terminó bien? Recalcular todos los libros a la vez con reintentos cada uno ¿Todos los libros bien? Error Procedimiento posterior opcional Bien Sin procedimiento previo, se empieza por los libros; sin posterior, se acaba en ellos. Cada libro bien recalculado avisa al portal y a las suscripciones «tras el recálculo».
Cómo se ejecuta un grupo de recálculo Un grupo de recálculo ejecuta el procedimiento previo; si termina bien recalcula todos los libros a la vez, con reintentos, y si todos acaban bien llama al procedimiento posterior; cualquier fallo lleva a Error. Sí No no se recalcula ningún libro no se llama al posterior No Sí si falla Inicio a su hora o Ejecutar ahora Procedimiento previo opcional ¿Terminó bien? Recalcular todos los libros a la vez con reintentos cada uno ¿Todos los libros bien? Error Procedimiento posterior opcional Bien Sin procedimiento previo, se empieza por los libros; sin posterior, se acaba en ellos. Cada libro bien recalculado avisa al portal y a las suscripciones «tras el recálculo».
Cómo se ejecuta un grupo de recálculo Ver a tamaño completo Ver a tamaño completo
  1. Si tiene procedimiento previo, lo llama. Si falla, el grupo falla y no se recalcula ningún libro.
  2. Recalcula todos los libros a la vez, cada uno en sus trabajos (en la cola normal, con los límites de cada clase). Un libro que falla se reintenta hasta el número de reintentos, también si falló al lanzarlo.
  3. Si algún libro sigue fallando tras sus reintentos, el grupo falla y no se llama al posterior.
  4. Si todos terminan bien, llama al procedimiento posterior.

Cada libro recalculado bien avisa de ello: el portal publica una versión si el libro se publica «después de cada recálculo», y las suscripciones y alertas de datos «tras el recálculo» se envían o se evalúan. Un libro puede estar en varios grupos y tener además su propio recálculo programado.

La programación#

La sección Cuándo es la misma en las tres clases de tarea:

Programación Opciones
Sin programación (solo a mano) Solo se ejecuta con Ejecutar ahora.
Diaria Hora de inicio y Cada cuántos días; o repetida Repetir cada tantos minutos u horas Hasta las una hora. Si la franja acaba a la hora de inicio, se repite todo el día; si acaba antes, pasa al día siguiente.
Semanal Hora de inicio y los días de la semana.
Mensual Hora de inicio y el Día del mes: el primero, el último o uno concreto.
Una sola vez Un día y una hora. Una vez pasada, las próximas dicen «Ninguna: ya ha pasado».

Próximas ejecuciones las calcula el servidor con su zona horaria (ecenter.scheduling.zone, por defecto la del servidor; ponga TZ en la instalación). La siguiente ejecución es siempre posterior al momento en que se guarda o se lanza la tarea. En el cambio de hora de otoño, una hora que se repite se ejecuta una sola vez; en el de primavera, lo que cae en la hora que no existe se ejecuta al pasarla.

Tiempos máximos#

Qué Límite Propiedad
Cada intento de recalcular un libro 2 horas. Al agotarse se cancelan sus trabajos y cuenta como fallido, así que se reintenta. ecenter.scheduling.recalc-timeout
Un procedimiento programado 2 horas ecenter.scheduling.procedure-timeout
El procedimiento previo o el posterior de un grupo 30 minutos ecenter.scheduling.step-timeout
Tareas en marcha a la vez en una instancia 4. Las que tocan mientras hay 4 en marcha esperan a la siguiente vuelta; Ejecutar ahora no espera. ecenter.scheduling.max-running

El grupo no tiene un tiempo total: cada libro y cada procedimiento tienen el suyo.

Modificar, desactivar y eliminar#

  • Modificar… abre el mismo diálogo. Al guardar, usted pasa a ser el responsable de la tarea.
  • El interruptor Activa la desactiva sin borrarla: no se ejecuta sola, pero se puede ejecutar a mano y conserva su historial.
  • Eliminar… pide confirmación («Dejará de ejecutarse. Su historial de ejecuciones se conserva.»). Una tarea en marcha no se puede eliminar: deténgala antes.
  • Borrar un libro borra su recálculo y lo saca de los grupos; un grupo puede quedarse sin libros (el detalle dice «Ninguno (se eliminaron)»).
  • Guardar como un libro no copia su programación, y restaurar una copia del libro no la cambia.

Véase también#