Módulos generales 1C- un objeto de metadatos de configuración 1C 8.3 y 8.2, que almacena el código del programa que a menudo se llama en la configuración. Se puede llamar a una función/procedimiento desde cualquier lugar de la configuración (si se exporta).
Cómo usar el módulo compartido
Es una buena práctica poner un procedimiento o función en un módulo común si se llama en más de un lugar. Primero, si se corrige un procedimiento, solo se debe corregir en un lugar. En segundo lugar, consigue un mayor orden en el código.
Un ejemplo típico de un módulo común es el procesamiento de la publicación de acuerdo con algún registro, obtener el monto de la diferencia en días hábiles, convertir tipos de cambio, volver a calcular la cantidad/precio/importe en la sección tabular y otras funciones.
Propiedades generales del módulo
Una de las principales diferencias entre los módulos compartidos y otros módulos es que no puede declarar variables compartidas.
Obtenga lecciones en video de 267 1C gratis:
Echemos un vistazo más de cerca a la paleta de propiedades del módulo común:
- Global- si se establece la bandera, las funciones y los procedimientos de este módulo estarán disponibles en el contexto global. Aquellos. se pueden llamar en cualquier parte de la configuración sin el nombre del módulo común. Sin embargo, se agrega una condición: los nombres de los procedimientos y funciones en este módulo común deben ser únicos dentro del contexto global.
- Servidor— los procedimientos y funciones de este módulo común pueden ejecutarse en el servidor.
- Unión exterior- los códigos de programa de este módulo común se pueden ejecutar cuando se conectan mediante una fuente externa (por ejemplo, COM).
- Cliente (aplicación administrada)— Los procedimientos y funciones de este módulo común se pueden usar en un cliente pesado en el modo de aplicación administrada.
- Cliente (aplicación normal)— los códigos de programa de este módulo común se pueden usar en el cliente pesado en el modo de aplicación normal.
- llamada del servidor- una bandera que permite al cliente utilizar los procedimientos y funciones de este módulo común.
- - si se establece en Verdadero, la verificación de derechos de acceso se desactivará en este módulo común.
- Reutilizar — determina la configuración de los valores devueltos, si la opción está habilitada, luego de la primera ejecución, el sistema recordará el valor de estos parámetros de entrada y devolverá un valor preparado. Puede tomar los siguientes valores: no utilizado- cerrar, en el momento de la llamada- durante la duración de un determinado procedimiento, durante la sesión- hasta que el usuario haya cerrado la sesión (programa).
Si estás empezando a aprender programación 1C, te recomendamos nuestro curso gratuito (no olvides
Cualquier programa consta de un código de programa, es decir, en realidad de una secuencia de acciones escritas en cualquier lenguaje que se debe realizar.
Sin embargo, este mismo programa debe estar escrito en alguna parte, es decir, debe estar ubicado en alguna parte. En la mayoría de los casos, el código del programa se escribe en archivos de texto sin formato. La única diferencia es que la extensión en ellos no es .txt, sino .cpp o .php.
¿Dónde está escrito el programa 1C?
¿Qué es el Módulo 1C?
Por supuesto, el código 1C también podría escribirse en algún archivo de texto. Sin embargo, existe el concepto de configuración 1C, que incluye no solo una lista de configuraciones, plantillas de formulario y otras cosas, sino también el código del programa 1C. Por lo tanto, el código 1C se almacena en la configuración.
La configuración consta de objetos 1C, como ya hemos considerado en lecciones anteriores. Cada objeto 1C contiene objetos anidados, por ejemplo, un directorio tiene varias formas.
Cada objeto 1C, incluidos algunos anidados, tiene su propio Módulo, una especie de archivo de texto que contiene código de programa.
También hay módulos independientes de objetos en los que se puede escribir código de programa independiente de un objeto en particular.
Por lo tanto, en 1C no hay un programa "único". Hay un conjunto de módulos para escribir código de programa para cada objeto de configuración 1C.
¿Cómo se utilizan los módulos 1C?
El programa completo se puede dividir aproximadamente en dos tipos:
- método de objeto
- Reacción a los acontecimientos.
Métodos. Como dijimos anteriormente, el objeto 1C es una estructura integral que incluye tanto datos como métodos para procesarlos. Estos métodos son un conjunto de acciones (métodos) que se pueden llamar para procesar datos. Un ejemplo de tal acción DirectoryObject.Write(): escribe un elemento del directorio en la base de datos.
Los métodos de muchos objetos 1C pueden ser estándar (es decir, programados en la plataforma 1C) y escritos por un programador en el lenguaje 1C. Con la ayuda de este último, puede ampliar la funcionalidad de los objetos 1C como desee.
Desarrollos. Los eventos se encuentran en muchas otras herramientas de desarrollo. El propósito del programa no es solo calcular algo al inicio, sino también apoyar el trabajo del usuario.
Evento de usuario: el usuario presionó el botón. En respuesta, se ejecutará una parte del código, que reaccionará a las acciones del usuario.
Eventos del sistema: escribimos el objeto 1C en la base de datos. Se ha producido el evento del sistema "Objeto de registro". Es posible configurar la reacción que ocurrirá ante eventos causados no por el usuario (que presionó el botón o hizo algo más), sino por el propio sistema. Un ejemplo sorprendente de tal evento es cuando comienza el programa.
El orden de ejecución de los módulos 1C.
En muchos idiomas existe algo así como un "punto de entrada". Esta es la primera línea o función que se ejecutará cuando se inicie el programa.
Hay varios puntos de entrada de este tipo en 1C, para cada tipo de cliente. Es decir, al iniciar un cliente grueso, el punto de entrada es uno, al iniciar un cliente ligero, es otro. Esto le permite programar características que son diferentes en diferentes tipos clientela.
El punto de entrada en el módulo correspondiente son los controladores de eventos del sistema BeforeSystemStart() y AtSystemStart() respectivamente (es decir, en orden). Estas funciones se ejecutan primero, pueden iniciar algo automáticamente.
Si nada se lanzó automáticamente, entonces la interfaz 1C se abre frente al usuario y luego todo depende de eso. Hace clic en el botón: se ejecuta el controlador para presionar este botón (que, a su vez, también puede iniciar algo automáticamente).
Trabajar con módulos 1C
Producido en el configurador. Puede abrir el módulo mediante la ventana Configuración.
Los módulos comunes son responsables de almacenar procedimientos y funciones que se llaman desde otros lugares en el sistema 1C. Se considera una buena práctica colocar el código que se llama varias veces en un procedimiento en un módulo compartido. Esta regla es universal para todas las configuraciones, por lo que cualquier desarrollador de 1C debería poder trabajar con estos objetos de configuración. Para hacer esto, debe comprender todos los matices y poder utilizar adecuadamente las oportunidades que brinda la plataforma.
Creando un módulo común en 1C
Después de crear una función en uno de los módulos del objeto, era necesario usar un algoritmo similar en otro lugar. Lo más correcto que puede hacer aquí es transferir el código a un módulo común, pero antes debe crearlo. Para ello, debemos ir al configurador y buscar la pestaña "General" en el árbol de configuración. Luego seleccione "Módulos generales" y use el botón en forma de un más blanco en un círculo verde.
A la derecha, se abrirán las propiedades del módulo común agregado, y tenemos que averiguar qué significa cada uno de ellos. Pueden ser de diferentes direcciones, por lo que, antes de montar un nuevo objeto, conviene decidir qué almacenaremos allí. En todo caso, en el futuro será posible cambiar las propiedades de acuerdo con las tareas:
- "Global". Este indicador se establece si el módulo está destinado a almacenar procedimientos y funciones que deben llamarse sin especificar el nombre del módulo. Naturalmente, deben ser exportables y sus nombres deben ser únicos en el contexto de todo el contexto global. En términos de uso, no diferirán de las funciones estándar de la plataforma;
- "Cliente". Depende de la configuración del sistema y regula si los procedimientos del módulo se pueden ejecutar en el lado del cliente;
- "Servidor". Los módulos comunes están marcados, en los que se planea colocar algoritmos para su ejecución en el servidor;
- "Conexión exterior". Los procedimientos del módulo con esta propiedad habilitada se pueden ejecutar a través de una conexión de fuente externa;
- Llamada del servidor. Responsable de permitir que los procedimientos de un módulo llamen al servidor mientras se ejecutan en el cliente;
- "Privilegiado". La activación de esta configuración permitirá que el código de procedimiento del módulo no verifique los derechos de acceso cuando se ejecuta. Solo puede llamar a un módulo compartido con esta configuración en el servidor. Se restablecerán los ajustes de "Cliente" y "Conexión externa";
- "Reutilizar". Puede tomar los siguientes valores: "No usar", "Durante la duración de la sesión", "Durante la duración de la llamada". Cuando se llama a un procedimiento varias veces, el sistema puede usar datos calculados previamente dentro del procedimiento (llamada) o durante la duración de la sesión completa (a partir de 1C). Debe tener mucho cuidado con esta configuración, ya que pueden ocurrir errores debido al uso incorrecto de dichos módulos.
Hay situaciones en las que desea crear un módulo común con llamadas de procedimiento en el servidor y el cliente con diferencias en el algoritmo. Para delimitar el código se utilizan directivas de preprocesador con verificación. Como resultado, para una llamada de servidor será un código y para una llamada de cliente será otro.
Procedimiento AlgorithmServerClient() Export #If ThinClient Luego // el código se ejecuta si la llamada al procedimiento proviene del cliente ShowUserAlert("On the client"); ElseIf Server Entonces // el código se ejecuta si la llamada al procedimiento proviene del servidor VariableServer = "Llamada al servidor"; #EndIf EndProcedure
Un ejemplo de transferencia de código a un módulo 1C común
Consideremos una situación en la que tenemos dos eventos en el formulario del documento que involucran un procedimiento para multiplicar la cantidad y el precio en la sección tabular. Este es un algoritmo bastante común, ya que se encuentra en muchos documentos de adquisición e implementación. Transfiramos el código del procedimiento a un módulo común, que debe crearse previamente para poder usar este código en otros documentos.
&En el procedimiento del cliente GoodsPriceOnChange(Element) RecalculationAmount(); EndProcedure &AtClient Procedimiento GoodsQuantityOnChange(Element) RecalculationAmount(); Fin del Procedimiento &En el Procedimiento del Cliente Recálculo del Importe() String PM = Elements.Goods.CurrentData; String PM.Sum = String PM.Cantidad * String PM.Precio; Procedimiento finalDado que para nuestra tarea necesitamos una llamada del cliente y no necesitamos datos de la base de datos, configuramos solo el indicador "Cliente". Si desea utilizar el mismo módulo para cálculos más complejos en el futuro, también marque "Servidor" en las propiedades. La etapa preparatoria ha terminado y podemos pasar a escribir código.
Vamos a crear un procedimiento de exportación en el módulo y transferir allí el algoritmo para calcular la cantidad del procedimiento en el módulo de formulario. La cadena de la sección tabular se utilizará como parámetro de procedimiento en la entrada. En el módulo de formulario de documento, cambiamos las llamadas de procedimiento en el mismo módulo a una llamada de procedimiento del módulo general.
Fragmento 1
&AtClient Procedimiento GoodsPriceOnChange(Item) //llame al procedimiento desde el módulo común CalculationsInSystem.CalculateString(Items.Goods.CurrentData); //ImporteRecalculo(); Fin del procedimiento &En el procedimiento del cliente GoodsQuantityOnChange(Item) //llame al procedimiento desde el módulo común CalculationsInSystem.CalculateString(Items.Goods.CurrentData); //ImporteRecalculo(); Fin del Procedimiento &En el Procedimiento del Cliente Recálculo del Importe() String PM = Elements.Goods.CurrentData; String PM.Sum = String PM.Cantidad * String PM.Precio; Procedimiento finalFragmento 2
No notaremos ninguna diferencia cuando se inicie el sistema, pero esta estructura de código es mucho más fácil de leer y mantener. Por supuesto, en este ejemplo, la cantidad de código no puede mostrar todos los beneficios. En el caso de un algoritmo complejo para decenas de objetos de configuración, la ganancia en la cantidad de código y su estructura también afectará el rendimiento del sistema. Además, los desarrolladores experimentados de 1C recomiendan no describir algoritmos en módulos de formulario, sino colocarlos en módulos comunes configurados correctamente.
Al desarrollar módulos comunes, se deben tener en cuenta las reglas generalmente aceptadas para su creación:
- Coloque los procedimientos y funciones relacionados con una funcionalidad similar en un módulo común separado;
- En el nombre del módulo, refleje su pertenencia al contexto (Cliente, Servidor) y evite palabras comunes (handlers, procedimientos, etc.);
- Separe la lógica del servidor interno de la aplicación y la lógica del cliente para la interfaz;
- Tenga cuidado al crear un módulo compartido global. No tener que hacer referencia a un procedimiento a través del nombre de un módulo puede resultar confuso, especialmente si el sistema cuenta con el respaldo de varios equipos de desarrollo.
Los módulos creados correctamente lo ayudarán a navegar la estructura de configuración mucho más rápido y a realizar mejoras. Si ve una oportunidad de hacer que una función útil sea genérica y moverla a un módulo común, hágalo. En el futuro, usted y sus colegas estarán agradecidos por esta decisión.
En la plataforma 8.2, una aplicación gestionada propone una separación de las funciones de cliente y servidor para optimizar el rendimiento de la aplicación. En el cliente, por ejemplo, no puede acceder a los datos de la base de datos. Y del lado del servidor, los datos del formulario no están disponibles, en cuyo módulo hay un procedimiento con la directiva &AtServerWithoutContext. El código del programa en 1C se encuentra en varios módulos, un módulo de objeto, un módulo de formulario, módulos generales, etc. Los procedimientos y funciones de cada módulo se pueden compilar tanto en el servidor como en el cliente. Considere las posibilidades de llamar a varios procedimientos y funciones desde procedimientos compilados en el lado del servidor y procedimientos compilados en el lado del cliente.
Asi que, desde el lado del cliente, puede llamar
1) procedimientos de cliente de este módulo, con la directiva &AtClient;
2) procedimientos de servidor de este módulo, con directiva &AtServer;
3) procedimientos de cliente de un módulo común, con la directiva &AtClient (sujeto a disponibilidad en varios contextos en las propiedades, se requiere "Cliente", etc.);
4) todos los procedimientos del módulo común del cliente, en las propiedades del módulo común debe estar solo la propiedad "Cliente (aplicación administrada)". La directiva &AtClient no está escrita en el módulo general en este caso;
5) procedimientos del módulo común del servidor, pero con la propiedad adicional "Llamada al servidor", y es importante que el módulo común tenga solo la propiedad de compilación en el servidor.
Desde el lado del servidor, puede llamar
1) procedimientos de servidor de este módulo, con directiva de compilación &AtServer;
2) todos los procedimientos del módulo común del servidor, y en las propiedades del módulo común debe estar solo la propiedad "Servidor". La directiva &AtServer no está escrita en el módulo general en este caso;
3) procedimientos del módulo general, con la directiva &AtServer (sujeto a disponibilidad en varios contextos en las propiedades, se requiere "Server", etc.).
Además, si se especifican varios lugares de compilación "Cliente, Servidor" en las propiedades del módulo común y no se especifica ninguna directiva de compilación en el procedimiento, en este caso el procedimiento se compilará tanto en el lado del servidor como en el del cliente. lado. Y se puede llamar, respectivamente, desde métodos de cliente y métodos de servidor. En este caso, debe usar el procedimiento con cuidado, es necesario que su código se pueda ejecutar tanto en el servidor como en el cliente.
Hay una característica más. En un módulo común que tiene varios lugares de compilación ("Servidor, cliente"), no puede llamar al procedimiento del servidor del mismo módulo desde el procedimiento del cliente, incluso si marca la casilla de verificación "llamada al servidor". La propiedad "llamada al servidor" tiene sentido si solo hay una propiedad de módulo común "compilación en el servidor".
Hay recomendaciones para usar módulos compartidos compilados solo en el servidor o solo en el cliente. En consecuencia, use todos los módulos de cliente en el módulo con la propiedad "Cliente" y use todos los métodos de servidor en el módulo con la propiedad "servidor".
Otra propiedad útil de un módulo compartido. Si activa la propiedad "Global" en las propiedades de un módulo común, los procedimientos de este módulo se pueden llamar directamente, sin el nombre del módulo común.
Pero no se deje llevar por esta propiedad, porque en este caso el módulo se compilará al iniciar el sistema, lo que aumenta el tiempo de inicio.
Módulos de plataforma 1C: Enterprise 8.3, 8.2
Módulos generales
Las funciones que se declaran con el indicador "exportar" en dicho módulo se pueden llamar desde cualquier lugar de la configuración. La llamada se realiza a través de CommonModuleName.FunctionName().
Dichos módulos no tienen una sección variable.
La ejecución de módulos comunes depende de los parámetros establecidos en sus propiedades:
Marcar "Global"
Si se establece este indicador, el contexto de dicho módulo se vuelve global. Es decir, al acceder a sus funciones de exportación, no es necesario especificar el nombre del módulo. Pero los nombres de sus funciones de exportación deben ser únicos dentro del contexto de configuración global.
Marcar "Servidor"
Las funciones de dicho módulo se pueden realizar en el servidor.
Marcar "Cliente (aplicación regular)"
Las funciones de dicho módulo se pueden ejecutar en el cliente en el modo de una aplicación normal.
Marcar "Cliente (aplicación administrada)"
Las funciones de dicho módulo se pueden ejecutar en el cliente en modo de aplicación administrada.
Indicador de llamada del servidor
El indicador está disponible para módulos con el indicador "Servidor" establecido. Permite al cliente llamar a las funciones de exportación de este módulo (que se ejecutarán en el servidor).
Marcar "Unión externa"
Las funciones de exportación de dicho módulo se pueden llamar cuando se conecta desde una fuente externa.
Marcar "Privilegiado"
En un módulo con esta bandera, la verificación de permisos estará deshabilitada. Apto para productividad o actividades administrativas.
Opción de reutilización
Si habilita esta opción, los valores de retorno de las funciones de exportación se almacenarán en caché inmediatamente después de la primera llamada. El almacenamiento en caché es posible durante la duración de la llamada (el tiempo de ejecución de un determinado procedimiento) o durante la duración de la sesión del usuario.
Módulo de aplicación
Diseñado para manejar eventos de inicio y finalización de aplicaciones. Hay dos tipos: para aplicaciones regulares y administradas.
No debe sobrecargarlo, ya que esto afecta el tiempo de inicio de la aplicación.
módulo de sesión
Un módulo especial que se utiliza para inicializar los parámetros de la sesión. Necesario para no duplicar código en diferentes módulos de aplicación.
Debe usarse con cuidado, ya que el módulo se puede ejecutar varias veces y también se puede ejecutar sin más arranque de la base. Se ejecuta antes que los módulos de aplicación.
Atentamente, (profesor y desarrollador).