Cómo ejecutar una tarea en segundo plano 1s. Inicie un trabajo en segundo plano mediante programación. Características de trabajar en modo cliente-servidor.

Es posible que algunas tareas de gestión de documentos y contabilidad deban realizarse periódicamente. Por ejemplo, el día veinte. O diariamente.

Normalmente, una empresa intenta crear reglas para realizar dichas tareas: quién, cuándo y cómo debe completar la tarea, quién debe controlarla.

Estas tareas se denominan reguladas, es decir, realizadas de conformidad con la normativa.

En TI, el seguimiento suele realizarse de forma regulada.

Esto lo sabe bien el administrador del sistema: existen programas especiales que verifican periódicamente el rendimiento de los servidores y la infraestructura de la red y notifican al administrador por SMS o correo electrónico.

Existen cosas similares para los webmasters: comprobar la disponibilidad del sitio durante el día.

En 1C, las tareas de seguimiento y cualquier otra tarea periódica que deba realizarse automáticamente según un cronograma se realizan mediante el mecanismo de Tareas programadas de 1C.

Hablemos de ellos hoy.

Tareas programadas 1C

Las tareas programadas 1C son aquellas que te permiten realizarlas como lo hacen, pero según un horario.

La tarea de rutina 1C en sí en el configurador es una forma de especificar configuraciones y establecer un cronograma. Por cierto, el horario se puede cambiar dinámicamente más adelante en el modo 1C Enterprise.

Los trabajos en segundo plano se pueden crear a partir del texto de un programa en el lenguaje 1C de forma arbitraria sin un trabajo 1C programado, para computación paralela en el servidor.

La ejecución de tareas rutinarias de 1C se puede desactivar temporalmente - en.

Agregar una tarea de rutina 1C

Las tareas de rutina 1C se encuentran en la configuración en la rama General/Tareas de rutina 1C. Agreguemos una nueva tarea regulatoria de 1C e indiquemos su nombre.

En la propiedad de la tarea de rutina 1C, se indica el nombre del método, tal como en. La función estará ubicada en un módulo común con la casilla Servidor marcada en las propiedades, es decir, el módulo debe agregarse con anticipación.

La propiedad de la tarea programada de 1C, Nombre de la tarea, determina el nombre con el que aparecerá la tarea en las herramientas de administración de tareas.

La propiedad de la tarea de rutina de 1C – Clave – le permite agrupar varias tareas de rutina de 1C diferentes. Sólo se puede iniciar un trabajo con el mismo valor clave a la vez. El valor en sí puede ser arbitrario. Un valor vacío no se tiene en cuenta durante el control (es decir, se considera vacío).

La propiedad de una tarea de rutina de 1C, Predefinida, determina que cuando se inicie 1C Enterprise, dicha tarea se creará en una sola copia con el cronograma especificado en el configurador. Las tareas no predefinidas aparecen mediante programación en el momento de la programación.

En configuraciones típicas, por ejemplo Contabilidad edición 2.0, tareas rutinarias de 1C como Actualización de configuración y Recálculo de totales están predefinidas, pero como Intercambio de datos o Movimientos diferidos no están predefinidos.

Uso: habilita la tarea (es decir, solo se ejecutará si la casilla Uso está marcada).

Reintentar tras una terminación anormal: como puede imaginar, significa reiniciar la tarea si no se pudo completar exitosamente la primera vez; puede especificar cuántas veces reiniciar y cuánto tiempo después de la terminación anormal.

Gestión y seguimiento de tareas rutinarias 1C.

Para gestionar las tareas rutinarias de 1C, existe una Consola de trabajo de procesamiento estándar especial. También se puede encontrar en.

Este procesamiento pertenece al llamado procesamiento 1C estándar externo universal, que a menudo no está incluido en la configuración, sino que se distribuye por separado, por ejemplo, en sus discos.

Usando el procesamiento de la consola de trabajos usted puede:

  • Activar/desactivar la ejecución de la tarea rutinaria 1C
  • Asignar/cambiar el cronograma de una tarea 1C programada (y otros parámetros)
  • Especifique el usuario de 1C en cuyo nombre se realizará la tarea de rutina de 1C
  • Vea qué tareas se completaron, cuándo y con qué resultado, errores al completar tareas de 1C
  • Realizar una tarea.

Copias de bases de datos y tareas de rutina 1C.

Si utiliza el servidor 1C, se produce la siguiente situación:

  • Para sus propios fines (por ejemplo, para programación), se realiza una copia de la base de datos de trabajo.
  • Trabajar, probar, etc. en una copia de la base de datos.
  • Se olvida de desactivar las tareas rutinarias de 1C en una base de datos de prueba de este tipo.

Si bien las tareas rutinarias de 1C realizan tareas relacionadas únicamente con su base de información, no hay nada en ella.

Sin embargo, las tareas rutinarias de 1C a menudo permiten guardar archivos y datos en otras bases de datos, realizar intercambios y enviar correos electrónicos.

En este caso, puede obtener una mezcla interesante entre el resultado de realizar tareas rutinarias de 1C en la base de trabajo y las copias.

Las tareas rutinarias de 1C para copias de la base de datos de trabajo deben estar deshabilitadas en .

Cumplimiento e incumplimiento de las tareas reglamentarias de 1C

Al crear tareas rutinarias de 1C, debes recordar:

  • Las tareas las realizan ellas mismas y es necesario supervisarlas.
  • Las tareas se ejecutan en un módulo en el servidor.
  • Las tareas se realizan bajo un usuario de Windows diferente, con derechos diferentes.

Primero, debe verificar que la tarea se esté realizando y que se pueda completar como una tarea rutinaria de 1C.

En segundo lugar, el módulo del servidor significa que muchas cosas que están disponibles en el cliente no lo están. Por ejemplo, a veces, no todos los documentos se pueden publicar solo en el servidor, ya que su algoritmo puede prever que el usuario inicie la publicación manualmente y se puedan utilizar funciones que no sean del servidor, por ejemplo
Advertencia ("¡Hola!")

En tercer lugar, si una tarea trata sobre algo fuera de la base de datos 1C, entonces los derechos del usuario de Windows bajo el cual se ejecuta la tarea se vuelven importantes.

El tercer punto es especialmente importante a la hora de desarrollar. Si el módulo no se puede ejecutar en el servidor, la tarea no se ejecutará en absoluto. Para comprobarlo, debe ejecutar la tarea al menos una vez y ver el resultado "Tarea completada" en el procesamiento de la Consola de tareas.

1 mecanismo de trabajo
2 trabajos en segundo plano
3 tareas programadas
4 Características de realizar trabajos en segundo plano en versiones de archivos y cliente-servidor
5 Crear metadatos para una tarea rutinaria
Consola de 6 trabajos
7 Trabajar con tareas rutinarias
7.1 Objetos de trabajo
7.2 Obtener una lista de tareas
7.3 Creación
7.4 Desinstalación
7.5 Obtener un objeto de trabajo

Mecanismo de trabajo

El motor de trabajos está diseñado para realizar cualquier aplicación o funcionalidad de forma programada o asincrónica.

El mecanismo de tareas resuelve las siguientes tareas:

  • Capacidad para definir procedimientos regulatorios en la etapa de configuración del sistema;
  • Ejecución de acciones específicas según cronograma;
  • Realizar una llamada a un procedimiento o función determinado de forma asincrónica, es decir, sin esperar a su finalización;
  • Seguimiento del progreso de una tarea específica y obtención de su estado de finalización (un valor que indica si fue exitosa o no);
  • Obtener una lista de tareas actuales;
  • Capacidad de esperar a que se completen una o más tareas;
  • Gestión de trabajos (posibilidad de cancelación, bloqueo de ejecución, etc.).

El mecanismo de trabajo consta de los siguientes componentes:

  • Metadatos de tareas rutinarias;
  • Tareas regulares;
  • Trabajos en segundo plano;
  • Programador de tareas.

Los trabajos en segundo plano están diseñados para realizar tareas de aplicaciones de forma asincrónica. Las tareas en segundo plano se implementan utilizando el lenguaje integrado.

Tareas programadas: diseñadas para realizar tareas aplicadas según un cronograma. Las tareas de rutina se almacenan en la base de información y se crean en función de los metadatos definidos en la configuración. Los metadatos de una tarea regulatoria contienen información como nombre, método, uso, etc.

Una tarea de rutina tiene un cronograma que determina en qué momentos se debe ejecutar el método asociado con la tarea de rutina. El cronograma, por regla general, se especifica en la base de información, pero también se puede especificar en la etapa de configuración (por ejemplo, para tareas rutinarias predefinidas).

El programador de tareas se utiliza para programar la ejecución de tareas rutinarias. Para cada trabajo programado, el planificador comprueba periódicamente si la fecha y hora actuales coinciden con la programación del trabajo programado. Si coincide, el programador asigna esa tarea a ejecución. Para hacer esto, para esta tarea programada, el programador crea una tarea en segundo plano, que realiza el procesamiento real.

Trabajos en segundo plano

Los trabajos en segundo plano son convenientes para realizar cálculos complejos cuando el resultado del cálculo puede tardar mucho en obtenerse. El motor de trabajos tiene los medios para realizar dichos cálculos de forma asincrónica.

Asociado con un trabajo en segundo plano hay un método que se llama cuando se ejecuta el trabajo en segundo plano. Un método de trabajo en segundo plano puede ser cualquier procedimiento o función de un módulo común no global que se pueda llamar en el servidor. Los parámetros del trabajo en segundo plano pueden ser cualquier valor que pueda pasarse al servidor. Los parámetros de un trabajo en segundo plano deben coincidir exactamente con los parámetros del procedimiento o función que llama. Si el método del trabajo en segundo plano es una función, se ignora su valor de retorno.

Un trabajo en segundo plano puede tener una clave: cualquier valor de aplicación. La clave introduce una restricción en el inicio de trabajos en segundo plano: solo se puede ejecutar un trabajo en segundo plano por unidad de tiempo con un valor de clave específico y un nombre de método de trabajo en segundo plano determinado (el nombre del método consta del nombre del módulo y el nombre del procedimiento). o función). La clave le permite agrupar trabajos en segundo plano que tienen los mismos métodos según una característica de aplicación específica para que no se ejecute más de un trabajo en segundo plano dentro de un grupo.

Los trabajos en segundo plano se crean y administran mediante programación desde cualquier conexión. Cualquier usuario puede crear un trabajo en segundo plano. Además, se ejecuta en nombre del usuario que lo creó. Se permite recibir tareas, así como esperar a que se completen, desde cualquier conexión a un usuario con derechos administrativos o al usuario que creó estas tareas en segundo plano.

Un trabajo en segundo plano es un objeto puramente de sesión y no pertenece a ninguna sesión de usuario. Para cada tarea, se crea una sesión especial del sistema, que se ejecuta en nombre del usuario que realizó la llamada. Los trabajos en segundo plano no tienen estado persistente.

Un trabajo en segundo plano puede generar otros trabajos en segundo plano. En la versión cliente-servidor, esto le permite paralelizar cálculos complejos entre los procesos de trabajo del clúster, lo que puede acelerar significativamente el proceso de cálculo en su conjunto. La paralelización se implementa generando varios trabajos en segundo plano secundarios y esperando a que cada uno de ellos se complete en el trabajo en segundo plano principal.

Los trabajos en segundo plano que se completan correctamente o fallan se almacenan durante 24 horas y luego se eliminan. Si el número de trabajos en segundo plano completados supera los 1000, los trabajos en segundo plano más antiguos también se eliminan.

Tareas programadas

Las tareas programadas se utilizan cuando es necesario realizar determinadas acciones periódicas o únicas según un cronograma.

Las tareas programadas se almacenan en la base de información y se crean en base a los metadatos de la tarea de rutina definida en la configuración. Los metadatos especifican parámetros de una tarea de rutina como: método llamado, nombre, clave, posibilidad de uso, signo de predeterminación, etc. Al crear una tarea de rutina, puede especificar adicionalmente el cronograma (se puede especificar en los metadatos), los valores. ​de los parámetros del método, nombre del usuario en cuyo nombre se realizan las tareas rutinarias, etc.

La creación y gestión de tareas programadas se realiza mediante programación desde cualquier conexión y solo está permitida a usuarios con derechos administrativos.

Nota. Cuando se trabaja en la versión de archivo, es posible crear y editar tareas de rutina sin iniciar el programador de tareas.

Asociado a una tarea de rutina hay un método que se llama cuando se ejecuta la tarea de rutina. El método de tarea de rutina puede ser cualquier procedimiento o función de un módulo común no global que pueda invocarse en el servidor. Los parámetros de una tarea de rutina pueden ser cualquier valor que pueda transmitirse al servidor. Los parámetros de una tarea de rutina deben coincidir exactamente con los parámetros del procedimiento o función que llama. Si el método de la tarea de rutina es una función, entonces se ignora su valor de retorno.

Una tarea rutinaria puede tener una clave: cualquier valor de aplicación. La clave introduce una restricción en el lanzamiento de tareas programadas, porque Por unidad de tiempo, entre las tareas de rutina asociadas con el mismo objeto de metadatos, solo se puede ejecutar una tarea de rutina con un valor clave específico. La clave le permite agrupar tareas de rutina asociadas con el mismo objeto de metadatos según una característica de aplicación específica, de modo que no se realice más de una tarea de rutina dentro de un grupo.

Durante la configuración, puede definir tareas de rutina predefinidas. Las tareas de rutina predefinidas no se diferencian de las tareas de rutina regulares, excepto que no se pueden crear ni eliminar explícitamente. Si en los metadatos de la tarea programada está configurado signo de una tarea rutinaria predeterminada, luego, al actualizar la configuración en la base de datos, se creará automáticamente una tarea de rutina predefinida. Si se borra la bandera predeterminada, al actualizar la configuración en la base de datos, la tarea de rutina predefinida se eliminará automáticamente. Los valores iniciales de las propiedades de una tarea programada predefinida (por ejemplo, una programación) se establecen en los metadatos. En el futuro, cuando la aplicación se esté ejecutando, se podrán cambiar. Las tareas rutinarias predefinidas no tienen parámetros.

La programación de tareas de rutina determina en qué momentos se debe ejecutar la tarea de rutina. El cronograma permite configurar: la fecha y hora de inicio y fin de la tarea, el período de ejecución, los días de la semana y meses en los que se debe realizar la tarea programada, etc. (ver descripción del programa integrado). en el lenguaje).

Ejemplos de cronogramas de tareas rutinarias:

Cada hora, solo un día

Período de días repetidos = 0, período de días repetidos = 3600

Todos los días una vez al día

Período de días repetidos = 1, período de días repetidos = 0

Un día, una vez

PeriodoRepeticiónDías = 0

Cada dos días una vez al día

PeriodoRepeticiónDías = 2

Cada hora de 01.00 a 07.00 todos los días

PeriodoRepeticiónDías = 1
Repetir período durante el día = 3600
Hora de inicio = 01.00
Hora de finalización = 07.00

Todos los sábados y domingos a las 09.00 h.

PeriodoRepeticiónDías = 1
Días de la semana = 6, 7
Hora de inicio = 09.00

Todos los días durante una semana, sáltate una semana

PeriodoRepeticiónDías = 1
Periodo Semanas = 2

A la 01.00 una vez

Hora de inicio = 01.00

Último día de cada mes a las 9:00 horas.

PeriodoRepeticiónDías = 1
DíaEnMes = -1
Hora de inicio = 09.00

Quinto día de cada mes a las 9:00

PeriodoRepeticiónDías = 1
DíaEnMes = 5
Hora de inicio = 09.00

Segundo miércoles de cada mes a las 9:00

PeriodoRepeticiónDías = 1
DíaSemanaEnMes = 2
Días de la semana = 3
Hora de inicio = 09.00

Puede comprobar si una tarea se está ejecutando para una fecha determinada (el método RequiredExecution del objeto ScheduleTasks). Las tareas programadas siempre se realizan bajo el nombre de un usuario específico. Si no se especifica el usuario de la tarea programada, la ejecución se produce en nombre del usuario predeterminado que tiene derechos administrativos.

Las tareas rutinarias se ejecutan utilizando tareas en segundo plano. Cuando el programador determina que se debe iniciar una tarea programada, se crea automáticamente un trabajo en segundo plano basado en esta tarea programada, que realiza todo el procesamiento posterior. Si esta tarea de rutina ya se está ejecutando, no se volverá a ejecutar, independientemente de su programación.

Las tareas programadas se pueden reiniciar. Esto es especialmente cierto cuando se debe garantizar la ejecución del método de tarea de rutina. Una tarea de rutina se reinicia cuando finaliza de manera anormal, o cuando el proceso de trabajo (en la versión cliente-servidor) o el proceso de cliente (en la versión de archivo) en el que se ejecutó la tarea de rutina finaliza de manera anormal. En la tarea programada, puede especificar cuántas veces debe reiniciarse, así como el intervalo entre reinicios. Al implementar el método de tarea de rutina reiniciable, se debe tener en cuenta que al reiniciar, su ejecución comenzará desde el principio y no continuará desde el momento de la terminación anormal.

Es importante recordar que Hora de finalización no necesariamente completará el trabajo en segundo plano en el momento especificado. Algunas declaraciones:
* Un trabajo en segundo plano puede ignorar su cancelación automática si no está bloqueado pero continúa ejecutándose por algún motivo.
que no todas las operaciones de la plataforma se pueden revertir. Si se ejecuta el código cíclico del lenguaje incorporado, cancele el trabajo
tal vez de lo contrario no. Todo depende de lo que haga el trabajo.
* Hora de finalización: ¿el límite dentro del cual una tarea puede comenzar en lugar de terminar?
* ¿La finalización forzada de una tarea revierte los cambios realizados al inicio de la transacción?

Características de la ejecución de trabajos en segundo plano en variantes de archivo y cliente-servidor

Los mecanismos para ejecutar trabajos en segundo plano en las versiones de archivos y cliente-servidor son diferentes.

  • En la versión del archivo, debe crear un proceso de cliente dedicado que realizará trabajos en segundo plano. Para hacer esto, el proceso del cliente debe llamar periódicamente a la función de contexto global ExecuteJobProcessing. Sólo un proceso de cliente por base de datos debe procesar trabajos en segundo plano (y, en consecuencia, llamar a esta función). Si no se ha creado un proceso de cliente para procesar trabajos en segundo plano, al acceder mediante programación al motor de trabajos, se mostrará el error "El Administrador de trabajos no está activo". No se recomienda utilizar un proceso de cliente que procese trabajos en segundo plano para otras funciones.

Una vez que se inicia el proceso del cliente que procesa trabajos en segundo plano, otros procesos del cliente pueden acceder mediante programación al motor de trabajos en segundo plano, es decir, puede ejecutar y administrar trabajos en segundo plano.

En la versión cliente-servidor, se utiliza un programador de tareas para ejecutar trabajos en segundo plano, que se encuentra físicamente en el administrador del clúster. Para todos los trabajos en segundo plano en cola, el programador obtiene el proceso de trabajo menos cargado y lo utiliza para ejecutar el trabajo en segundo plano correspondiente. El proceso de trabajo ejecuta el trabajo y notifica al planificador los resultados de la ejecución.

En la versión cliente-servidor es posible bloquear la ejecución de tareas rutinarias. La ejecución de tareas rutinarias se bloquea en los siguientes casos:

  • Se ha instalado un bloqueo explícito de tareas rutinarias en la base de información. El bloqueo se puede configurar a través de la consola del clúster;
  • Hay un bloque de conexión en la base de información. El bloqueo se puede configurar a través de la consola del clúster;
  • El método SetExclusiveMode() con el parámetro True se llamó desde el lenguaje integrado;
  • En algunos otros casos (por ejemplo, al actualizar la configuración de la base de datos).

Crear metadatos para una tarea rutinaria

Antes de crear mediante programación una tarea de rutina en la base de datos, debe crear un objeto de metadatos para ella.

Para crear un objeto de metadatos para una tarea de rutina en el árbol de configuración en la rama "General" para la rama "Tareas de rutina", ejecute el comando "Agregar" y complete las siguientes propiedades de la tarea de rutina en la paleta de propiedades:

Nombre del método: indique el nombre del método de la tarea de rutina.

Clave: especifique un valor de cadena arbitrario que se utilizará como clave de la tarea programada.

Horario: indica el horario de la tarea de rutina. Para crear un cronograma, haga clic en el enlace "Abrir" y en el formulario de cronograma que se abre, establezca los valores requeridos.

En la pestaña “General” se indican las fechas de inicio y finalización de la tarea y el modo de repetición.

En la pestaña "Diario" se indica el horario diario de la tarea.

Por favor indica tu horario:

  • hora de inicio y hora de finalización de la tarea;
  • tiempo de finalización de la tarea, después del cual será terminada por la fuerza;
  • período de repetición de tareas;
  • duración de la pausa entre repeticiones;
  • duración de la ejecución.

Se permite especificar una combinación arbitraria de condiciones.

En la pestaña "Semanal" se indica el cronograma semanal de la tarea.

Seleccione las casillas de verificación para los días de la semana en los que se ejecutará la tarea. Si desea repetir la tarea, especifique el intervalo de repetición en semanas. Por ejemplo, la tarea se ejecuta en 2 semanas, el valor de repetición es 2.

En la pestaña “Mensual” se indica el cronograma mensual de la tarea.

Seleccione las casillas de verificación de los meses en los que se ejecutará la tarea. Si es necesario, puede especificar un día específico (mes o semana) de ejecución desde el principio del mes/semana o desde el final.

Uso: si se establece, la tarea se ejecutará según el cronograma.

Predefinida: si se establece, la tarea es una tarea predefinida.

Número de reintentos en caso de terminación anormal: indica el número de reintentos en caso de terminación anormal.

Intervalo de reintento en caso de terminación anormal: especifica el intervalo de reintento en caso de terminación anormal. Ejemplos

Creación de un trabajo en segundo plano "Actualización del índice de búsqueda de texto completo":

BackgroundTasks.Run("ActualizandoFullTextSearchIndex");

Creación de una tarea de rutina “Recuperación de secuencias”:

Horario = Nueva tarea programada;
Horario.PeriodRepeatDays = 1;
Schedule.RepeatPeriodDuringDay = 0;

Tarea = RoutineTasks.CreateRoutineTask("Restaurando Secuencias");
Trabajo.Programación = Programación;
Tarea.Escribir();

Consola de trabajo

Procesando con ITS, gestiona tareas rutinarias: ConsoleTasks.epf

Trabajar con tareas rutinarias

Objetos de trabajo

No se hace referencia a los objetos de trabajo, pero se almacenan en la base de datos en algún almacenamiento especial.

Si el indicador "Predefinido" está habilitado en los metadatos, dicho objeto se crea automáticamente cuando se inicia 1C:Enterprise y siempre existe exactamente en una instancia. Un objeto así no se puede eliminar.

Si no se establece el indicador "Predefinido", los objetos de dicha tarea se crean y eliminan mediante programación, especificando el cronograma y los parámetros.

Obtener una lista de tareas

La lista de tareas se puede obtener utilizando el método. Obtener tareas de rutina gerente de trabajo global Tareas de rutina

Administrador de trabajos programados

Obtener trabajos programados (GetScheduledJobs)

Sintaxis:

Obtener tareas de rutina (<Отбор>)

Opciones:

<Отбор>(opcional)

Tipo: Estructura. Estructura que define la selección. Los valores de la estructura pueden ser: Identificador único, Clave, Metadatos, Predefinido, Uso, Nombre. Si no se especifica la selección, se obtienen todas las tareas de rutina.

Si está filtrando por metadatos, como valor de metadatos puede especificar el objeto de metadatos de la tarea de rutina o su nombre.

Valor de retorno:

Tipo: Matriz.

Descripción:

Recibe una serie de tareas rutinarias para una selección determinada. La recepción de tareas programadas sólo es posible para el administrador.

Disponibilidad:

Para Cada Regular del Ciclo Regulatorio
NewLine = Lista de tareas programadas.Add();
NewRow.Metadata = Regular.Metadata.View();
NuevaLínea.Nombre = Regular.Nombre;
NewString.Key = Regular.Clave;
NewLine.Schedule = Horario.Horario;
NewLine.User = Regular.Nombre de usuario;
NewString.Predefinido = Regular.Predefinido;
NewString.Use = Regular.Uso;
NewString.Identifier = Regular.UniqueIdentifier;

ÚltimaTarea = Regular.ÚltimaTarea;
Si LastTask no está definido, entonces
NewLine.Running = Última Tarea.Inicio;
NewRow.State = Última Tarea.State;
terminara si;
Fin del ciclo;

Creación

Creado por el método Create RoutineTask para el administrador de tareas rutinarias:

RoutineTask = RoutineTasks.CreateRoutineTask(MetadataSelection);

RegularTask.Nombre = Nombre;
RegularTask.Key = Clave;
RegularTask.Use = Uso;
RoutineTask.UserName = UsersChoice;
TareadeRutina.NúmerodeRepeticionesEnEmergenciaCompleción =NúmerodeRepeticionesEnEmergenciaCompleción;
ScheduledTask.RepeatIntervalAtEmergencyCompletion = RetryIntervalAtEmergencyCompletion;
ScheduleTask.Schedule = Horario;
RegularTask.Record();

TaskObject = RoutineTasks.CreateRoutineTask("ExchangeExchange");

TaskObject.Name = Nombre;
JobObject.Use = Verdadero;

El objeto de tarea tiene un campo "Parámetros" en el que se especifican los parámetros del método:

Trabajo programado

Parámetros

Uso:

Lee y escribe.

Descripción:

Tipo: Matriz. Una serie de parámetros para una tarea programada. El número y la composición de los parámetros deben corresponder a los parámetros del método de la tarea de rutina.

Disponibilidad:

Servidor, cliente pesado, conexión externa.

Nota:

Las capacidades de lectura y escritura solo están disponibles para el administrador.

Eliminación

Eliminado usando el método Delete() del objeto de tarea:

Tarea programada.Delete();

Obtener un objeto de trabajo

  • lista a través del método GetRoutineTasks:
    Rutina = RoutineTasks.GetRoutineTasks(Selección);
  • a través del FindByUniqueIdentifier del método del administrador de tareas:
    Tarea = Tareas programadas.FindByUniqueIdentifier(UID);

[debes registrarte para ver el enlace]

Concepto de programación asincrónica

El concepto de programación asincrónica es que el resultado de una función no está disponible inmediatamente, sino después de un tiempo en forma de alguna llamada asincrónica (que viola el orden normal de ejecución).

Aquellos. La idea principal de la programación asincrónica es emitir llamadas a métodos individuales y continuar realizando otros trabajos en paralelo sin esperar a que finalicen las llamadas.

Algunos métodos que minimizan la probabilidad de excepciones no requieren un enfoque asincrónico, pero otros lo requieren desde el comienzo del desarrollo.

Como puede verse en los gráficos, no existe un coeficiente de acciones interactivas útiles del usuario con un modelo de programación sincrónico, ya que el sistema bloquea la interfaz de usuario, mientras que con un modelo asincrónico, el usuario continúa trabajando activamente en el sistema.

Cuando se ejecuta de forma sincrónica, la aplicación tiene un solo subproceso. Con el modelo de programación asincrónica, puede ejecutar varios subprocesos en paralelo y reaccionar a nuevas acciones de los usuarios a medida que se ejecutan. Una vez que se ejecuta el n-thread, muestra el resultado en la pantalla.

Tareas en segundo plano en 1C:Enterprise 8

En 1C:Enterprise 8, los trabajos en segundo plano están diseñados para realizar tareas de aplicaciones de forma asincrónica. Pueden generar trabajos secundarios en segundo plano, por ejemplo, para paralelizar cálculos complejos entre diferentes servidores en funcionamiento del clúster en un modo de operación cliente-servidor.

Es posible restringir la ejecución de trabajos en segundo plano que tengan los mismos métodos según un criterio de aplicación específico. La creación y gestión programática de trabajos en segundo plano es posible desde cualquier conexión de usuario a la base de información del sistema. El trabajo en segundo plano se ejecuta en nombre del usuario que lo creó.

El mecanismo de tareas funciona tanto en el modo de operación cliente-servidor como en el modo de archivo, pero las capacidades para administrar y ejecutar tareas en ambas versiones son algo diferentes.

Opción cliente-servidor

En la versión cliente-servidor, la programación de tareas la realiza el programador de tareas, que se encuentra físicamente en el administrador del clúster.

El programador comprueba periódicamente si se ha recibido alguna solicitud para ejecutar trabajos en segundo plano. Si hay trabajos que deben ejecutarse, el programador determina los procesos de trabajo menos cargados en el clúster y asigna secuencialmente a cada uno de ellos su tarea a ejecutar. Por lo tanto, el mismo proceso de trabajo puede potencialmente ejecutar múltiples trabajos en paralelo. Después de que un proceso de trabajo recibe un trabajo, el proceso de trabajo establece una conexión con la base de datos y ejecuta el trabajo dentro de esa conexión. Una vez completado el trabajo, el proceso de trabajo notifica al planificador si el trabajo se completó con éxito o sin éxito.

Opción de archivo

A partir de la versión 8.3.3.641 de la plataforma, los desarrolladores han simplificado significativamente el trabajo con trabajos en segundo plano en la versión de archivo.

Anteriormente, para ejecutar tareas automáticamente, era necesario iniciar una sesión adicional separada de 1C:Enterprise, utilizada como programador de tareas. Y en esta sesión fue necesario ejecutar periódicamente el método del lenguaje incorporado. EjecutarProcesamiento de tareas(). Este enfoque era bastante engorroso, inconveniente y limitaba en gran medida el uso de tareas rutinarias y en segundo plano en la versión de archivo del trabajo.

Ahora todo se ha vuelto mucho más fácil. Si se inicia un cliente ligero o pesado, y también si el servidor web tiene conexiones de cliente, en cada una de estas aplicaciones se inicia automáticamente otro hilo con una conexión a la base de datos. Estos subprocesos se dedican a realizar tareas rutinarias y en segundo plano.

Cada una de las aplicaciones enumeradas realiza sus propias tareas en segundo plano. Si una aplicación ha iniciado varios trabajos en segundo plano, se ejecutan secuencialmente, en el orden en que se recibieron.

La obvia desventaja de los trabajos en segundo plano de 1C: dado que se ejecutan en el lado del servidor, no hay posibilidad de trabajo interactivo con el usuario (por ejemplo, es imposible mostrar un mensaje u otra información; todos estos datos deben almacenarse dentro de la base de información y procesarse posteriormente en de alguna manera).

Cabe señalar que los trabajos en segundo plano son objetos puramente de software y no se pueden almacenar en la base de datos. Es decir, solo podemos crear una instancia de una clase, inicializar sus propiedades y lanzarla para su ejecución.

Un ejemplo de ejecución de código asíncrono en 1C:Enterprise 8

“Escribir programas en los que se desconoce el resultado de una llamada a una función es mucho más difícil que los normales. Llamadas anidadas, manejo de errores, control sobre lo que sucede: todo se vuelve más complicado”, esto solo lo dirán aquellos que no saben cómo utilizar correctamente las capacidades de la plataforma, ¡pero nosotros no!

¡Demostremos la simplicidad y elegancia de la ejecución de código asíncrono en 1C:Enterprise 8!

Paso 1. Creemos un nuevo sistema de seguridad de la información para el desarrollo de configuraciones.

Paso 2. En la configuración agregaremos el módulo general “Asynchronous Handlers”

¿Por qué agregamos un módulo compartido? Aquí todo es simple: para realizar operaciones asincrónicas en 1C:Enterprise 8, se utilizan trabajos en segundo plano, que tienen su propio administrador: "BackgroundTask Manager". Este objeto tiene un método "Ejecutar", con la ayuda del cual se inicia la tarea en segundo plano.

Pasemos al asistente de sintaxis.

Entonces necesitaremos un módulo común.

Paso 3. En el módulo general “Manejadores asíncronos” agregaremos el procedimiento de exportación OurLongOperation()

Procedimiento OurLongOperation(Duración) Exportar // Simulación de una acción a largo plazo (Duración seg.). FechaInicioOperación = FechaActual(); Mientras que CurrentDate() - Fecha de inicio de la operación< Длительность Цикл КонецЦикла; КонецПроцедуры

Etapa 4. Agregue procesamiento de “Concepto de programación asincrónica” a la configuración (puede crear procesamiento externo)

Agregue un atributo al formulario:

Duración (Número)

y dos equipos

Realizar operación larga;

Realice una operación larga y larga de forma asincrónica.

Paso 5. Según el asistente de sintaxis, complete el módulo del formulario.

&En el procedimiento del cliente Realizar operación de larga duración (comando) ExecuteLong-RunningOperationOnServer(); EndProcedure &OnServer Procedimiento ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Fin del procedimiento &En el procedimiento del cliente Realizar una operación de larga duración de forma asincrónica (comando) Realizar una operación de larga duración de forma asincrónica en el servidor (); Fin del procedimiento &En el procedimiento del servidor Realice una operación de larga duración de forma asincrónica en el servidor() Parámetros = Nueva matriz; Parámetros.Agregar(Duración); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parámetros, Nuevo Identificador Único, "Ejemplo de concepto de programación asincrónica"); Fin del Procedimiento

Paso 6.¡Lanzamos y comprobamos!

Resultado:

Si hacemos clic en el botón "Realizar operación larga", la interfaz de usuario se bloquea durante los segundos de "Duración";

Si hacemos clic en el botón "Realizar operación de larga duración de forma asincrónica", la interfaz de usuario no se bloquea y el código del programa se ejecuta en paralelo.

Podemos verificar que el código del programa se ejecuta de forma asincrónica mirando el registro.

Podemos depurar el código del programa que se ejecuta en "segundo plano" si configuramos la propiedad adecuada en los parámetros de depuración.

Un ejemplo de ejecución de código asíncrono en 1C:Enterprise 8 usando BSP

Consideremos un ejemplo de implementación del concepto de programación asincrónica en 1C:Enterprise 8 en BSP usando el ejemplo del procesamiento de "Asuntos actuales".

La lógica es la siguiente: cuando se inicia el programa, se inicializa el área de trabajo de la página de inicio, donde se puede mostrar el formulario de procesamiento "Asuntos de actualidad". Este formulario lo completa la actualidad del usuario y lleva tiempo completarlo. Si los desarrolladores no tuvieran la capacidad de ejecutar código de forma asincrónica, entonces la interfaz de usuario se bloquearía mientras se completaba el formulario de procesamiento.

Analicemos el código del programa del formulario.

El evento del formulario "Cuando CreadoEnServidor" llama al procedimiento "RunBackgroundTask"; esto es lo que necesitamos.

Sin distraernos con los matices, analicemos este procedimiento.

Y aquí vemos que se utiliza el administrador de trabajos en segundo plano y su método "Ejecutar". Tenga en cuenta que los desarrolladores almacenan una identificación única para el trabajo en segundo plano.

Para hacer esto, los desarrolladores utilizan el método. ConectarWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



En el procedimiento enganchado Conectable_CheckTaskComplete() los desarrolladores llaman a una función Trabajo completado (ID de tarea)


Esta función verifica la ejecución de un trabajo en segundo plano por identificador.

Cabe señalar que el BSP ha desarrollado módulos generales para respaldar las operaciones del servidor a largo plazo.

Por lo tanto, el concepto de programación asincrónica en 1C:Enterprise 8 aumenta ligeramente la complejidad de resolver problemas para el desarrollador, pero mejora significativamente la funcionalidad del programa desde el punto de vista del usuario.

A menudo, al mantener registros, es necesario realizar periódicamente determinadas acciones sin la intervención del usuario. Las tareas rutinarias y en segundo plano en 1C son aquellos mecanismos que se prevén para ello en la octava versión del programa y permiten:

  • Establecer la entrega oportuna de documentos;
  • Calcular saldos y totales;
  • Asegurar la frecuencia del envío de correo;
  • Verifique y elimine datos irrelevantes.

Tarea en segundo plano y programada: ¿qué es y dónde se configura?

Una tarea de rutina es un mecanismo integrado en 1C que permite configurar y, de acuerdo con el cronograma y frecuencia establecidos, realizar una determinada secuencia de acciones.

Un trabajo en segundo plano es una acción generada por una operación de rutina y no requiere la participación directa del usuario.

Se crea una tarea de rutina en el modo configurador:

  • En la ventana del árbol de configuración encontramos la rama correspondiente (Fig. 1);
  • Haga clic en el botón Agregar;
  • En la ventana que se abre, debes especificar un nombre que permita identificar el objeto en la configuración;

Figura 2

  • Frente a la inscripción "Programa" (Fig. 2) hay una inscripción "Abrir", al hacer clic en ella se abre una ventana para configurar el tiempo y la frecuencia de ejecución del controlador (Fig. 3);

Fig. 3

  • También es necesario completar el “Nombre del método” (aquí se ingresará el nombre del procedimiento llamado desde el módulo general y que describe el algoritmo de comportamiento del programa);
  • Los campos “Nombre” y “Clave” le permiten agrupar objetos;
  • La casilla de verificación "Usar" marcada indica la actividad de la operación programada;
  • Se debe configurar "Predefinido" si el controlador debe iniciarse inmediatamente después de agregarlo a la base de datos; de lo contrario, el inicio se puede realizar desde el procesamiento correspondiente (más sobre esto a continuación);
  • Los parámetros "Número de reintentos" e "Intervalo de reintentos" describen el comportamiento del programa si se produce una excepción durante la ejecución de un trabajo en segundo plano.

Entonces, utilizando el mecanismo de operaciones de rutina, puede establecer el cronograma y las acciones principales de los trabajos en segundo plano. Veamos ahora sus características.

Características de los trabajos en segundo plano.

La característica principal de este mecanismo es que el proceso en segundo plano se ejecuta de forma asincrónica.

¿Qué quiere decir esto? El caso es que con un modelo de trabajo síncrono, si se ejecuta algún algoritmo, la interfaz de usuario se bloquea. En nuestro caso, el usuario puede continuar ingresando y editando datos incluso si el procedimiento está en ejecución. El modelo de programación asincrónica implica la separación de subprocesos computacionales.

Por lo tanto, los trabajos en segundo plano en 1C pueden generar sus propios procesos, distribuyendo los cálculos entre varios servidores incluidos en el mismo clúster.

Características de trabajar en modo cliente-servidor.

  • La planificación y el control de la ejecución lo lleva a cabo un planificador desde un clúster de servidores;
  • Si aparece una solicitud de ejecución, el programador busca procesos de trabajo del clúster con una carga mínima y les distribuye tareas para su ejecución;
  • Cada proceso puede realizar múltiples cálculos paralelos;
  • Después de que llega una tarea, el proceso se conecta a la base de datos y ejecuta el algoritmo en ella;
  • El proceso informa los resultados al planificador.

Trabajos en segundo plano en modo archivo

Antes de la versión 8.3.3.641 de la plataforma, trabajar con trabajos en segundo plano en la versión de archivo presentaba algunas dificultades:

  1. Era necesario iniciar una sesión separada que funcionara las 24 horas del día, reemplazando al planificador;
  2. Esta sesión debería haber ejecutado periódicamente el método RunJobProcessing().

Después de la actualización, cada inicio de los clientes pesados ​​y ligeros, si se especifica la clave AllowExecuteScheduledJobs en la configuración de inicio (Fig. 4) en el campo "Adicional", inicia un hilo adicional que se conecta a la base de datos, lo que no afecta la capacidad del usuario. trabajar de cualquier manera, pero solo realiza tareas en segundo plano.

Fig.4

Se debe tener en cuenta que incluso en la versión de archivo del trabajo, los procesos en segundo plano no permiten el trabajo interactivo con el usuario (no se mostrarán mensajes de servicio, advertencias y preguntas). Es decir, deben codificarse como si se ejecutaran en el lado del servidor.

Cómo desactivar las tareas programadas

Las tareas no utilizadas se pueden desactivar simplemente desmarcando la casilla de verificación "Usar" en las propiedades del objeto.

En el caso de que el administrador necesite prohibir el uso de operaciones de rutina y en segundo plano para toda la base de datos (por ejemplo, en el servidor se almacenan varias bases de datos, de las cuales solo una es la principal y el resto se usan solo para el desarrollo), es necesario utilizar la utilidad de administración de bases de datos. También puede marcar la casilla de verificación "Establecer bloqueo de tareas de rutina" en la base de datos creada en el servidor.

Además, los discos ITS tienen una "Consola de tareas" de procesamiento especial, que le permite editar el cronograma de procesos en segundo plano y cambiar su actividad.