Desde el lanzamiento 8.2 de la plataforma 1C:Enterprise, las directivas de compilación pueden definir si una tarea debe ejecutarse en el lado del cliente o en el lado del servidor. Esto complica ligeramente el proceso de desarrollo, pero ayuda a los desarrolladores a crear configuraciones de 1C más rápidas y mejor optimizadas, ya que la carga de todas las tareas complejas se puede transferir al servidor. Esta separación cliente-servidor significa que algunas funcionalidades están disponibles en el cliente y otras en el servidor. La información sobre qué objetos y características están disponibles en el lado del cliente o en el lado del servidor se puede obtener de Syntax Assistant.
El cliente y el servidor se comunican entre sí utilizando llamadas al servidor para completar procedimientos que requieren acciones relacionadas con la base de datos. Comprender el mecanismo básico detrás de esta comunicación es necesario para diseñar una solución eficiente que pueda responder a las consultas del cliente, especialmente con un ancho de banda de red determinado.
En este artículo, se explicarán las diferencias entre las directivas de compilación más comunes y se demostrarán con un ejemplo práctico:
-
&AtClient: El código marcado con esta directiva se ejecuta en la computadora del cliente (una computadora operada por el usuario) y con los permisos del usuario actual. Cualquier archivo creado por los procedimientos o funciones de &AtClient se almacena en la computadora del cliente.
Cuando se utiliza &AtClient, tenga en cuenta que la computadora del cliente suele ser más lenta que el servidor, lo que resulta en una ejecución más lenta de su código.
Existen varias limitaciones de código para &AtClient. Por ejemplo, los procedimientos o funciones de &AtClient no pueden acceder al DBMS. Esto significa que tanto las consultas a la base de datos como las referencias para acceder o modificar un objeto no están disponibles. Para hacer eso, un procedimiento de &AtClient necesita llamar a otro procedimiento con la directiva &AtServer o &AtServerNoContext.
-
&AtServer: El código marcado con esta directiva se ejecuta en el servidor 1C (en el proceso rphost que maneja las solicitudes del cliente e interactúa con el servidor de la base de datos). Cualquier archivo creado por los procedimientos de &AtServer se almacena en el servidor y solo se pueden guardar en carpetas a las que el usuario del agente 1C tenga acceso de escritura. Las funciones o procedimientos con la directiva &AtServer pueden utilizar consultas, acceder a datos predefinidos y detalles de objetos a través de la referencia.
Esta directiva es la más funcional de las tres, pero también potencialmente la que más recursos consume.
-
&AtServerNoContext: Un formulario gestionado (por ejemplo, formulario de elemento, formulario de lista, formulario de documento) se representa en el backend como un archivo XML que describe la ubicación de los elementos y los valores de los detalles del formulario. Cuantos más elementos haya en el formulario, más datos se almacenan en los detalles del formulario. Cuando se llama a un fragmento de código con la directiva &AtServer, ese XML del formulario se envía desde la computadora del cliente al servidor. Este XML es lo que se entiende por contexto.
La desventaja de usar &AtServer es que se envía al servidor el archivo XML completo incluso cuando se necesita modificar una pequeña sección del formulario. A veces puede ser necesario transferir archivos bastante grandes que pueden tardar incluso minutos en procesarse. En cambio, cuando se llama a un procedimiento o función sin contexto (&AtServerNoContext), la función no tiene acceso a los detalles del formulario y no puede leerlos ni modificarlos. Especialmente cuando una función no hace nada con el formulario, el uso de esta directiva hace que la configuración se ejecute mucho más rápido, ya que la transferencia de datos se reduce significativamente.
Comparación rápida
| Directiva | Acceso a Datos del Formulario | Acceso a la Base de Datos | Carga de Trabajo |
| &AtClient | ✔ | ✘ | Lado del cliente |
| &AtServer | ✔ | ✔ | Lado del servidor |
| &AtServerNoContext | ✘ | ✔ | Lado del servidor |
Ejemplo básico

Varias líneas están comentadas ya que los objetos en estas líneas no son accesibles con la directiva dada.
Existen otras dos directivas de compilación: &AtClientAtServer y &AtClientAtServerNoContext, que no se utilizan comúnmente pero pueden ser útiles en ciertos casos.
Para obtener más detalles sobre cada directiva de compilación, consulte 4.8.1. Ejecución de procedimientos y funciones.


