¿Qué es un controlador de eventos en 1s? Todas las suscripciones a eventos. Suscripciones al evento "Al publicar" un documento

Este artículo es un anuncio de nueva funcionalidad.
No se recomienda utilizar el contenido de este artículo para aprender nuevas funciones.
Se proporcionará una descripción completa de la nueva funcionalidad en la documentación de la versión correspondiente.
Se proporciona una lista completa de cambios en la nueva versión en el archivo v8Update.htm.

Implementado en EDT versión 1.7.0.567.

En 1C:Enterprise Development Tools (EDT) hemos implementado un prototipo de una nueva herramienta. El nombre provisional de esta herramienta es editor. Todas las suscripciones a eventos. Le ayudará a analizar cómodamente las suscripciones a todos los eventos que existen en la solución de la aplicación.

Suscripciones a eventos

La plataforma 1C:Enterprise le permite crear suscripciones a eventos de objetos de configuración en la solución de la aplicación. Una suscripción es un procedimiento que se ejecutará después de que se haya ejecutado el controlador de eventos original. La conveniencia de las suscripciones radica en el hecho de que un procedimiento puede "suscribirse" a un evento que pertenece a diferentes objetos de configuración. Por lo tanto, si hay un algoritmo que debe ejecutarse tanto al registrar una organización como al registrar un departamento, se puede ubicar en la suscripción y luego ni siquiera tendrá que cambiar los controladores para este evento en los propios objetos.

Resulta que la suscripción es un mecanismo conveniente y universal. Pero en soluciones de aplicaciones grandes, el número de suscripciones a eventos puede llegar a varios cientos. Resulta inconveniente analizarlos en el árbol de configuración, en una lista lineal. Por ejemplo, en una solución de aplicación. 1C:Gestión empresarial (ERP) Más de 340 suscripciones a eventos.

EDT facilita un poco el trabajo con suscripciones mostrándolas en el panel Esquema, cuando se abre un módulo de algún objeto de aplicación.


Esta visualización de suscripciones es conveniente para una serie de tareas relacionadas con la edición de un módulo. Pero todavía no es adecuado cuando necesita encontrar y analizar rápidamente todos los algoritmos que se ejecutan en las suscripciones cuando ocurre un evento en particular.

Todas las suscripciones a eventos

Para eliminar los inconvenientes enumerados anteriormente, hemos implementado una forma universal de representar suscripciones, eventos, objetos de configuración y procedimientos en los que se implementan algoritmos de suscripción.


Como resultado, puedes llamar al editor. Todas las suscripciones a eventos para toda la configuración, o solo para un objeto, la diferencia solo estará en la composición de los datos, filtrados de alguna manera.


En el lado izquierdo, el editor muestra todos los eventos, y en cada evento todas sus suscripciones. Cuando selecciona una suscripción específica, se muestra una lista de objetos de configuración a cuyos eventos está "suscrita" la suscripción en la parte superior derecha. Y en la parte inferior derecha se muestra el módulo y procedimiento en el que se encuentra el algoritmo de suscripción. Al hacer doble clic en un procedimiento, puede abrirlo en el editor de idioma incorporado.

Mientras estás en el editor, puedes analizar no sólo las suscripciones individuales, sino también todas las suscripciones relacionadas con un evento. Si selecciona un evento, el editor mostrará todos los módulos y todos los procedimientos firmados para procesar este evento.


Si llama al editor para un objeto de configuración, solo se mostrarán los eventos y suscripciones de ese objeto, y el objeto en sí siempre estará resaltado en rojo en la lista de fuentes. De esta manera podrá comprobar rápidamente, por ejemplo, que la suscripción que elija funcione para todos los objetos de configuración para los que sea necesaria.


Llamar al editor mediante un comando contextual (en un objeto de configuración) le permite reducir inmediatamente la cantidad de suscripciones que se muestran en el editor. Por ejemplo, puede ver las suscripciones solo para aquellos eventos que se procesan en el módulo de objetos o en el módulo de administrador.


Además, el editor contiene un filtro universal con el que puedes personalizar la composición de objetos, eventos y procedimientos de cualquier forma.


Tenga en cuenta que con este filtro puede seleccionar no sólo objetos específicos que son el origen de eventos, sino también conjuntos de tipos como DirectorioObjeto, Objeto de documento y otros. Dichos conjuntos de tipos incluyen todos los directorios o todos los documentos que están en la configuración.

Al buscar por cadena, puede encontrar rápidamente solo aquellas suscripciones relacionadas con el mecanismo que le interesa.


En cualquier momento, puedes filtrar rápidamente el contenido por evento o fuente que se muestra en el editor. Por ejemplo, encontraste una suscripción. Verificar fórmula de cálculo. Su fuente es el plan de tipos de cálculo. Sostiene.


Usando el comando contextual en el plan de tipos de cálculo, puede ver rápidamente solo aquellas suscripciones que están asociadas con sus eventos.


Agregar puntos de interrupción automáticamente

Una forma común de analizar las suscripciones a eventos es ver secuencialmente todos los procedimientos llamados en el depurador en el orden en que se ejecutaron. Para hacer esto, el editor proporciona una herramienta conveniente para agregar automáticamente puntos de interrupción a los controladores.

En primer lugar, puedes llamar a esta herramienta directamente en el editor.


Puede buscar y seleccionar el objeto que le interesa, seleccionar uno de sus eventos y marcar, por ejemplo, todos los controladores. Después de hacer clic DE ACUERDO Los puntos de interrupción se agregarán a la primera línea ejecutable de cada controlador marcado y todos estos puntos de interrupción aparecerán en el panel. Puntos de interrupción en perspectiva Depuración.


Otra forma de agregar puntos de interrupción es conveniente cuando ya ha encontrado el objeto o evento que le interesa en el editor. En este caso, puede llamar el comando que más le convenga desde el menú contextual.


Y finalmente, la tercera forma que puede utilizar es agregar automáticamente puntos de interrupción durante la depuración. En este caso no es necesario abrir el editor porque el comando agregar está justo en el panel. Puntos de interrupción.


Entonces el editor Todas las suscripciones a eventos es una herramienta universal que le permite utilizar una variedad de escenarios de análisis. Será útil no sólo para los desarrolladores que conocen bien la solución de la aplicación, sino también para los especialistas en implementación o especialistas en TI que necesitan comprender una funcionalidad desconocida.

Cuando el usuario realiza alguna acción, la plataforma 1C genera eventos del programa. Como regla general, no se genera un solo evento, sino toda una cadena de eventos. La tarea del programador es colocar correctamente el código del programa en los eventos para lograr el comportamiento esperado del programa. Sin embargo, esto no será fácil para un programador novato de 1C, por las razones que se enumeran a continuación.

Los eventos se pueden generar de forma controlada: On ReadingOnServer, OnCreatingOnServer, OnOpening, etc.

Los eventos se generan de forma controlada en el cliente y en el servidor: BeforeRecord, BeforeRecordOnServer.

Los eventos se llaman en diferentes módulos: ElementForm, ObjectModule, ManagerModule.

Algunos eventos se pueden llamar varias veces si hay varios elementos de directorio en la lista, por ejemplo: ProcessingGetView.

Se puede abrir un formulario administrado como resultado de diferentes acciones del usuario y las cadenas de llamadas de eventos serán diferentes. Cualquiera de las siguientes acciones del usuario con el directorio abrirá un formulario controlado: crear un nuevo elemento, copiar un elemento, cambiar un elemento del directorio existente.

Los eventos también son generados por elementos del formulario: al agregar una fila a la parte tabular, al editar una fila en la parte tabular, al activar una fila o campo, al seleccionar un elemento de búsqueda en el campo de entrada, etc.

Para comprender mejor la lógica y la secuencia de los eventos desencadenados, puede utilizar el desarrollo "Estudio de eventos" adjunto a este artículo. Conociendo el contexto de la llamada del evento, la secuencia de eventos y las acciones que realizará el usuario, será más fácil entender en qué controlador de eventos es mejor colocar el código de su programa.

Instrucciones para utilizar el programa de estudio de eventos

El programa Estudio de eventos muestra los eventos que genera la plataforma 1C durante las acciones interactivas del usuario. El principio de funcionamiento es el siguiente: el usuario abre el directorio, el programa muestra la cadena de eventos. El usuario marca un elemento del directorio para su eliminación y el programa muestra la secuencia de eventos que ocurren. Los eventos se muestran con un ligero retraso de 3 segundos de forma predeterminada; esto es necesario para separar una cadena de eventos de otra cadena de eventos. Por lo tanto, es necesario realizar acciones interactivas "lentamente".

Todos los eventos se muestran en una ventana especial de "Últimos eventos". Aquí puede habilitar o deshabilitar la grabación de eventos. De forma predeterminada, la grabación de eventos está habilitada cuando se abre por primera vez. Le aconsejo que fije la ventana "Últimos eventos" en la parte inferior de la pantalla inmediatamente después de iniciar el programa, para ver cómodamente los eventos.

El programa en sí no puede determinar qué acción causó la cadena de eventos; le aconsejo que escriba en el campo "Causa de la acción" los nombres de sus últimas acciones, por ejemplo, "El formulario de la lista del directorio está abierto", "Un elemento en el directorio la lista está marcada para su eliminación”, etc. Esto facilitará el análisis de acciones y eventos.

Los eventos se registran y muestran para los objetos colocados en la sección "Seguimiento de eventos", siempre que la grabación de eventos esté habilitada en el formulario "Eventos recientes".

Todos los eventos registrados se pueden ver a través del "Informe de eventos", que se encuentra en la sección "Servicio".

Para borrar rápidamente todas las acciones y eventos registrados, en la sección "Servicio", seleccione "Borrar eventos y acciones".

La suscripción a un evento 1C 8.3 y 8.2 es un objeto de configuración que le permite asignar un controlador a un evento de objeto específico. Un controlador de este tipo se puede asignar a varios objetos de configuración a la vez, por ejemplo, a todos los documentos a la vez.

Echemos un vistazo más de cerca a este objeto de metadatos.

  • Al instalar un nuevo número
  • Al copiar
  • ProcesamientoRelleno
  • Antes de grabar
  • Al grabar
  • Antes de eliminar
  • ProcesamientoRealización
  • ProcesamientoRemociónRealización
  • ProcesamientoComprobaciónRelleno

Puedes suscribirte a un evento. sólo en el objeto, no en la forma.

El orden de llamar a los controladores en 1C 8

Los controladores de suscripción de eventos se llaman después del controlador de objetos, es decir. Si la suscripción al evento está configurada en el evento "ProcessingProcessing", primero se ejecutará el controlador del módulo de objeto y luego el controlador de la suscripción.

Obtenga 267 lecciones en video sobre 1C gratis:

Si hay varias suscripciones a un evento, entonces, a juzgar por la experiencia, se llama primero a la suscripción que está más arriba en el árbol de configuración. Aunque la propia empresa 1C informa que esta prioridad no ha sido determinada.

Usar suscripciones a eventos en 1C

Usar suscripciones es muy conveniente, por ejemplo, para registrar cambios en . O alguna otra acción que sea igual para diferentes objetos de configuración.

A menudo utilizo suscripciones a eventos para no cambiar el estándar. Esto es muy conveniente, por ejemplo, en una suscripción podemos ajustar movimientos de documentos o agregar movimientos a nuevos registros sin cambiar la configuración.

Configurar una suscripción a un evento

Configurar una suscripción es muy simple:

  • Fuente— tipos de datos para los que está instalado el manejador;
  • Evento— el evento para el cual está instalado el controlador;
  • Manipulador— indica el procedimiento desde el cual se ubicará el controlador de eventos.

Al desarrollar o modificar soluciones de aplicaciones en la plataforma 1C:Enterprise 8.x, muy a menudo es necesario realizar alguna acción estándar para un grupo de objetos de configuración (por ejemplo, directorios). Para no describir las acciones realizadas en el módulo de cada objeto, el desarrollador puede utilizar el mecanismo estándar de la plataforma: suscripción a eventos.

Las suscripciones a eventos le permiten interceptar eventos de objetos de configuración, como directorios, documentos, planes de tipos de características y otros. Hoy en el artículo consideraremos la cuestión de la secuencia de ejecución de los controladores de suscripción a eventos y también analizaremos el comportamiento de la plataforma con varias suscripciones a eventos para una acción (por ejemplo, al grabar).

Comportamiento estándar

Dejemos que nuestro ejemplo utilice un determinado directorio "SimpleDirectory". Tiene suscripciones a eventos creadas para cada evento en el que el desarrollador puede intervenir. Los procedimientos del controlador de eventos se encuentran en el módulo común del servidor correspondiente.

El orden de llamada a los controladores de suscripción es el mismo que en el comportamiento estándar de la plataforma cuando se trabaja con este objeto. Dado que en nuestro ejemplo estamos considerando trabajar con un directorio, propongo considerar el esquema para llamar a los controladores dependiendo de las acciones con un objeto (ver la siguiente captura de pantalla).

Como podemos ver, en la etapa inicial se llaman los controladores de eventos "ProcessingFill" (para crear un nuevo elemento) o "On Copying" (para crear un elemento basado en uno existente). En ambos casos, luego de llamar a los manejadores nombrados, se ejecuta el procedimiento "OnInstallNewCode", donde el desarrollador puede establecer un prefijo en el código o anular el comportamiento de la plataforma al asignar un nuevo código.

Al escribir un elemento del directorio, ya sea un elemento nuevo o uno existente, se denominan tres controladores: "ProcessingFillCheck" (en esta etapa el controlador puede verificar la exactitud de los datos ingresados ​​y, si hay errores, negarse a escribir), “BeforeWrite” (hasta que el objeto esté escrito en la base de datos, puede ajustar los valores de los detalles y verificar cualquier condición adicional) y luego “OnRecord” (se ha realizado un registro en la base de datos, pero la transacción no se cierra , el desarrollador puede verificar los datos después del registro y, si es necesario, cancelar la transacción).

El evento "BeforeDelete" ocurre sólo si un objeto se elimina directamente de la base de datos. Normalmente, ningún usuario tiene permiso para eliminar directamente sin comprobar la integridad referencial. La eliminación siempre debe realizarse mediante el procesamiento "Eliminación de objetos marcados". En el último caso, también se llama al controlador "BeforeDelete".

Por lo tanto, si creamos un elemento de directorio y lo escribimos en la base de datos, la plataforma llamará a los siguientes controladores de eventos en el orden especificado:

Respecto a otros objetos de configuración, el funcionamiento del mecanismo de suscripción de eventos será similar, sólo que los eventos y su orden podrán diferir. Consulte el asistente de sintaxis para obtener más detalles.

El lado indocumentado

Ahora veamos una situación interesante. Digamos que para nuestro directorio "SimpleDirectory" están definidas tres suscripciones al evento "BeforeRecord":

¿En qué orden cree que se llamará a los administradores de estas suscripciones? No adivinemos. Daré el resultado de grabar un elemento donde el controlador de cada suscripción muestra un mensaje con el nombre de la suscripción llamada (ver la siguiente captura de pantalla).

De la captura de pantalla no es difícil adivinar que el orden de llamada de los procedimientos del controlador de suscripción de eventos corresponde al orden de los objetos de metadatos en la rama "Suscripciones de eventos". Esta característica no se describe en ninguna literatura de referencia sobre la plataforma 1C:Enterprise, por lo que debe tener cuidado al usarla en la configuración, ya que las características no documentadas pueden cambiar de una versión a otra de 1C:Enterprise y al mismo tiempo estar ausentes de la lista de cambios de programa.

Retiro

Quizás se pregunte: "¿Por qué crear varias suscripciones para un evento de objeto de configuración?" La respuesta es simple. Si en el desarrollo participan varias personas, la interferencia en los mecanismos creados por cada uno de ellos puede provocar un funcionamiento incorrecto del programa. En tales casos, lo más lógico sería crear suscripciones a eventos independientes para cada desarrollador de acuerdo con la tarea en cuestión. Por supuesto, es posible que en el futuro se combinen en un único procedimiento de tratamiento.

Cuando un usuario hace clic en un botón, se abre o se cierra un formulario, se escribe un documento, ocurre un evento.

Antes de grabar cada documento, queremos comprobar que este detalle esté cumplimentado.

¿Cómo hacerlo?

Suscripciones a eventos 1C

La suscripción a eventos 1C es , se encuentra en la rama de configuración General/Suscripciones a eventos 1C.

Suscribirse a un evento 1C le permite asignar un controlador cuando ocurre un evento para varios objetos (directorios, documentos).

Agreguemos una nueva suscripción al evento 1C y establezcamos el nombre.

En la propiedad de suscripción al evento 1C Fuente, debe seleccionar uno o más documentos, directorios, objetos en los que colocamos el controlador.

En la propiedad Suscripción a eventos 1C, debe seleccionar una de las opciones para eventos estándar que pueden ocurrir con los documentos y directorios seleccionados.

Simplificamos diciendo "documentos y libros de referencia"; de hecho, puede utilizar muchos objetos 1C. Desafortunadamente, no puede suscribirse a los eventos del formulario 1C, por ejemplo, al abrir un formulario, algo que muchos programadores lamentan.

El conjunto de eventos posibles depende del objeto. Tenga cuidado, porque si selecciona varios (múltiples) objetos, entonces la lista de eventos solo contendrá aquellos eventos que cada uno de los objetos seleccionados puede tener (es decir, eventos comunes a todos los objetos seleccionados).

Después de esto, todo lo que queda es crear una función de controlador. Para hacer esto, la configuración debe tener marcada la casilla Servidor en las propiedades. Cuando hace clic en el botón "lupa", se creará una función: un controlador.

¡Todo! Acabamos de suscribirnos al evento 1C BeforeRecording para todos los documentos. Ahora, al registrar cualquier documento, se ejecutará nuestra función, que incluye una verificación.

Para negarse a escribir un documento si el cheque es negativo, debe configurar el parámetro de función