Diagrama de diseño de datos (1C SKD). Funciones del lenguaje de expresión de los campos calculados de composición de datos del sistema de composición de datos 1C

18.08.2023

Lenguaje de expresión del sistema de composición de datos

El lenguaje de expresiones del sistema de composición de datos está diseñado para escribir expresiones utilizadas en varias partes del sistema.

Las expresiones se utilizan en los siguientes subsistemas:

  • diagrama de diseño de datos: para describir campos calculados, campos totales, expresiones de conexión, etc.;
  • configuración de diseño de datos: para describir expresiones de campos personalizados;
  • diseño de diseño de datos: para describir expresiones para conectar conjuntos de datos, describir parámetros de diseño, etc.

Literales

La expresión puede contener literales. Son posibles los siguientes tipos de literales:

  • Línea;
  • Número;
  • Fecha de;
  • Booleano.

Línea

Un literal de cadena se escribe en caracteres "", por ejemplo:

"Cadena literal"

Si necesita utilizar el carácter "" dentro de una cadena literal, debe utilizar dos de esos caracteres.

Por ejemplo:

“Literal ““entre comillas”““

Número

El número se escribe sin espacios, en formato decimal. La parte fraccionaria se separa mediante el símbolo "." Por ejemplo:

10.5 200

fecha

Un literal de fecha se escribe utilizando el literal clave DATETIME. Después de esta palabra clave, el año, mes, día, horas, minutos y segundos aparecen entre paréntesis, separados por comas. No se requiere especificación de tiempo.

Por ejemplo:

DATETIME(1975, 1, 06) – 6 de enero de 1975 DATETIME(2006, 12, 2, 23, 56, 57) – 2 de diciembre de 2006, 23 horas 56 minutos 57 segundos, 23 horas 56 minutos 57 segundos

Booleano

Los valores booleanos se pueden escribir utilizando los literales Verdadero (Verdadero), Falso (Falso).

Significado

Para especificar literales de otros tipos (enumeración del sistema, datos predefinidos), se utiliza la palabra clave Valor, seguida del nombre del literal entre paréntesis.

Valor (Tipo de cuenta. Activo)

Operaciones con números

Unario –

Esta operación tiene como objetivo cambiar el signo de un número al signo opuesto. Por ejemplo:

Cantidad de ventas

Unario +

Esta operación no realiza ninguna acción en el número. Por ejemplo:

Cantidad de ventas

binario -

Esta operación tiene como objetivo calcular la diferencia de dos números. Por ejemplo:

ResidualsAndTurnovers.InitialRemaining – RemainingsAndTurnovers.FinalResidualsRemainingsAndTurnovers.InitialRemaining - 100 400 – 357

Binario +

Esta operación está diseñada para calcular la suma de dos números. Por ejemplo:

RemainingsAndTurnover.InitialRemaining + RemainingAndTurnover.Turnover ResiduesAndTurnover.InitialRemaining + 100 400 + 357

Trabajar

Esta operación está diseñada para calcular el producto de dos números. Por ejemplo:

Nomenclatura.Precio * 1,2 2 * 3,14

División

Esta operación está diseñada para obtener el resultado de dividir un operando por otro. Por ejemplo:

Nomenclatura.Precio / 1,2 2 / 3,14

Resto de la división

Esta operación está diseñada para obtener el resto cuando se divide un operando por otro. Por ejemplo:

Nomenclatura Precio % 1,2 2 % 3,14

Operaciones de cadena

Concatenación (Binario +)

Esta operación está diseñada para concatenar dos cadenas. Por ejemplo:

Nomenclatura.Artículo + “:”+ Nomenclatura.Nombre

Como

Esta operación comprueba si la cadena coincide con el patrón pasado.

El valor del operador LIKE es VERDADERO si el valor<Выражения>satisface el patrón y FALSO en caso contrario.

Los siguientes personajes en<Строке_шаблона>tienen un significado diferente al de cualquier otro carácter de la línea:

  • % - porcentaje: una secuencia que contiene cero o más caracteres arbitrarios;
  • _ - guión bajo: un carácter arbitrario;
  • […] - uno o más caracteres entre corchetes: un carácter, cualquiera de los que figuran entre corchetes. La enumeración puede contener rangos, por ejemplo a-z, es decir, un carácter arbitrario incluido en el rango, incluidos los extremos del rango;
  • [^...] - entre corchetes un icono de negación seguido de uno o más caracteres: cualquier carácter excepto los que aparecen después del icono de negación;

Cualquier otro símbolo significa sí mismo y no conlleva ninguna carga adicional. Si uno de los caracteres enumerados debe escribirse como sí mismo, debe ir precedido de<Спецсимвол>, especificado después de la palabra clave SPECIAL CHARACTER (ESCAPE).

Por ejemplo, plantilla

“%ABV[abvg]\_abv%” CARÁCTER ESPECIAL “\”

significa una subcadena que consta de una secuencia de caracteres: la letra A; letras B; letras B; un dígito; una de las letras a, b, c o d; guion bajo; letras a; letras b; letras v. Además, esta secuencia se puede localizar a partir de una posición arbitraria en la línea.

Operaciones de comparación

igual

Esta operación está destinada a comparar dos operandos para determinar la igualdad. Por ejemplo:

Ventas.Contraparte = Ventas.NomenclaturaProveedorMain

No es igual

Esta operación tiene como objetivo comparar dos operandos para determinar la desigualdad. Por ejemplo:

Ventas.Contraparte<>Ventas.NomenclaturaProveedor Principal

Menos

Esta operación está diseñada para comprobar que el primer operando es menor que el segundo. Por ejemplo:

VentasCantidad.Actual< ПродажиПрошлые.Сумма

Más

Esta operación está diseñada para comprobar que el primer operando es mayor que el segundo. Por ejemplo:

VentasActual.Suma > VentasPasadas.Suma

menor o igual

Esta operación está diseñada para comprobar que el primer operando es menor o igual que el segundo. Por ejemplo:

VentasCantidad.Actual<= ПродажиПрошлые.Сумма

Más o igual

Esta operación está diseñada para comprobar que el primer operando es mayor o igual que el segundo. Por ejemplo:

VentasActual.Importe >= VentasPasadas.Importe

Operación B

Esta operación comprueba la presencia de un valor en la lista de valores pasada. El resultado de la operación será Verdadero si se encuentra el valor, o Falso en caso contrario. Por ejemplo:

Artículo B (&Producto1, &Producto2)

Operación de comprobar la presencia de un valor en un conjunto de datos.

La operación comprueba la presencia de un valor en el conjunto de datos especificado. El conjunto de datos de validación debe contener un campo. Por ejemplo:

Ventas Contraparte a Contrapartes

Operación de verificar un valor para NULL

Esta operación devuelve True si el valor es NULL. Por ejemplo:

Ventas.Contraparte ES NULA

Operación de verificar un valor para la desigualdad NULL

Esta operación devuelve True si el valor no es NULL. Por ejemplo:

Ventas.La contraparte NO ES NULA

Operaciones lógicas

Las operaciones lógicas aceptan expresiones de tipo booleano como operandos.

Operación NO

La operación NOT devuelve Verdadero si su operando es Falso y Falso si su operando es Verdadero. Por ejemplo:

NO Documento.Consignatario = Documento.Consignador

Operación I

La operación AND devuelve Verdadero si ambos operandos son Verdaderos y Falso si uno de los operandos es Falso. Por ejemplo:

Documento.Consignatario = Documento.Consignador AND Documento.Consignatario = &Contraparte

O operación

La operación OR devuelve Verdadero si uno de sus operandos es Verdadero y Falso si ambos operandos son Falso. Por ejemplo:

Documento.Consignatario = Documento.Consignador O Documento.Consignatario = &Contraparte

Funciones agregadas

Las funciones agregadas realizan alguna acción sobre un conjunto de datos.

Suma

La función agregada Suma calcula la suma de los valores de las expresiones que se le pasan como argumento para todos los registros detallados. Por ejemplo:

Importe(Ventas.ImporteRotación)

Cantidad

La función Count calcula el número de valores distintos de NULL. Por ejemplo:

Cantidad(Ventas.Contraparte)

Número de diferentes

Esta función calcula el número de valores distintos. Por ejemplo:

Cantidad(Varias Ventas.Contraparte)

Máximo

La función obtiene el valor máximo. Por ejemplo:

Máximo (cantidad restante)

Mínimo

La función obtiene el valor mínimo. Por ejemplo:

Mínimo (cantidad restante)

Promedio

La función obtiene el promedio de valores no NULL. Por ejemplo:

Promedio (cantidad restante)

Otras operaciones

Operación SELECCIONAR

La operación Seleccionar tiene como objetivo seleccionar uno de varios valores cuando se cumplen ciertas condiciones. Por ejemplo:

Seleccione Cuando Monto > 1000 Luego Monto De lo contrario 0 Fin

Reglas para comparar dos valores.

Si los tipos de valores que se comparan son diferentes entre sí, entonces las relaciones entre los valores se determinan en función de la precedencia de los tipos:

  • NULO (más bajo);
  • booleano;
  • Número;
  • Fecha de;
  • Línea;
  • Tipos de referencia

Las relaciones entre diferentes tipos de referencia se determinan en función de los números de referencia de las tablas correspondientes a un tipo particular.

Si los tipos de datos son iguales, los valores se comparan de acuerdo con las siguientes reglas:

  • para el tipo booleano el valor VERDADERO es mayor que el valor FALSO;
  • el tipo Número tiene las reglas habituales de comparación de números;
  • para el tipo Fecha, las fechas anteriores son más pequeñas que las posteriores;
  • para el tipo String: comparación de cadenas de acuerdo con las características nacionales establecidas de la base de datos;
  • Los tipos de referencia se comparan en función de sus valores (número de registro, etc.).

Trabajar con valor NULO

Cualquier operación en la que uno de los operandos sea NULL producirá un resultado NULL.

Hay excepciones:

  • La operación AND devolverá NULL sólo si ninguno de los operandos es Falso;
  • La operación OR sólo devolverá NULL si ninguno de sus operandos es Verdadero.

Prioridades de operación

Las operaciones tienen las siguientes prioridades (la primera línea tiene la prioridad más baja):

  • B, ES NULO, NO ES NULO;
  • =, <>, <=, <, >=, >;
  • Binario +, Binario – ;
  • *, /, %;
  • Unario +, Unario -.

Funciones del lenguaje de expresión del sistema de composición de datos

Calcular

La función Calcular está diseñada para calcular una expresión en el contexto de una determinada agrupación. La función tiene los siguientes parámetros:

  • Expresión. Escriba Cadena. Contiene una expresión calculada;
  • Agrupamiento. Escriba Cadena. Contiene el nombre de la agrupación en cuyo contexto se evaluará la expresión. Si se utiliza una cadena vacía como nombre de agrupación, el cálculo se realizará en el contexto de la agrupación actual. Si se utiliza la cadena GrandTotal como nombre del grupo, el cálculo se realizará en el contexto del total general. De lo contrario, el cálculo se realizará en el contexto del grupo principal con el mismo nombre. Por ejemplo:
Suma(Ventas.SumTurnover) / Calcular("Suma(Ventas.SumTurnover)", "Total")

En este ejemplo, el resultado será la relación entre el monto del campo "Ventas.MontoTurnover" del registro de agrupación y el monto del mismo campo en todo el diseño.

Nivel

La función está diseñada para obtener el nivel de grabación actual.

Nivel()

Número en orden

Obtenga el siguiente número de secuencia.

NúmeroPorOrden()

NúmeroEnOrdenEnAgrupación

Devuelve el siguiente número ordinal de la agrupación actual.

NúmeroPorOrdenEnGrupo()

Formato

Obtenga una cadena formateada del valor pasado.

La cadena de formato se establece de acuerdo con la cadena de formato 1C:Enterprise.

Opciones:

  • Significado;
  • Cadena de formato.

Formato (Facturas de consumibles.Monto del documento, "NPV=2")

comienzo del periodo

Opciones:

    • Minuto;
    • Día;
    • Una semana;
    • Mes;
    • Cuarto;
    • Década;
    • Medio año.

Período de inicio (Fecha y hora (2002, 10, 12, 10, 15, 34), "Mes")

Resultado:

01.10.2002 0:00:00

Fin del periodo

La función está diseñada para extraer una fecha específica de una fecha determinada.

Opciones:

  • Fecha de. Escriba Fecha. Fecha específica;
  • Tipo de período. Escriba Cadena. Contiene uno de los siguientes valores:
    • Minuto;
    • Día;
    • Una semana;
    • Mes;
    • Cuarto;
    • Década;
    • Medio año.

EndPeriod(FechaHora(2002, 10, 12, 10, 15, 34), "Semana")

Resultado:

13.10.2002 23:59:59

AgregarAFecha

La función está diseñada para agregar un cierto valor a una fecha.

Opciones:

  • Tipo de ampliación. Escriba Cadena. Contiene uno de los siguientes valores:
    • Minuto;
    • Día;
    • Una semana;
    • Mes;
    • Cuarto;
    • Década;
    • Medio año.
  • Cantidad: cuánto necesita aumentar la fecha. Teclea un número. La parte fraccionaria se ignora.

AddToDate(FechaHora(2002, 10, 12, 10, 15, 34), "Mes", 1)

Resultado:

12.11.2002 10:15:34

Diferencia de fecha

La función está diseñada para obtener la diferencia entre dos fechas.

Opciones:

  • Expresión. Escriba Fecha. Fecha original;
  • Expresión. Escriba Fecha. Fecha restada;
  • Tipo de diferencia. Escriba Cadena. Contiene uno de los siguientes valores:
    • Segundo;
    • Minuto;
    • Día;
    • Mes;
    • Cuarto;

DIFERENCIA FECHA (FECHA HORA (2002, 10, 12, 10, 15, 34), FECHA HORA (2002, 10, 14, 9, 18, 06), "DÍA")

Resultado:

Subcadena

Esta función está diseñada para extraer una subcadena de una cadena.

Opciones:

  • Línea. Escriba Cadena. La cadena de la que se extrae la subcadena;
  • Posición. Teclea un número. La posición del carácter desde el que comienza la subcadena que se extraerá de la cadena;
  • Longitud. Teclea un número. Longitud de la subcadena asignada.

SUBSTRING(Cuentas.Dirección, 1, 4)

Longitud de la línea

La función está diseñada para determinar la longitud de una cadena.

Parámetro:

  • Línea. Escriba Cadena. Una cadena cuya longitud se especifica.

Línea(Contrapartes.Dirección)

Año

Esta función está diseñada para extraer el año de un valor de tipo Fecha.

Parámetro:

  • Fecha de. Escriba Fecha. La fecha en la que se determina el año.

AÑO(Gasto.Fecha)

Cuarto

Esta función está diseñada para extraer el número del trimestre de un valor de tipo Fecha. El número del cuarto normalmente oscila entre 1 y 4.

Parámetro

  • Fecha de. Escriba Fecha. La fecha en la que se determina el trimestre.
TRIMESTRE(Gasto.Fecha)

Mes

Esta función está diseñada para extraer el número de mes de un valor de tipo Fecha. El número de mes normalmente oscila entre 1 y 12.

  • Fecha de. Escriba Fecha. La fecha en la que se determina el mes.
MES(Gasto.Fecha)

Día del año

Esta función está diseñada para obtener el día del año a partir de un valor de tipo Fecha. El día del año normalmente oscila entre 1 y 365 (366).

  • Fecha de. Escriba Fecha. La fecha en la que se determina el día del año.
DÍAAÑO(CuentaGastos.Fecha)

Día

Esta función está diseñada para obtener el día del mes a partir de un valor de tipo Fecha. El día del mes normalmente oscila entre 1 y 31.

  • Fecha de. Escriba Fecha. La fecha en la que se determina el día del mes.
DÍA(Gasto.Fecha)

Una semana

Esta función está diseñada para obtener el número de semana del año a partir de un valor de tipo Fecha. Las semanas del año están numeradas empezando por el 1.

  • Fecha de. Escriba Fecha. La fecha en la que se determinan los números de semana.
SEMANA(Gasto.Fecha)

Día de la semana

Esta función está diseñada para obtener el día de la semana a partir de un valor de tipo Fecha. El día normal de la semana va del 1 (lunes) al 7 (domingo).

  • Fecha de. Escriba Fecha. La fecha en la que se determina el día de la semana.
DÍA DE LA SEMANA (Fecha de Factura de Gastos)

Hora

Esta función está diseñada para obtener la hora del día a partir de un valor de tipo Fecha. La hora del día oscila entre las 0 y las 23.

  • Fecha de. Escriba Fecha. La fecha en la que se determina la hora del día.
HORA(Gasto.Fecha)

Minuto

Esta función está diseñada para obtener el minuto de la hora a partir de un valor de tipo Fecha. El minuto de la hora va del 0 al 59.

  • Fecha de. Escriba Fecha. La fecha en la que se determina el minuto de la hora.
MINUTO(Gasto.Fecha)

Segundo

Esta función está diseñada para obtener el segundo de un minuto a partir de un valor de tipo Fecha. El segundo de un minuto va de 0 a 59.

  • Fecha de. Escriba Fecha. La fecha en la que se determinan los segundos del minuto.
SEGUNDO(Gasto.Fecha)

Expresar

Esta función está diseñada para extraer un tipo de una expresión que puede contener un tipo compuesto. Si la expresión contiene un tipo distinto al requerido, se devolverá NULL.

Opciones:

  • Expresión para convertir;
  • Indicación de tipo. Escriba Cadena. Contiene una cadena de tipo. Por ejemplo, "Número", "Cadena", etc. Además de los tipos primitivos, esta línea puede contener el nombre de la tabla. En este caso, se intentará expresar una referencia a la tabla especificada.

Expreso(Data.Props1, "Número(10,3)")

Es nulo

Esta función devuelve el valor del segundo parámetro si el valor del primer parámetro es NULL.

De lo contrario, se devolverá el valor del primer parámetro.

SíNULL(Importe(Ventas.ImporteRotación), 0)

Funciones de módulos comunes.

Una expresión del motor de composición de datos puede contener llamadas a funciones de módulos de configuración comunes globales. No se requiere sintaxis adicional para llamar a dichas funciones.

En este ejemplo, la función "Nombre abreviado" se llamará desde el módulo de configuración general.

Tenga en cuenta que el uso de funciones de módulo comunes solo se permite si se especifica el parámetro apropiado del procesador de composición de datos.

Además, las funciones de módulos comunes no se pueden utilizar en expresiones de campos personalizados.

A la luz del próximo lanzamiento 8.2.14, intentaré describir algunas funciones nuevas del sistema de composición de datos.

Abra el diagrama de diseño de datos, preferiblemente en un informe externo, para facilitar la edición.

Agregamos un conjunto de datos del tipo consulta y escribimos, ya sea manualmente o usando el diseñador de consultas, una consulta simple:

1. Configure una solicitud en el sistema de control de acceso.

2. Configurar campos calculados en el sistema de control de acceso.

3. Configure el diseño de datos en la pestaña de configuración.

4. Inicie 1C Enterprise 8.2.14. Abra el informe. Formamos, recibimos.

Descripción de las nuevas funciones en sí:

1. La fecha actual()

Devuelve la fecha del sistema. Al redactar un diseño, en todas las expresiones que están presentes en el diseño, la función CurrentDate() se reemplaza con el valor de la fecha actual.

2. EXPRESIÓN COMPUTADA()

Sintaxis:

CalcularExpresión(,)

Descripción:

La función está diseñada para evaluar una expresión en el contexto de alguna agrupación.

La función tiene en cuenta la selección de agrupaciones, pero no tiene en cuenta selecciones jerárquicas.

La función no se puede aplicar a una agrupación en la selección de grupo de esa agrupación. Por ejemplo, al seleccionar la agrupación de Nomenclatura, no puede utilizar la expresión CalcularExpresión("Suma(Suma de facturación)", "TotalTotal") > 1000. Pero esta expresión se puede utilizar en la selección jerárquica.

Si el registro final precede al registro inicial, se considera que no existen registros para calcular datos detallados y calcular funciones agregadas.

Al calcular expresiones de intervalo para un total general (el parámetro Agrupación está establecido en GrandTotal), se supone que no hay registros para calcular datos detallados y calcular funciones agregadas.

Vinculador de diseño al generar una expresión de función CalcularExpresión, si la expresión de orden contiene campos que no se pueden usar en la agrupación, reemplaza la función CalcularExpresión en NULO.

Opciones

Tipo: Línea. La expresión que se va a evaluar.

Tipo: Línea. Contiene el nombre de la agrupación en cuyo contexto se evaluará la expresión. Si se utiliza una cadena vacía como nombre de agrupación, el cálculo se realizará en el contexto de la agrupación actual. Si se utiliza la cadena GeneralTotal como nombre del grupo, el cálculo se realizará en el contexto del total general. De lo contrario, el cálculo se realizará en el contexto del grupo principal con el mismo nombre.

Por ejemplo:

Suma(Ventas.SumTurnover)/Calcular("Suma(Ventas.SumTurnover)", "Total")

En este ejemplo, el resultado será la relación de la suma por campo Ventas.MontoRotación agrupar registros por la suma del mismo campo en todo el diseño;

Tipo: Línea. El parámetro puede tomar los siguientes valores:

· gran total— la expresión se calculará para todos los registros de agrupación.

· Jerarquía— la expresión se evaluará para el registro jerárquico principal, si lo hay, y para toda la agrupación, si no hay ningún registro jerárquico principal.

· Agrupamiento— la expresión se evaluará para el registro de agrupación del grupo actual.

· Agrupación sin recursos— al calcular una función para un registro de grupo por recursos, la expresión se calculará para el primer registro de grupo de la agrupación original.

Al calcular una función CalcularExpresión() con significado Agrupación sin recursos para registros de grupo que no están agrupados por recursos, la función se calcula de la misma manera que se calcularía si el valor del parámetro fuera igual al valor Agrupamiento.

El generador de diseño de composición de datos, al generar un diseño de composición de datos al generar el campo de recurso mediante el cual se realiza la agrupación en el diseño, coloca una expresión en el diseño que se calcula usando la función CalcularExpresión() , indicando el parámetro Agrupación sin recursos. Para otros recursos, las expresiones de recursos habituales se colocan en la agrupación de recursos.

Tipo: Línea. Indica desde qué registro debe comenzar el fragmento, en qué funciones de expresión agregadas deben calcularse y desde qué registro obtener valores de campo fuera de las funciones agregadas. El valor puede ser uno de los siguientes:

· Primero

· Ultimo ultimo)

· Anterior

· Siguiente siguiente)

· Actual

· Valor limitante(Valor de límite) Valor limitante

Tipo: Línea. Indica a qué registro se debe continuar el fragmento, en el que se deben calcular las funciones agregadas de la expresión. El valor puede ser uno de los siguientes:

· Primero. Es necesario obtener el primer registro de agrupación. Después de la palabra entre paréntesis, puede especificar una expresión, cuyo resultado se utilizará como desplazamiento desde el comienzo de la agrupación. El valor resultante debe ser un número entero mayor que cero. Por ejemplo, Primero(3): recibe el tercer registro desde el principio de la agrupación.

Si el primer registro está fuera de la agrupación, entonces se considera que no existen registros. Por ejemplo, si hay 3 registros y desea obtener el Primero (4), se considera que no hay registros.

· Ultimo ultimo). Necesita obtener el último registro de agrupación. Después de la palabra entre paréntesis, puede especificar una expresión, cuyo resultado se utilizará como desplazamiento desde el final de la agrupación. El valor resultante debe ser un número entero mayor que cero. Por ejemplo, Último(3): recibe el tercer registro desde el final del grupo.

Si el último registro está fuera de la agrupación, entonces se considera que no existen registros. Por ejemplo, si hay 3 registros y desea obtener el Último (4), se considera que no hay registros.

· Anterior. Necesita obtener el registro de agrupación anterior. Después de la palabra entre paréntesis, puede especificar una expresión, cuyo resultado se utilizará como un desplazamiento hacia atrás del registro de agrupación actual. Por ejemplo, Anterior(2): obtiene el anterior del registro anterior.

Si el registro anterior va más allá de la agrupación (por ejemplo, para el segundo registro de agrupación necesita obtener Anterior(3)), entonces se obtiene el primer registro de agrupación.

Al recuperar el registro anterior para un total de agrupación, se considera que se obtiene el primer registro.

· Siguiente siguiente). Necesita obtener el siguiente registro de agrupación. Después de la palabra entre paréntesis, puede especificar una expresión, cuyo resultado se utilizará como un desplazamiento hacia adelante desde la entrada de agrupación actual. Por ejemplo, Siguiente(2): obtener el siguiente a partir del siguiente registro.

Si el siguiente registro va más allá de la agrupación, entonces se considera que no hay registros. Por ejemplo, si hay 3 entradas y la tercera entrada recibe Next() , entonces se considera que no hay entradas.

Cuando se recibe el siguiente registro del total de la agrupación se considera que no existe ningún registro.

· Actual. Necesita obtener el registro actual.

Al recuperar un total de agrupación, se obtiene el primer registro.

· Valor limitante(Valor de límite). La necesidad de obtener un registro por el valor especificado. después de la palabra Valor limitante entre paréntesis debe indicar la expresión con cuyo valor desea iniciar el fragmento, el primer campo de ordenación.

El primer registro cuyo valor del campo de pedido sea mayor o igual al valor especificado se devolverá como registro. Por ejemplo, si el campo Período se utiliza como campo de orden y tiene los valores 01/01/2010, 01/02/2010, 01/03/2010 y desea obtener Valor límite (Fecha y hora (2010, 1, 15)), luego se recibirá un registro con la fecha 01/02/2010.

Tipo: Línea. Enumera expresiones, separadas por comas, que describen las reglas de ordenamiento. Si no se especifica, el orden se realiza de la misma manera que para la agrupación para la cual se evalúa la expresión. Después de cada expresión puede especificar una palabra clave. Edad(para ordenar en orden ascendente), Descendente(para ordenar en orden descendente) y Pedido automático(para ordenar campos de referencia por los campos por los cuales desea ordenar el objeto referenciado). Palabra Pedido automático se puede utilizar como con la palabra Edad, así con la palabra Descendente.

Tipo: Línea. Igual que el parámetro Clasificación. Se utiliza para organizar registros jerárquicos. Si no se especifica, el generador de diseño genera el orden de acuerdo con el orden especificado en el parámetro Clasificación.

Tipo: Línea. Especifica la regla para determinar el registro anterior o siguiente en caso de que haya varios registros con el mismo valor de orden:

· Por separado indica que se utiliza una secuencia de registros ordenados para determinar los registros anteriores y siguientes. Valor por defecto.

· Juntos indica que los registros anterior y siguiente se determinan en función de los valores de las expresiones de orden.

Por ejemplo, si la secuencia resultante está ordenada por fecha:

fecha Nombre completo Significado
1 01 de enero de 2001

Ivanov M.

10
2 02 de enero de 2001 Petrov s. 20
3 03 de enero de 2001 Sidorov R. 30
4 04 de enero de 2001 Petrov s. 40

Por separado, Eso:

§ la entrada anterior a la entrada 3 será la entrada 2.

actual, actual(en consecuencia, parámetros Comenzar Y Fin), entonces para el registro 2 este fragmento constará de un registro 2. La expresión será igual a 20.

Si el valor del parámetro es Juntos, Eso:

§ la entrada anterior a la entrada 3 será la entrada 1.

§ si el fragmento de cálculo se define como actual, actual(en consecuencia, parámetros Comenzar Y Fin), entonces para el registro 2 este fragmento constará de los registros 2 y 3. Expresión CalcularExpresión("Suma(Valor)", Actual, Actual) será igual a 50.

Al especificar un valor de parámetro igual a Juntos, en parámetros Comenzar Y Fin no se puede especificar un desplazamiento para las posiciones Primero, último, anterior, siguiente.

CalcularExpresión("Suma(Suma de Volumen de Negocios)", "Primero", "Actual")

Si desea obtener el valor de agrupación en la línea anterior, puede utilizar la siguiente expresión:

CalcularExpresión("Tasa", "Anterior")

Lista nuevo funciones:

CalcularExpresiónConGroupArray(,) -

La función devuelve una matriz, cada elemento del cual contiene el resultado de evaluar una expresión para agruparla por el campo especificado.

CalcularExpresiónConGroupValueTable(,) -

La función devuelve una tabla de valores, cada fila de la cual contiene el resultado de evaluar expresiones para agruparlas por el campo especificado.

Valor lleno() - Devuelve Verdadero si el valor es distinto del valor predeterminado de este tipo, distinto de NULL, distinto de una referencia vacía, distinto de Indefinido. Los valores booleanos se verifican en busca de valores NULL. Se comprueba que las cadenas no contengan caracteres que no sean espacios en blanco.

Formato(, ): recibe una cadena formateada del valor pasado. La cadena de formato se establece de acuerdo con la cadena de formato del sistema 1C:Enterprise.

Subcadena(, , ): esta función está diseñada para extraer una subcadena de una cadena.

Longitud de la línea() - La función está diseñada para determinar la longitud de una cadena. El parámetro es una expresión de cadena.

Línea(): si se pasa una matriz como parámetro, la función devuelve una cadena que contiene representaciones de cadena de todos los elementos de la matriz, separados por caracteres ";". Si se pasa una tabla de valores como parámetro, la función devuelve una cadena que contiene representaciones de cadena de todas las filas de la tabla de valores, con las representaciones de celda de cada fila separadas por caracteres ";" y las filas por una nueva línea. personaje. Si la representación de cadena de un elemento está vacía, se muestra una cadena en lugar de su representación.

En esta breve nota quiero mostrar cómo se pueden resumir valores en varios niveles de agrupación en un informe utilizando un sistema de composición de datos.
Como se muestra en la imagen, solo en el nivel de agrupación "Grupos de artículos", se calcula el recurso "Pedido", que muestra cuánto se debe pedir para el grupo de artículos actual según ciertas condiciones:


Este valor sólo se puede calcular en este nivel de agrupación, ya que no hay valores ni por encima ni por debajo para calcular. Por ejemplo, a nivel de registros detallados, no hay datos sobre la cantidad máxima en un grupo, porque estos datos son válidos sólo para el grupo en su conjunto, y no para sus componentes individuales.

En consecuencia, ahora es necesario calcular los totales de los grupos anteriores (“Almacenes”, “Tipos de almacenes”) y el total general.
Para hacer esto, use la función CalcularExpresiónConGroupArray:
EVALUAR EXPRESIÓN CON GROUPARRAY (EVALEXPRESIÓN CON GROUPARRAY)
Sintaxis:
EvaluarExpresiónConGroupArray()
Descripción:
La función devuelve una matriz, cada elemento del cual contiene el resultado de evaluar una expresión para agruparla por el campo especificado.
El compositor de diseño, al generar un diseño, convierte los parámetros de función en términos de campos de diseño de composición de datos. Por ejemplo, el campo Cuenta se convertirá a DataSet.Account.
El generador de diseño, al generar expresiones para la salida de un campo personalizado cuya expresión contiene solo la función CalculateArrayWithGroupArray(), genera la expresión de salida para que la información de salida esté ordenada. Por ejemplo, para un campo personalizado con la expresión:

CalculateExpressionWithGroupArray("Importe(Importe Rotación)", "Contraparte")
El generador de diseño generará la siguiente expresión para la salida:

ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)",,"DataSet.Account"),"2")))

Opciones:

Tipo: Cuerda. La expresión que se va a evaluar. Cadena, por ejemplo, Importe(AmountTurnover).

Tipo: Cuerda. Expresiones de campos de agrupación: expresiones de campos de agrupación, separadas por comas. Por ejemplo, Contratista, Parte.

Tipo: Cuerda. Una expresión que describe la selección aplicada a los registros de detalle. La expresión no admite el uso de funciones agregadas. Por ejemplo,DeletionFlag = False.

Tipo: Cuerda. Una expresión que describe la selección aplicada a los registros del grupo. Por ejemplo, Importe (Importe de facturación) > &Parámetro1.
Ejemplo:

Máximo(CalculateExpressionWithGroupArray("Monto(MontoTurnover)", "Contraparte"));

Puede encontrar una descripción detallada de la sintaxis de la función en http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Ahora, para el cálculo, duplicamos el campo “Orden”, con diferentes valores “Calcular por...”, usando las siguientes expresiones, fíjate que en cada nivel superior se utilizan los valores de los niveles inferiores a las agrupaciones .

Como resultado, obtenemos la siguiente construcción:

¡Hola querido lector! Tenemos otra lección sobre los conceptos básicos del sistema de diseño. Se familiarizó con las funciones del lenguaje de expresión SKD, vio las características del sistema de diseño y también comprendió la configuración básica de los campos de diseño. Ahora veremos material nuevo. ¡Ir!

Configuraciones adicionales para campos ACS.

Columna "Tipo de valor" Le permite especificar el tipo de datos para el campo de diseño. ¿Por qué especificar el tipo, por ejemplo, para el campo “Nomenclatura” si ya sabes de qué tipo es? Esto es necesario si el campo de diseño es de tipo compuesto. Puede seleccionar un tipo específico, luego al seleccionar por este campo se seleccionarán valores de este tipo.

Columna "Valores disponibles" le permite especificar los valores disponibles para la selección y limitar la elección del usuario a ciertos límites.

Columna "Decoración" le permite especificar el diseño de un campo de diseño sin utilizar diseños. Puede especificar el color de fuente, el color del marco, la orientación del texto, etc.

Columna "Opciones de edición" Le permite especificar cómo editar el campo de diseño. Por ejemplo, puede especificar una selección rápida de elementos de una lista en una selección. De forma predeterminada, un campo de diseño hereda todas las opciones de edición del objeto de metadatos.

Campos calculados

En la pestaña "Campos calculados" de la composición de datos, puede crear sus propios campos calculados.

¿Por qué necesita campos calculados cuando puede crearlos en el nivel de consulta? No todos los campos se pueden describir mediante una consulta. Si necesita crear un campo complejo a partir de diferentes conjuntos de datos, por ejemplo, una consulta y un objeto, entonces no puede prescindir de los campos calculados. No puede agregar un campo de composición de datos si la fuente de datos es una consulta y el autocompletar está habilitado, pero utilizando campos calculados puede agregar tantos campos como desee.

En la columna "Expresión" del campo calculado, debe escribir una expresión arbitraria que utilice los campos de composición de datos, accediendo a su ruta (la columna "Ruta" en la pestaña "Conjuntos de datos"). Puede utilizar funciones de transformación matemática o acceder a las funciones de módulos comunes. Por ejemplo, escribamos en la columna “Ruta de datos” el nombre del campo calculado “Desviación”, y en el campo “Expresión” lo siguiente.

  • 1C-Bitrix
  • Una de las áreas más importantes del software empresarial son los informes. El destino de una empresa puede depender (¡y no en sentido figurado!) de lo fácil que sea adaptar un informe existente a las necesidades cambiantes de la empresa (y de la legislación) o crear uno nuevo, ya sea un informe para la oficina de impuestos. o un diagrama de la dependencia de la demanda de bienes de la temporada y otros factores. Un sistema de informes potente y flexible que facilita la extracción de los datos necesarios del sistema, los presenta en una forma comprensible y permite al usuario final reconfigurar un informe estándar para ver los datos desde una nueva perspectiva: este es el ideal que todo el sistema empresarial debe esforzarse.

    En la plataforma 1C:Enterprise, un mecanismo llamado "Sistema de composición de datos" (abreviado como DCS) es responsable de generar informes. En este artículo intentaremos dar una breve descripción de la idea y la arquitectura del mecanismo ACS y sus capacidades.


    ACS es un mecanismo basado en una descripción declarativa de informes. El sistema de control de acceso está diseñado para generar informes y mostrar información con una estructura compleja. Por cierto, además de desarrollar informes, el mecanismo ACS también se utiliza en 1C:Enterprise en una lista dinámica, una herramienta para mostrar información de listas con una rica funcionalidad (mostrar listas planas y jerárquicas, diseño condicional de filas, agrupaciones, etc. ).

    Una pequeña historia

    En la primera versión de la plataforma 1C:Enterprise 8, versión 8.0, los informes se generaban así:
    1. Una o más consultas se escribieron en el lenguaje de consulta 1C (lenguaje similar a SQL, más sobre esto a continuación).
    2. Se escribió un código que transfirió los resultados de las consultas ejecutadas a un documento o gráfico de hoja de cálculo. El código también podría realizar un trabajo que no se podía realizar en una consulta; por ejemplo, calculaba valores utilizando el lenguaje 1C integrado.
    El enfoque es sencillo, pero no el más conveniente: hay configuraciones visuales mínimas, todo debe programarse "mano a mano". Y una de las ventajas de la plataforma completamente nueva “1C:Enterprise 8” en aquel momento era la minimización en la solución de la aplicación de la cantidad de código que debía escribirse manualmente, en particular mediante el diseño visual. Sería lógico seguir el mismo camino en el mecanismo de presentación de informes. Esto se hizo mediante el desarrollo de un nuevo mecanismo: el Sistema de Composición de Datos.

    Una de las ideas que formó la base del sistema de control de acceso fue la flexibilidad y personalización de los informes, a los que podían acceder tanto el desarrollador como el usuario final. Idealmente, me gustaría brindarle al usuario final acceso al mismo conjunto de herramientas de diseño de informes que el desarrollador. Sería lógico crear un conjunto único de herramientas al alcance de todos. Pues bien, dado que las herramientas requieren la participación del usuario final, significa que se debe reducir al mínimo el uso de programación en las mismas (lo mejor es eliminarlo por completo), y aprovechar al máximo la configuración visual.

    Formulación del problema

    La tarea que tenía ante sí el equipo de desarrollo era crear un sistema de informes basado no en un enfoque algorítmico (es decir, mediante la escritura de código), sino declarativo para la creación de informes. Y creemos que el problema se ha solucionado con éxito. Según nuestra experiencia, alrededor del 80% de los informes requeridos se pueden implementar usando ACS sin una sola línea de código (excepto para escribir fórmulas para campos calculados), principalmente a través de configuraciones visuales.
    El desarrollo de la primera versión de la SDS requirió aproximadamente cinco años-persona.

    Dos idiomas

    Hay dos idiomas involucrados en la creación de informes. Uno es un lenguaje de consulta utilizado para recuperar datos. El segundo es el lenguaje de expresión de composición de datos, destinado a escribir expresiones utilizadas en varias partes del sistema, por ejemplo, en la configuración de composición de datos, para describir expresiones de campos de usuario.

    Lenguaje de consulta

    El lenguaje de consulta se basa en SQL y es fácil de aprender para quienes tienen conocimientos de SQL. Solicitud de ejemplo:

    Es fácil ver análogos de las secciones estándar para consultas SQL: SELECCIONAR, DESDE, AGRUPAR POR, ORDENAR POR.

    Al mismo tiempo, el lenguaje de consulta contiene una cantidad significativa de extensiones destinadas a reflejar las características específicas de los problemas financieros y económicos y a minimizar el esfuerzo requerido para desarrollar soluciones de aplicaciones:

    • Accediendo a los campos mediante un punto. Si los campos de una tabla son de tipo referencia (almacenan enlaces a objetos de otra tabla), el desarrollador puede hacer referencia a ellos en el texto de la solicitud mediante “.”, y el sistema no limita el número de niveles de anidamiento. de dichos enlaces (por ejemplo, Pedido del cliente. Acuerdo. Organización. Teléfono).
    • Formación de resultados multidimensional y multinivel. Los totales y subtotales se forman teniendo en cuenta la agrupación y la jerarquía, los niveles se pueden recorrer en cualquier orden mediante suma y se garantiza la construcción correcta de los totales según las dimensiones de tiempo.
    • Soporte para mesas virtuales. Las tablas virtuales proporcionadas por el sistema le permiten obtener datos casi listos para la mayoría de las tareas de la aplicación sin la necesidad de crear consultas complejas. Así, una tabla virtual puede proporcionar datos sobre los saldos de productos por períodos en un momento determinado. Al mismo tiempo, las tablas virtuales aprovechan al máximo la información almacenada, por ejemplo, totales previamente calculados, etc.
    • Tablas temporales. El lenguaje de consulta le permite utilizar tablas temporales en consultas. Con su ayuda, puede mejorar el rendimiento de las consultas, en algunos casos reducir la cantidad de bloqueos y hacer que el texto de la consulta sea más fácil de leer.
    • Solicitudes por lotes. Para que trabajar con tablas temporales sea más conveniente, el lenguaje de consulta admite el trabajo con consultas por lotes; por lo tanto, la creación de una tabla temporal y su uso se colocan en una sola consulta. Una solicitud por lotes es una secuencia de solicitudes separadas por punto y coma (";"). Las solicitudes del lote se ejecutan una tras otra. El resultado de ejecutar una solicitud por lotes, según el método utilizado, será el resultado devuelto por la última solicitud del lote o una serie de resultados de todas las consultas del lote en la secuencia en la que siguen las consultas del lote. .
    • Recuperar representaciones de campos de referencia. Cada tabla de objetos (en la que se almacena un directorio o documento) tiene un campo virtual: "Ver". Este campo contiene una representación textual del objeto y facilita el trabajo del creador del informe. Entonces, para un documento, este campo contiene toda la información clave: el nombre del tipo de documento, su número y fecha (por ejemplo, "Venta 000000003 del 06/07/2017 17:49:14"), lo que salva al desarrollador de escribiendo un campo calculado.
    • y etc.
    El mecanismo de solicitud modifica automáticamente la solicitud teniendo en cuenta los roles a los que pertenece el usuario en cuyo nombre se ejecuta la solicitud (es decir, el usuario verá solo los datos que tiene derecho a ver) y las opciones funcionales (es decir, de acuerdo con los configurados en la funcionalidad de solución de la aplicación).

    También existen extensiones de lenguaje de consulta especiales para sistemas de control de acceso. La expansión se lleva a cabo mediante instrucciones sintácticas especiales encerradas entre llaves y colocadas directamente en el cuerpo de la solicitud. Mediante extensiones, el desarrollador determina qué operaciones podrá realizar el usuario final al personalizar el informe.

    Por ejemplo:

    • ELEGIR. Esta oración describe los campos que el usuario podrá seleccionar para la salida. Después de esta palabra clave, se enumeran los alias de los campos de la lista de selección de consultas principal que estarán disponibles para la configuración, separados por comas. Ejemplo: (SELECCIONAR Artículo, Almacén)
    • DÓNDE. Se describen los campos en los que el usuario puede aplicar la selección. Esta propuesta utiliza campos de tabla. No se permite el uso de alias de campos de lista de selección. Cada parte de la unión puede contener su propio elemento WHERE. Ejemplos: (DONDE Artículo.*, Almacén), (DONDE Documento.Fecha >= &FechaInicio, Documento.Fecha<= &ДатаКонца}
    • y etc.
    Ejemplo de uso de extensiones:

    Lenguaje de expresión de composición de datos

    El lenguaje de expresión de composición de datos está diseñado para escribir expresiones utilizadas, en particular, para describir expresiones de campos personalizados. SKD le permite definir campos personalizados en un informe utilizando sus propias expresiones o conjuntos de opciones con condiciones para su selección (análogo a CASE en SQL). Los campos personalizados son similares a los campos calculados. Se pueden configurar tanto en el configurador como en el modo 1C:Enterprise, pero las funciones de los módulos comunes no se pueden utilizar en expresiones de campos personalizados. Por lo tanto, los campos personalizados están destinados al usuario y no al desarrollador.

    Ejemplo:

    El proceso de creación de un informe sobre el sistema de control de acceso.

    Al crear un informe, necesitamos crear un diseño que defina cómo se mostrarán los datos en el informe. Puede crear un diseño basado en un diagrama de diseño de datos. Un diagrama de diseño de datos describe la esencia de los datos que se proporcionan al informe (de dónde obtener los datos y cómo se puede controlar su diseño). El esquema de composición de datos es la base sobre la cual se pueden generar todo tipo de informes. El esquema de composición de datos puede contener:
    • solicitar texto con instrucciones para el sistema de composición de datos;
    • descripción de múltiples conjuntos de datos;
    • descripción detallada de los campos disponibles;
    • describir relaciones entre múltiples conjuntos de datos;
    • descripción de parámetros de adquisición de datos;
    • descripción de diseños y agrupaciones de campos;
    • y etc.

    Por ejemplo, puede agregar una consulta al esquema de composición de datos como un conjunto de datos y llamar al constructor de consultas, lo que le permite crear gráficamente una consulta de complejidad arbitraria:

    El resultado de iniciar el diseñador de consultas será el texto de la consulta (en el lenguaje de consulta 1C:Enterprise). Este texto se puede ajustar manualmente si es necesario:

    Puede haber varios conjuntos de datos en un esquema de diseño de datos, los conjuntos de datos se pueden vincular en el diseño de cualquier forma, se pueden agregar campos calculados, se pueden especificar parámetros de informe, etc. Vale la pena mencionar una característica interesante del mecanismo de consulta en 1C:Enterprise. En última instancia, las consultas se traducen a un dialecto de SQL específico del DBMS con el que opera directamente la aplicación. En general, intentamos aprovechar al máximo las capacidades de los servidores DBMS (estamos limitados por el hecho de que utilizamos solo aquellas capacidades que están disponibles simultáneamente en todos los DBMS compatibles con la plataforma 1C:Enterprise: MS SQL, Oracle, IBM DB2 , PostgreSQL). Así, a nivel de consulta en campos calculados, solo podemos utilizar aquellas funciones que estén traducidas a SQL.

    Pero en el nivel del esquema de composición de datos, ya podemos agregar campos personalizados y usar funciones en ellos en el lenguaje de desarrollo integrado 1C (incluidos los escritos por nosotros), lo que amplía enormemente las capacidades de los informes. Técnicamente, se ve así: todo lo que se puede traducir a SQL se traduce a SQL, la consulta se ejecuta en el nivel DBMS, los resultados de la consulta se colocan en la memoria del servidor de aplicaciones 1C y el SKD calcula los valores para cada registro. ​​de campos calculados cuyas fórmulas están escritas en el lenguaje 1C.


    Agregar campos personalizados

    Puede agregar una cantidad arbitraria de tablas y gráficos al informe:


    Diseñador de informes


    Informe de tiempo de ejecución

    Con SKD, el usuario puede agregar selecciones complejas al informe (que se agregarán a la solicitud en los lugares correctos), diseño condicional (permitiendo que los campos mostrados tengan un formato diferente: fuente, color, etc., según sus valores). ) y mucho más. .

    El proceso de construcción y generación de un informe se puede describir brevemente de la siguiente manera:

    • El desarrollador en tiempo de diseño con la ayuda de un diseñador (o en tiempo de ejecución usando código) determina el esquema de diseño de datos:
      • Texto de la solicitud/solicitudes
      • Descripción de los campos calculados
      • Relaciones entre solicitudes (si hay varias)
      • Opciones de informe
      • Configuración por defecto
      • Etc.
    • La configuración anterior se guarda en el diseño.
    • El usuario abre el informe
      • Posiblemente realiza configuraciones adicionales (por ejemplo, cambia los valores de los parámetros)
      • Hace clic en el botón "Generar"
    • La configuración del usuario se aplica al esquema de composición de datos definido por el desarrollador.
    • Se forma un diseño de composición de datos intermedio que contiene instrucciones sobre dónde recibir datos. En particular, se ajustan las consultas especificadas en el diseño. Por lo tanto, los campos que no se utilizan en el informe se eliminan de la solicitud (esto se hace para minimizar la cantidad de datos recibidos). Todos los campos que participan en fórmulas de campos calculados se agregan a la consulta.
    • Entra en juego el procesador de composición de datos. El procesador de diseño ejecuta consultas, vincula conjuntos de datos, calcula valores para campos y recursos calculados y realiza agrupaciones. En una palabra, realiza todos los cálculos que no se realizaron a nivel de DBMS.
    • El procesador de salida de datos lanza una solicitud de ejecución y muestra los datos recibidos en un documento de hoja de cálculo, gráfico, etc.


    El proceso de generación de un informe utilizando el mecanismo ACS.

    Intentamos minimizar la cantidad de datos de informes transferidos desde el servidor a la aplicación cliente. Al mostrar datos en un documento de hoja de cálculo, al abrir un documento de hoja de cálculo, transferimos desde el servidor solo aquellas líneas que el usuario ve al principio del documento. A medida que el usuario avanza por las líneas del documento, los datos faltantes se descargan del servidor al cliente.

    Ajustes personalizados

    Todas las herramientas ACS están disponibles tanto para el desarrollador como para el usuario final. Pero la práctica ha demostrado que el usuario final a menudo se siente intimidado por la abundancia de capacidades de la herramienta. Además, en la mayoría de los casos, el usuario final no necesita toda la potencia de la configuración; basta con tener acceso rápido para configurar uno o dos parámetros del informe (por ejemplo, período y contraparte). A partir de una determinada versión de la plataforma, el desarrollador del informe tiene la oportunidad de marcar qué configuraciones del informe están disponibles para el usuario. Esto se hace usando la casilla de verificación "Incluir en la configuración del usuario". Además, la configuración del informe ahora tiene un indicador de "Modo de visualización", que toma uno de tres valores:
    • Acceso rápido. La configuración se mostrará directamente en la parte superior de la ventana del informe.
    • Común. La configuración estará disponible a través del botón "Configuración".
    • No disponible. La configuración no estará disponible para el usuario final.


    Configuración del modo de visualización en tiempo de diseño


    Mostrar la configuración en el modo de acceso rápido en tiempo de ejecución (bajo el botón Generar)

    Planes de desarrollo

    Una de nuestras áreas prioritarias en el desarrollo de sistemas de control de acceso es la simplificación de la configuración del usuario. Nuestra experiencia muestra que para algunos usuarios finales, trabajar con la configuración del usuario sigue siendo una tarea importante. Lo tomamos en cuenta y trabajamos en esta dirección. En consecuencia, también será más fácil para los desarrolladores trabajar con sistemas de control de acceso, porque Nosotros, como antes, queremos proporcionar una herramienta única para configurar informes tanto para el desarrollador como para el usuario final.