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:
La expresión puede contener literales. Son posibles los siguientes tipos de literales:
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”““
El número se escribe sin espacios, en formato decimal. La parte fraccionaria se separa mediante el símbolo "." Por ejemplo:
10.5 200
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
Los valores booleanos se pueden escribir utilizando los literales Verdadero (Verdadero), Falso (Falso).
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)
Esta operación tiene como objetivo cambiar el signo de un número al signo opuesto. Por ejemplo:
Cantidad de ventas
Esta operación no realiza ninguna acción en el número. Por ejemplo:
Cantidad de ventas
Esta operación tiene como objetivo calcular la diferencia de dos números. Por ejemplo:
ResidualsAndTurnovers.InitialRemaining – RemainingsAndTurnovers.FinalResidualsRemainingsAndTurnovers.InitialRemaining - 100 400 – 357
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
Esta operación está diseñada para calcular el producto de dos números. Por ejemplo:
Nomenclatura.Precio * 1,2 2 * 3,14
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
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
Esta operación está diseñada para concatenar dos cadenas. Por ejemplo:
Nomenclatura.Artículo + “:”+ Nomenclatura.Nombre
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:
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.
Esta operación está destinada a comparar dos operandos para determinar la igualdad. Por ejemplo:
Ventas.Contraparte = Ventas.NomenclaturaProveedorMain
Esta operación tiene como objetivo comparar dos operandos para determinar la desigualdad. Por ejemplo:
Ventas.Contraparte<>Ventas.NomenclaturaProveedor Principal
Esta operación está diseñada para comprobar que el primer operando es menor que el segundo. Por ejemplo:
VentasCantidad.Actual< ПродажиПрошлые.Сумма
Esta operación está diseñada para comprobar que el primer operando es mayor que el segundo. Por ejemplo:
VentasActual.Suma > VentasPasadas.Suma
Esta operación está diseñada para comprobar que el primer operando es menor o igual que el segundo. Por ejemplo:
VentasCantidad.Actual<= ПродажиПрошлые.Сумма
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
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)
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
Esta operación devuelve True si el valor es NULL. Por ejemplo:
Ventas.Contraparte ES NULA
Esta operación devuelve True si el valor no es NULL. Por ejemplo:
Ventas.La contraparte NO ES NULA
Las operaciones lógicas aceptan expresiones de tipo booleano como operandos.
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
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
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
Las funciones agregadas realizan alguna acción sobre un conjunto de datos.
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)
La función Count calcula el número de valores distintos de NULL. Por ejemplo:
Cantidad(Ventas.Contraparte)
Esta función calcula el número de valores distintos. Por ejemplo:
Cantidad(Varias Ventas.Contraparte)
La función obtiene el valor máximo. Por ejemplo:
Máximo (cantidad restante)
La función obtiene el valor mínimo. Por ejemplo:
Mínimo (cantidad restante)
La función obtiene el promedio de valores no NULL. Por ejemplo:
Promedio (cantidad restante)
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
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:
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:
Cualquier operación en la que uno de los operandos sea NULL producirá un resultado NULL.
Hay excepciones:
Las operaciones tienen las siguientes prioridades (la primera línea tiene la prioridad más baja):
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:
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.
La función está diseñada para obtener el nivel de grabación actual.
Nivel()
Obtenga el siguiente número de secuencia.
NúmeroPorOrden()
Devuelve el siguiente número ordinal de la agrupación actual.
NúmeroPorOrdenEnGrupo()
Obtenga una cadena formateada del valor pasado.
La cadena de formato se establece de acuerdo con la cadena de formato 1C:Enterprise.
Opciones:
Formato (Facturas de consumibles.Monto del documento, "NPV=2")
Opciones:
Período de inicio (Fecha y hora (2002, 10, 12, 10, 15, 34), "Mes")
Resultado:
01.10.2002 0:00:00
La función está diseñada para extraer una fecha específica de una fecha determinada.
Opciones:
EndPeriod(FechaHora(2002, 10, 12, 10, 15, 34), "Semana")
Resultado:
13.10.2002 23:59:59
La función está diseñada para agregar un cierto valor a una fecha.
Opciones:
AddToDate(FechaHora(2002, 10, 12, 10, 15, 34), "Mes", 1)
Resultado:
12.11.2002 10:15:34
La función está diseñada para obtener la diferencia entre dos fechas.
Opciones:
DIFERENCIA FECHA (FECHA HORA (2002, 10, 12, 10, 15, 34), FECHA HORA (2002, 10, 14, 9, 18, 06), "DÍA")
Resultado:
Esta función está diseñada para extraer una subcadena de una cadena.
Opciones:
SUBSTRING(Cuentas.Dirección, 1, 4)
La función está diseñada para determinar la longitud de una cadena.
Parámetro:
Línea(Contrapartes.Dirección)
Esta función está diseñada para extraer el año de un valor de tipo Fecha.
Parámetro:
AÑO(Gasto.Fecha)
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
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.
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).
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.
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.
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).
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.
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.
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.
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:
Expreso(Data.Props1, "Número(10,3)")
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)
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:
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!
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.
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.
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 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.
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:
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:
Ejemplo:
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 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.
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)