Contactos

El mecanismo de las formas principales. Asignar controladores de eventos mediante suscripciones a eventos Crear una nueva suscripción

Los módulos de objetos existen para objetos de aplicación (documentos, directorios, planes de cuentas, etc.) y están destinados principalmente al procesamiento de eventos estándar del tipo de registro. Aquí también puede colocar condiciones como comprobar la exactitud de los datos. Es importante comprender que el manejo de eventos de registro también se puede ubicar en el módulo de formulario, pero solo funcionará cuando interactivo trabajar con el objeto. Si el objeto está escrito programáticamente, entonces el controlador de eventos se ejecutará desde el módulo de objeto.
El módulo de objeto se puede abrir haciendo clic en el botón correspondiente en la pestaña Otro:
Desplazarse procedimientos predefinidos - controladores de eventos módulos de objetos:

  • Módulo de objeto de referencia:
    • Al instalar un nuevo código
    • Al copiar
    • ProcesamientoRellenar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • ProcesamientoChequeRelleno
  • Módulo de objeto de documento:
    • Procesando
    • ProcesamientoRellenar
    • Al instalar un nuevo número
    • Al copiar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • ProcesamientoEliminación
    • ProcesamientoChequeRelleno
  • Módulo de objeto de informe:
    • ProcesamientoChequeRelleno
    • Al vincular resultado
    • Establecer encabezados de campo
  • Módulo de objeto de procesamiento:
    • ProcesamientoChequeRelleno
  • Módulo de objeto de plano de tipo característico:
    • Al instalar un nuevo código
    • Al copiar
    • ProcesamientoRellenar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • ProcesamientoChequeRelleno
  • Módulo objeto Plan de cuentas:
    • Al copiar
    • ProcesamientoRellenar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • ProcesamientoChequeRelleno
  • Módulo objeto plan tipo cálculo:
    • Al copiar
    • ProcesamientoRellenar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • ProcesamientoChequeRelleno
  • Módulo de objeto de proceso de negocio:
    • Al instalar un nuevo número
    • Al copiar
    • ProcesamientoRellenar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • ProcesamientoChequeRelleno
  • Módulo de objeto de tarea:
    • Al instalar un nuevo número
    • Al copiar
    • ProcesamientoRellenar
    • Antes de grabar
    • Al grabar
    • Antes de la eliminación
    • Manejo de la activación interactiva
    • ProcesamientoChequesEjecución
    • Antes de la ejecución
    • Antes de la ejecución interactiva
    • Haciendo
    • ProcesamientoChequesEjecución

Pregunta 06.18 del examen 1C: Profesional de plataforma. ¿Dónde se encuentran los procedimientos del controlador de eventos del objeto de la aplicación, por ejemplo, Al escribir, antes de eliminar?

  1. En el módulo de formulario
  2. En el módulo de objetos
  3. En el módulo de aplicación
  4. Los objetos de aplicación no tienen tales eventos.

Analizando arriba.

Pregunta 06.41 del examen 1C: Plataforma profesional. Usando el comando "AddHandler", puede asignar un controlador de eventos a:

  1. Objeto COM
  2. 1C: Instancia de objeto empresarial (asignar a eventos de módulo de objeto)
  3. una instancia del objeto "Formulario"
  4. correctas 1,2 respuestas
  5. 1,2,3 respuestas son correctas

Pasemos al asistente de sintaxis. Los ejemplos tratan de instancias de objetos y objetos COM.

Agregar controlador

Sintaxis:

Agregar controlador<Событие>, <ОбработчикСобытия>;

Opciones:

<Событие>

El evento al que se agrega el controlador.

El evento se establece en la forma<Выражение>.<Имя_события>, Dónde:


<Выражение>- una expresión arbitraria en el lenguaje incorporado, cuyo resultado debe ser un objeto, a cuyo evento se le agrega un controlador;

<Имя_события>- identificador (nombre) del evento.


<ОбработчикСобытия>

Procedimiento/función del evento.

Un controlador de eventos puede ser un método de un objeto de lenguaje 1C:Enterprise. Entonces<ОбработчикСобытия>dado como<Выражение>.<Имя_обработчика>, Dónde:


<Выражение>- una expresión arbitraria en el lenguaje incorporado, cuyo resultado debe ser un objeto cuyo método actúa como controlador de eventos;

<Имя_обработчика>- el nombre del método del controlador de eventos.


Además, un procedimiento/función ubicado en el alcance se puede configurar como controlador de eventos. En este caso, el controlador de eventos se especifica como el nombre de un procedimiento/función.

Descripción:

Agrega un controlador de eventos.

Al agregar un controlador de eventos, se realiza una verificación para hacer coincidir la cantidad de parámetros del evento con la cantidad de parámetros del método asignado como controlador.

Ejemplo:


Procesamiento = Procesamiento. Control de documentos. Crear () ; Factura = Documentos. Factura. CrearDocumento() ; Agregar factura de procesador. Sobre grabación, procesamiento. CuandoEscribirDocumento; msword = Nuevo COMObject("Word.Application"); Agregar controlador de msword. Cambio de documento, Al cambiar documento;

Procedimiento Al cambiar documento() Para reportar ( "Documento cambiado") ; Procedimiento final


***

Pregunta 06.36 del examen 1C: Plataforma profesional. Al definir un controlador de eventos en un objeto COM, la cantidad de parámetros en el procedimiento del controlador es:

  1. es igual al número de parámetros del evento de objeto correspondiente
  2. un parámetro más que el evento de objeto correspondiente (el primer parámetro contiene el objeto COM en sí)
  3. un parámetro más que el evento de objeto correspondiente (el último parámetro contiene el objeto COM en sí)
  4. siempre un parámetro (el propio objeto COM)

La respuesta correcta es la primera, al agregar un controlador de eventos se verifica que el número de parámetros del evento coincida con el número de parámetros del método asignado como controlador.

Pregunta 06.37 del examen 1C: Plataforma profesional. Al definir una suscripción a un evento, la cantidad de parámetros en el procedimiento - controlador:

  1. este procedimiento no tendrá parámetros

La respuesta correcta es la primera. Código de ejemplo en un controlador de eventos:

Procedimiento Al cambiar documento(Rechazo )
Procedimiento final

Un ejemplo del código de procedimiento del controlador:

Procedimiento Al cambiar documento(Fuente, Descargo de responsabilidad)

Procedimiento final


Pregunta 06.38 del examen 1C: Profesional de plataforma. Al definir un controlador de eventos para una instancia del objeto 1C:Enterprise, el número de parámetros en el procedimiento del controlador:

  1. es igual al número de parámetros del controlador de eventos correspondiente ubicado en el módulo de objeto
  2. un parámetro más que el controlador de eventos correspondiente ubicado en el módulo del objeto (el primer parámetro contiene el objeto en sí)
  3. un parámetro más que el controlador de eventos correspondiente ubicado en el módulo del objeto (el último parámetro contiene el objeto en sí)
  4. este procedimiento no tendrá parámetros
  5. siempre un parámetro (el objeto mismo para el cual se definió la suscripción)

La respuesta correcta es la segunda, similar a la pregunta anterior.

Pregunta 06.40 del examen 1C: Plataforma profesional. Al asignar un controlador de eventos a un objeto (instancia de objeto 1C:Enterprise, objeto COM), el procedimiento responsable de procesar este evento debe ubicarse:

  1. requerido en el módulo compartido global
  2. requerido en un módulo compartido no global
  3. requerido en el módulo de aplicación
  4. La elección del módulo no es importante, dentro de la "visibilidad".

La respuesta correcta es la cuarta; consulte el extracto del asistente de sintaxis.

en el objeto Documento existe un conjunto de eventos con los cuales el desarrollador puede intervenir en el proceso de escritura de un documento en la base de datos utilizando controladores para estos eventos. Dependiendo del tipo de acción que realiza el usuario, los eventos del documento se activan en una secuencia específica.
Existen los siguientes tipos principales de acciones para un documento:

  • quemar
  • Conducta
  • Pasar y cerrar
  • Cancelación
Considere la secuencia de eventos para cada acción.

Acción quemar

Para un documento no publicado, la secuencia de eventos cuando el documento se escribe desde el formulario será la siguiente:
  1. Módulo de objeto: antes de escribir (la transacción comienza, el documento aún no se ha escrito);
  2. Módulo de formulario (&AtServer): al escribir en el servidor (realizar una transacción);
Tenga en cuenta que para expandir el formulario del documento, la plataforma 1C establece de forma predeterminada el valor Verdadero para la propiedad OnRecordRewire Por lo tanto, al registrar un documento publicado desde un formulario, la plataforma 1C lo volverá a publicar automáticamente. En este caso, para el documento publicado, la secuencia de eventos al escribir desde el formulario será la siguiente:
  1. Módulo de formulario (&OnClient) - antes de grabar;
  2. Módulo de formulario (&AtServer): procesamiento de la verificación de llenado en el servidor;
  3. Módulo de objeto: procesamiento de control de llenado;
  4. Módulo de formulario (&AtServer): antes de grabar en el servidor;
  5. Módulo de objeto: antes de escribir (comienzo de una transacción, el documento aún no se ha escrito);
  6. Módulo de objeto: al escribir (se escribe el documento);
  7. Módulo de objetos: procesamiento de publicaciones (formación de un conjunto de registros de movimientos de documentos);
  8. Módulo de formulario (&AtServer): cuando se registra en el servidor (se registra un conjunto de registros de movimiento de documentos, se confirma la transacción);
  9. Módulo de formulario (&AtServer): después de grabar en el servidor;
  10. Módulo de formulario (&OnClient) - después de la grabación.
Si para una propiedad OnRecordRewire valor ajustado Mentir, entonces la secuencia de eventos al registrar un documento publicado desde el formulario será la misma que para un documento no publicado.

Secuencia de ejecución de eventos al redactar un documento desde un formulario cuya publicación está prohibida (propiedad Tenencia ajustado a prohibición) será el siguiente:
A diferencia del documento, que se permite publicar, en este caso no hay ningún evento. Procesando. Pero, al grabar un documento publicado con reenvío y al grabar un documento cuya publicación está prohibida, además de la grabación en sí, también se llama a un evento en el contexto del formulario y en el contexto del objeto. ProcesamientoChequeRelleno. Este evento es llamado por la extensión del formulario para verificar que los detalles se completen al escribir o publicar un documento en el formulario.

Ejecución de acción

Al realizar esta acción, es decir, registrar un nuevo documento con publicación desde el formulario, la secuencia de eventos será la misma que para la acción de registrar un documento publicado (ver Figura 2).

Acción Publicar y cerrar

La secuencia de ejecución de eventos es similar a la acción de conducta (ver Figura 2).

Cancelación de acción

Esta acción inicia la redacción de un documento y desencadena la siguiente secuencia de eventos:
  1. Módulo de formulario (&OnClient) - antes de grabar;
  2. Módulo de formulario (&AtServer): antes de grabar en el servidor;
  3. Módulo de objeto: antes de escribir (inicio de la transacción);
  4. Módulo de objetos: manejo de la eliminación de conductas (eliminación de movimientos);
  5. Módulo de objetos: durante la grabación (movimientos eliminados, documento grabado);
  6. Módulo de formulario (&AtServer): después de grabar en el servidor (realizar una transacción);
  7. Módulo de formulario (&OnClient) - después de la grabación.
Si las acciones no se ejecutan desde el formulario (realizadas mediante programación), ¡la diferencia es que los eventos del formulario no se ejecutan!

en el objeto Documento existe un conjunto de eventos con los cuales el desarrollador puede intervenir en el proceso de escritura de un documento en la base de datos utilizando controladores para estos eventos. Dependiendo del tipo de acción que realiza el usuario, los eventos del documento se activan en una secuencia específica.
Existen los siguientes tipos principales de acciones para un documento:

  • quemar
  • Conducta
  • Pasar y cerrar
  • Cancelación
Considere la secuencia de eventos para cada acción.

Acción quemar

Para un documento no publicado, la secuencia de eventos cuando el documento se escribe desde el formulario será la siguiente:
  1. Módulo de objeto: antes de escribir (la transacción comienza, el documento aún no se ha escrito);
  2. Módulo de formulario (&AtServer): al escribir en el servidor (realizar una transacción);
Tenga en cuenta que para expandir el formulario del documento, la plataforma 1C establece de forma predeterminada el valor Verdadero para la propiedad OnRecordRewire Por lo tanto, al registrar un documento publicado desde un formulario, la plataforma 1C lo volverá a publicar automáticamente. En este caso, para el documento publicado, la secuencia de eventos al escribir desde el formulario será la siguiente:
  1. Módulo de formulario (&OnClient) - antes de grabar;
  2. Módulo de formulario (&AtServer): procesamiento de la verificación de llenado en el servidor;
  3. Módulo de objeto: procesamiento de control de llenado;
  4. Módulo de formulario (&AtServer): antes de grabar en el servidor;
  5. Módulo de objeto: antes de escribir (comienzo de una transacción, el documento aún no se ha escrito);
  6. Módulo de objeto: al escribir (se escribe el documento);
  7. Módulo de objetos: procesamiento de publicaciones (formación de un conjunto de registros de movimientos de documentos);
  8. Módulo de formulario (&AtServer): cuando se registra en el servidor (se registra un conjunto de registros de movimiento de documentos, se confirma la transacción);
  9. Módulo de formulario (&AtServer): después de grabar en el servidor;
  10. Módulo de formulario (&OnClient) - después de la grabación.
Si para una propiedad OnRecordRewire valor ajustado Mentir, entonces la secuencia de eventos al registrar un documento publicado desde el formulario será la misma que para un documento no publicado.

Secuencia de ejecución de eventos al redactar un documento desde un formulario cuya publicación está prohibida (propiedad Tenencia ajustado a prohibición) será el siguiente:
A diferencia del documento, que se permite publicar, en este caso no hay ningún evento. Procesando. Pero, al grabar un documento publicado con reenvío y al grabar un documento cuya publicación está prohibida, además de la grabación en sí, también se llama a un evento en el contexto del formulario y en el contexto del objeto. ProcesamientoChequeRelleno. Este evento es llamado por la extensión del formulario para verificar que los detalles se completen al escribir o publicar un documento en el formulario.

Ejecución de acción

Al realizar esta acción, es decir, registrar un nuevo documento con publicación desde el formulario, la secuencia de eventos será la misma que para la acción de registrar un documento publicado (ver Figura 2).

Acción Publicar y cerrar

La secuencia de ejecución de eventos es similar a la acción de conducta (ver Figura 2).

Cancelación de acción

Esta acción inicia la redacción de un documento y desencadena la siguiente secuencia de eventos:
  1. Módulo de formulario (&OnClient) - antes de grabar;
  2. Módulo de formulario (&AtServer): antes de grabar en el servidor;
  3. Módulo de objeto: antes de escribir (inicio de la transacción);
  4. Módulo de objetos: manejo de la eliminación de conductas (eliminación de movimientos);
  5. Módulo de objetos: durante la grabación (movimientos eliminados, documento grabado);
  6. Módulo de formulario (&AtServer): después de grabar en el servidor (realizar una transacción);
  7. Módulo de formulario (&OnClient) - después de la grabación.
Si las acciones no se ejecutan desde el formulario (realizadas mediante programación), ¡la diferencia es que los eventos del formulario no se ejecutan!

Puede resultar difícil para un programador que tiene poca experiencia en la plataforma 1C 8.2 descubrir: antes de grabar, al grabar, después de grabar, en el servidor, en el cliente, en el módulo de formulario, en el módulo de objeto, ah-ah -ah-ah-ahhh!!.....
Al principio tuve un sentimiento muy complejo de malentendido. En el proceso de aprendizaje y experiencia real, se creó esta hoja de trucos, cuyo propósito era "ordenar las cosas" para que hubiera una comprensión clara de qué controlador se debe utilizar, en qué caso y en qué secuencia se inician cuando objetos de escritura.

¿Por qué necesitamos estos controladores?
Muy a menudo, un programador necesita redefinir el comportamiento estándar del sistema durante la grabación de objetos, a saber: cancelar la grabación, en caso de algunas condiciones; solicitar información adicional al usuario; complete los detalles; escriba algo más en la base de datos basándose en este registro; cambiar algo en el formulario después de grabar, etc. etcétera. Tarde o temprano, cada programador se enfrenta a tareas similares, por lo que un programador que trabaja en la plataforma 1C 8.2 necesita conocer el propósito y la secuencia del lanzamiento de estos eventos.

¿En el módulo de formulario o en el módulo de objetos?
Primero debemos decidir si necesitamos datos del formulario. ¿La grabación se escribirá mediante programación o solo de forma interactiva? ¿Tendremos un diálogo con el usuario?
El hecho es que algunos de los eventos se ejecutan a nivel del módulo del formulario, lo que significa que se ejecutan solo durante la grabación interactiva, y en estos eventos podemos acceder a los datos del formulario y dialogar con el usuario.
La otra parte de los eventos se realiza en el nivel del módulo de objeto, tanto de forma interactiva como programática.
Por lo tanto, podemos decidir inmediatamente con qué controlador del módulo de formulario o módulo de objeto trabajaremos.

Módulo de formulario: ¿cliente o servidor?
Además, si se selecciona el módulo de formulario, es necesario decidir qué controlador se requiere: ejecutable en el cliente o ejecutable en el servidor. Si se requiere un diálogo con el usuario, entonces en el cliente, en caso contrario en el servidor. Se pueden distinguir por el nombre de la directiva de compilación o por el nombre del controlador (cuando están en el servidor, esto está escrito en el nombre, como BeforeWriteOnServer()).

¿Cómo elegir un controlador específico?
La elección depende de la tarea en cuestión. A continuación se describirá qué se puede hacer exactamente en cada controlador, pero por ahora es un ejemplo.

Un ejemplo de selección de controladores de eventos de registro de objetos:
Hay tareas en las que es necesario utilizar varios controladores para resolver una tarea. Por ejemplo, es necesario solicitar información al usuario durante la grabación: "¿Vamos a crear un nuevo documento basado en este registro?" y, si el usuario responde afirmativamente, entonces se debe crear un nuevo documento con un enlace al objeto que se está escribiendo. Además, la inscripción de un nuevo documento debe realizarse en una transacción, porque. Si el registro actual se cancela por algún motivo, entonces el documento ya creado y registrado no debería permanecer en la base de datos.
Para realizar esta tarea, necesitará utilizar controladores de eventos del módulo de formulario por dos motivos:
1) El diálogo con el usuario solo es posible en el cliente y los controladores de clientes solo están disponibles en el módulo de formulario. Para el diálogo, usaremos el procedimiento de cliente del módulo de formulario BeforeWrite() y almacenaremos la respuesta del usuario en el parámetro "RecordParameters" de este procedimiento.
2) Y en el procedimiento OnWriteOnServer() del módulo de formulario aceptaremos este parámetro y dependiendo de él crearemos un documento o no. ¿Por qué este procedimiento en particular? El enlace se obtendrá solo después de la escritura, pero como necesitamos escribir en una transacción, debemos usar procedimientos ANTES de que se complete la transacción, pero ya teniendo un enlace al objeto que se está escribiendo. BeforeWrite() no funciona porque aún no hay ninguna referencia y AfterWrite() no funciona porque la transacción ya está confirmada. Permanece en Write(), pero nos enfrentamos a una elección: ¿un módulo de formulario o un módulo de objeto? Dado que el controlador de eventos OnWrite() del módulo de objeto no contiene un parámetro que contenga la respuesta del usuario, pero el evento OnWriteOnServer() del módulo de formulario sí, la respuesta es obvia: usamos este evento OnWriteOnServer() del módulo de formulario porque :
1) Este evento se ejecuta en una transacción 2) Contiene el parámetro RecordParameters, que ya contiene la respuesta del usuario, que se pasó desde el procedimiento BeforeWrite() 3) El enlace ya se creó y puede crear un nuevo documento usando este enlace .

Bueno, ahora la secuencia de los eventos de disparo (en el orden en que aparecen) y pequeños detalles:
Muchos controladores tienen una opción de Rechazar. Cuando este parámetro está presente, significa que aún es posible rechazar la grabación en este controlador configurando el parámetro "Rechazar" en Verdadero, y luego no se realizará la grabación.
1) Módulo de formulario BeforeRecord (Rechazo, RecordParameters)
¡Se ejecuta en el cliente!
Este controlador debe usarse si es necesario establecer un diálogo con el usuario antes de escribir el objeto. Solicitar información adicional, advertir sobre algo, dar la oportunidad de negarse, etc.
El segundo parámetro de este controlador "RecordParameters" es de tipo "Estructura". Para los documentos, el sistema completa estos parámetros con parámetros predefinidos Modo de grabación, Modo de publicación. Puedes agregar el tuyo propio.
Estos parámetros se pasan entre eventos del formato BeforeWriteOnServer, OnWriteOnServer, AfterWriteOnServer, donde se pueden utilizar de forma segura. Por ejemplo, al escribir un registro de información, debe escribir en otro registro de información el valor anterior del recurso. Puede pasar el valor anterior a estos mismos parámetros y ya en OnWriteAtServer, escribir en otro registro.
2) Módulo de formulario ProcessingFillingChecksOnServer (Failure, CheckedDetails)
3) Módulo del objeto ProcessingCheckFilling (Rechazo, CheckedDetails)

Estos dos controladores de verificación de llenado se implementan a través del parámetro Atributos verificados de tipo Matriz que contiene los detalles que se verificarán (es decir, que tienen la propiedad Verificación de llenado configurada en Lanzar un error).
Y si el atributo se elimina de esta matriz, no se verificará; si se agrega, se verificará el relleno.
Por tanto, podemos decir que estos dos controladores de eventos están destinados a:
Para incluir en el llenado marque aquellos detalles que tengan "No marcar" en las propiedades de "Comprobar llenado". Para hacer esto, debe agregar este atributo al parámetro de matriz "CheckedAttributes".
Para excluir de la verificación automática los requisitos que tengan la propiedad “Dar error” de la verificación de llenado, dependiendo de algunas condiciones. Para hacer esto, debe eliminar este atributo de la matriz del parámetro "Atributos verificados".
Hay varias características a considerar:
Si el formulario desde el cual se escribe el objeto no tiene configurado "Comprobar llenado automático" en sus propiedades, entonces estos controladores de verificación de llenado no se llaman y las comprobaciones no ocurren.
¡Llamado solo para grabación interactiva! No se les llama durante la grabación del programa. Para comprobarlo, debe utilizar el método CheckFill() del objeto, que desencadena el lanzamiento de estos eventos.
Para los documentos que se pueden publicar, estos eventos de verificación completa solo se generan cuando se publican.
Ambos eventos se ejecutan en el servidor, la diferencia es que FillCheckHandlingOnServer() es un evento del módulo de formulario y, por lo tanto, hay acceso a los datos del formulario. Y ProcessingFillCheck() es un evento del módulo de objeto.
4) Módulo de formulario BeforeWriteOnServer (Rejection, CurrentObject, RecordParameters)
En este gestor se pueden rellenar los datos del objeto o realizar comprobaciones adicionales. Hay acceso a los datos del formulario. Hay un parámetro CurrentObject.
El parámetro CurrentObject tiene el tipo de clase "objeto" dependiendo del tipo de objeto que se está escribiendo (CatalogObject, DocumentObject, etc.). Aquellos. Se ha creado una instancia de la clase de objeto y puede acceder a sus propiedades y métodos, pero aún no se ha escrito en la base de datos.
Inicio de transacción
5) Módulo de objeto antes de escribir (fallo)
En este gestor se pueden rellenar los datos del objeto o realizar comprobaciones adicionales.
Para los documentos, se agregan dos parámetros más a los parámetros de este controlador: Modo de grabación, Modo de publicación.
Grabación
6) Módulo de objeto WhenSettingNewNumber (StandardProcessing, Prefix)
Ocurre cuando se establece el número de un nuevo documento, tarea o proceso de negocio.
O al configurar un nuevo código (procesamiento estándar, prefijo)
Ocurre en el momento en que se establece un nuevo código de un elemento del directorio, un nodo del plan de intercambio o un código de plan de tipos de características.
Estos eventos se llaman para objetos que tienen especificada la propiedad "Autonumeración" y solo para objetos nuevos.
Si establece el parámetro StandardProcessing en False, no se generará un nuevo número y podrá configurar mediante programación el código objeto en este controlador.
7) Módulo de objeto al escribir (rechazo)
Se llama después de que el objeto se escribe en la base de datos, pero antes de que finalice la transacción de escritura.
El enlace ya está ahí y puede escribir datos adicionales en la base de datos según el objeto actual usando este enlace.
Por ejemplo, al grabar, cree otro documento que contenga el enlace requerido al documento que se está grabando.
8) Módulo de formulario OnWriteAtServer (Rejection, CurrentObject, RecordParameters)
Se llama después de que el objeto se escribe en la base de datos, pero antes de que finalice la transacción de escritura. Hay acceso a los datos del formulario. Queda una última oportunidad para darse de baja.
El parámetro CurrentObject tiene el tipo de clase "objeto" dependiendo del tipo de objeto que se está escribiendo (CatalogObject, DocumentObject, etc.). Puede consultar sus propiedades y métodos.
Fin de la transacción
9) Módulo de formulario AfterRecordOnServer (CurrentObject, RecordParameters)
Se ejecuta en el servidor.
Se puede utilizar para mostrar visualmente algo en el formulario.
10) Módulo de formulario AfterRecord (RecordParameters)
¡Se ejecuta en el cliente!
Se puede utilizar para mostrar visualmente algo en un formulario o emitir una advertencia al usuario.

¡Atención! Aquí hay una versión de prueba de la lección, cuyos materiales pueden no estar completos.

Iniciar sesión como estudiante

Inicie sesión como estudiante para acceder al contenido escolar

Crear configuraciones 1C: agregar procesamiento

Seguimos estudiando los conceptos básicos de la creación de configuraciones en 1C.

En esta lección, crearemos juntos un nuevo procesamiento y luego escribiremos comandos para él que demuestren cómo trabajar con el directorio "Empleados".

Volvemos al configurador y abrimos el árbol de configuración.

Agregar nuevo procesamiento

Haga clic derecho en la sección "Procesamiento" y seleccione "Agregar":

Se abre una ventana para crear un nuevo procesamiento. Vayamos a la pestaña "Básico" y especifiquemos "Procesamiento de referencia" como nombre del procesamiento:

Crear un formulario de procesamiento

Vayamos a la pestaña "Formularios" y hagamos clic en el signo más verde para agregar una nueva forma (una representación visual de nuestro procesamiento):

Ha aparecido el constructor del formulario. Deje todo como predeterminado y haga clic en "Finalizar":

Se ha abierto un nuevo formulario:

Crear un nuevo comando para el formulario

Vayamos a la pestaña "Comandos"->"Comandos de formulario":

Agreguemos un nuevo comando (signo más verde):

Y en las propiedades del nuevo comando, especifique el nombre "OutputAllEmployees":

En sus propiedades, haga clic en la lupa al lado del campo "Acción" para configurar el controlador de comandos. Elijamos la opción de crear el controlador "En el Cliente" y hagamos clic en "Aceptar":

Fuimos transferidos al módulo de formulario en el controlador de procedimientos del comando "OutputAllEmployees":

Escribir el código del controlador de comandos

Ahora nuestra tarea es escribir código en el lenguaje interno de 1C, que iterará sobre todos los elementos del directorio "Empleados".

Quiero decir de inmediato que este código no se puede escribir directamente en el procedimiento "OutputAllEmployees", ya que se ejecuta en el cliente (preste atención a la línea especial antes del procedimiento "&AtClient"). Intentar leer datos de la base de datos en un procedimiento de cliente siempre resultará en un error (solo recuerde esto por ahora).

Entonces agreguemos un procedimiento como este al final del módulo:

Tenga en cuenta que antes indiqué el signo "&AtServer". Esto significa que se ejecutará en el servidor, lo que significa que podemos leer datos del directorio desde él.

Ahora organizamos una llamada a este procedimiento desde el cliente "OutputAllEmployees":

Aquí la lógica es esta:

  1. El usuario llama al comando "Mostrar todos los empleados" (por ejemplo, haciendo clic en un botón que todavía no tenemos)
  2. El comando inicia el procedimiento de controlador "OutputAllEmployees" del mismo nombre en el cliente (después de todo, el botón y, por tanto, el comando, se encuentran en el cliente)
  3. El procedimiento del cliente "OutputAllEmployees" realiza una llamada al procedimiento del servidor "OutputAllEmployeesOnServer"
  4. El procedimiento del servidor "Salir de todos los empleados en el servidor" lee los datos del directorio de la base de datos y los muestra en la ventana de mensajes.

Lo único que nos queda es escribir el código del procedimiento "Salir de todos los empleados en el servidor", que recorre los elementos del directorio "Empleados" y los muestra en la ventana de mensajes.

Es realmente fácil. Omitir todos los directorios en 1C es lo mismo. Entonces, habiendo aprendido cómo hacer esto ahora con el directorio "Empleados", puede hacer lo mismo con cualquier otro directorio.

Para acceder a los datos del directorio se utiliza un gestor al que se accede de la siguiente manera:

Administrador = Directorios. Empleados;

En esta oración, la parte clave está a la derecha del signo igual. A la izquierda hay solo una variable en la que guardamos el administrador para poder seguir trabajando con él. El nombre de esta variable podría ser no sólo "Administrador", sino también cualquier otro, incluso "Cordero".

¿Qué es un administrador de directorio? El administrador aún no es el directorio de datos en sí. Un administrador es algún objeto de programa (puedes considerarlo como un cuadro negro) a través del cual podemos hacer algo con el directorio.

El administrador de directorio es, por así decirlo, una capa entre nuestro código y los datos del directorio. Y resulta que si necesitamos leer todos los elementos del directorio, entonces no podemos hacerlo directamente. Esto solo lo podemos pedir a nuestra capa entre nosotros y el directorio, es decir, el administrador.

Para hacer esto, debe llamar al método "Seleccionar" integrado en el administrador. Se llama mediante un punto después del nombre de la variable en la que está almacenado el administrador y devuelve una colección de elementos del directorio:

Administrador = Directorios. Empleados; Muestra = Gerente. Elegir() ;

¿Qué es una muestra? La selección (nuevamente, este es solo el nombre de la variable en la que guardamos el resultado del método "Select", y podría ser cualquier otra cosa) es una colección, pero no como una matriz o una lista de valores, por ejemplo. .

La muestra es un objeto; nuevamente, considérelo como una caja, no como los datos en sí. La peculiaridad de este objeto es que puede iterar sobre los elementos del directorio que necesitamos. Y los clasifica dinámicamente. Esto significa que al utilizar una selección no se leen todos los elementos del directorio a la vez, sino que se seleccionan en partes de la base de datos.

Este enfoque le permite omitir rápidamente grandes listas de directorios mediante una selección, sin cargarlos todos a la vez en la memoria de la computadora.

Para obtener la siguiente porción de datos de la selección, debe llamar al método "Siguiente" integrado en ella. La recepción de porciones de datos (una porción corresponde a un elemento del directorio) generalmente ocurre en un bucle:

Cuando finalicen los datos (elementos del directorio) en la selección, el método "Siguiente" devolverá False y el ciclo se detendrá.

Después de cada llamada al método "Siguiente" (siempre que devuelva "Verdadero"), la selección contendrá todos los campos con datos únicamente del elemento leído del diccionario, al que se puede acceder mediante nombres separados por un punto:

Resulta que en un momento estamos trabajando con los datos de solo uno de los elementos del directorio. Y aquí podemos mostrárselos inmediatamente al usuario (usando el método "Informe") o, por ejemplo, podemos agregarlos a otra colección (matriz), para que luego podamos hacer algo con ellos a la vez. Todo depende de la tarea que estemos resolviendo.



¿Te gustó el artículo? Compártelo