Lenguaje de expresión del sistema de composición de datos (1Cv8). Funciones del lenguaje de expresión del sistema de composición de datos 1s Campos de funciones calculados SKD

CalcularExpresión Es una función ACS bastante difícil de entender y los ejemplos de aplicación en la información de referencia son bastante escasos. Este artículo analiza ejemplos que seguramente serán útiles para todos los desarrolladores:

  1. total acumulado en agrupación;
  2. total acumulado en una tabla cruzada;
  3. obteniendo el valor anterior;
  4. Salida PM en una línea.

1. Obtención de un indicador en base devengado

Obtengamos la cantidad de bienes como un total acumulado a nivel de agrupación. Para hacer esto, cree un campo calculado (consulte la Figura 1).
En la pestaña "Recursos", configure la función para el campo calculado:
CalcularExpresión("Suma(Cantidad de facturación)", "Primero", "Actual")
que sumará el número de productos desde el primer registro hasta el actual (ver Figura 2).

Si es necesario obtener la cantidad total acumulada de un artículo a nivel de registros detallados, configuramos la función CalculateExpression para el campo calculado en la pestaña "Campos calculados" (ver Figura 3).
Dependiendo del nivel de obtención del total acumulado, creamos una agrupación (ver Figura 4): a nivel de recursos - agrupación por bienes, a nivel de control remoto - agrupación de registros detallados.
Figura 4. Agrupaciones de informes con totales acumulados

2. Obtener el valor del indicador de la fila anterior.

Consigamos el tipo de cambio de la fecha y de la fecha anterior. Para hacer esto, cree un campo calculado y escriba la siguiente expresión en el campo de expresión (ver Figura 5):
CalcularExpresión("Tasa", "Anterior", "Anterior")
que tomará el valor anterior del tipo de cambio para la fila actual, el último parámetro de la función limita la recepción de datos.
Como estamos trabajando a nivel de registros detallados, inmediatamente vamos a la pestaña "Configuración" y creamos una agrupación: registros detallados.

3. Obtención de un indicador como total acumulado en una tabla cruzada

Obtengamos la cantidad de bienes en forma devengada por período. Para hacer esto, cree un campo calculado (consulte la Figura 1). En la pestaña "Recursos", especificamos la siguiente expresión para el campo calculado (ver Figura 6):
CalcularExpresión("Suma(Cantidad de facturación)", "Período", "Primero", "Actual")
que a nivel de agrupación calculará la cantidad de bienes en el intervalo desde la primera línea hasta la actual en el contexto del período de cada artículo.
En la pestaña "Configuración", cree una tabla agrupando por elemento en una fila y agrupando por período en una columna (consulte la Figura 7).

4. Generar datos tabulares en una línea

En el artículo se analizan los métodos para mostrar datos tabulares en una línea, incluido el método que utiliza la función CalculateExpression.

Diagrama de diseño de datos (1C SKD)- un diseñador conveniente para crear informes complejos en productos de software 1C:Enterprise que contribuyen al desarrollo y seguimiento de la automatización de la producción, permitiéndoles ser lo más flexibles y hermosos posible en un mínimo de tiempo. Una ventaja adicional del esquema de composición de datos (1C SKD) es la generación automática de un formulario de informe controlado y, con un mayor desarrollo de esta área, es un factor importante a la hora de elegir un método para desarrollar un informe. Pero debido a la complejidad de la estructura del esquema de composición de datos (1C SKD) y la gran cantidad de configuraciones, esto a menudo lleva a un desarrollo del informe más largo que a través del "diseñador de formularios de salida". Por lo tanto, un programador de 1C necesita comprender todas las complejidades del esquema de composición de datos (1C DCS) para acelerar aún más el tiempo de desarrollo para generar informes.

Veamos las primeras tres pestañas del Esquema de composición de datos (1C SKD): conjunto de datos, conexiones de conjuntos de datos y campos calculados.

Conjunto de datos en 1C SKD

El conjunto de datos incluye la capacidad de crear tres objetos: una consulta, un objeto y una unión, consideremos más de cerca cada uno de ellos:

Esta es una consulta normal que se genera mediante el botón Generador de consultas. Si se establece la marca Autocompletar, todos los detalles seleccionados se incluirán automáticamente en los campos del conjunto de datos. También es posible personalizar el llenado de campos en la solicitud en la pestaña Composición de datos, donde hay tres pestañas:

Tablas, aquí se seleccionan las tablas que participarán en la generación del informe, normalmente se seleccionan los datos por defecto, ya que en la pestaña Tablas y Campos ya tenemos seleccionados los documentos, directorios, registros que necesitamos…

Campos, aquí seleccionamos aquellos objetos que deben incluirse en el informe, la bandera secundaria indica si habrá elementos secundarios accesibles para el objeto o no, es lógico que para datos de cadena, numéricos y similares no será posible configurar la bandera a Verdadero.

Condiciones, aquí seleccionamos aquellos objetos que se pueden utilizar bajo condiciones en el sistema de control de acceso.

Parte del trabajo se realiza en el esquema de composición de datos y otra parte se realiza mediante programación; veamos un ejemplo simple:

Primero, crearemos un diagrama de diseño para el diseño de datos del documento y lo llamaremos SKD (por ejemplo: 1C SKD), en él creamos un objeto de conjunto de datos, luego completamos los campos, por ejemplo, tenemos un documento. con una parte tabular de productos con detalles: nomenclatura, cantidad y precio.

Agreguemos tres campos y completemos cada columna con el nombre de los detalles, las columnas restantes se completarán automáticamente:

Creemos un botón en el formulario del documento y describamos el mecanismo de operación en formularios controlados:

&EnCliente

Procedimiento Imprimir()

NuestroInforme = PrintOnServer(); //llamar a la función en el servidor

NuestroInforme.Show(); //muestra el informe generado

Fin del Procedimiento

&En el servidor

Función ImprimirEnServidor()

ObjetoDocumento = FormAttributeValue(“Objeto”);

//Colocamos la parte tabular Productos en una estructura con el nombre ProductosSKD de la misma forma que indicamos en el propio SKD el nombre del objeto que contiene los datos.

Conjunto de datos = nueva estructura;

DataSet.Insert(“ProductosSKD”, DocumentObject.Productos);

//Obtenemos nuestro diseño y configuramos la configuración predeterminada para que todas las configuraciones de salida del informe se tomen de nuestro diseño.

NuestroDiseño = DocumentObject.GetLayout(“SKD”);

Configuración = OurLayout.DefaultSettings;

//crear un diseño de diseño de datos con nuestra configuración

DiseñoLinker = newDataLayoutLayoutLinker;

LayoutLayout = LayoutComposer.Execute(OurLayout, Configuración);

//Realizar composición de datos con nuestro conjunto de datos.

Procesador de composición de datos = nuevoProcesador de composición de datos;

DataCompositionProcessor.Initialize(LayoutLayout, Conjunto de datos);

//Creamos un documento de hoja de cálculo y mostramos nuestro informe en él.

ReportDocument = Nuevo documento tabular;

OutputProcessor = Nuevo OutputProcessorDataCompositionResultInTabularDocument;

OutputProcessor.SetDocument(ReportDocument);

OutputProcessor.Output(DataCompositionProcessor);

Informe De Documento De Devolución;

Función final

Si lo desea, puede obtener áreas de cualquier otro diseño y también mostrarlas en este informe, por ejemplo, tenemos un diseño estándar para generar una orden de pago y el encabezado está muy bien creado en él, entonces, para no hacer trabajo innecesario, primero obtendremos el diseño, mostraremos el encabezado y luego generaremos y mostraremos nuestro informe en el sistema de control de acceso.

ACERCA DE unificación

Podemos colocar nuestras consultas y objetos en él, pero a diferencia de una conexión, simplemente agrega tablas entre sí, es decir, si conectamos dos tablas idénticas, terminaremos con una, y al combinarla se duplicará, veamos en un ejemplo simple:

Disponemos de tablas:

Al comunicarnos recibiremos:

Y cuando se combinan:

Veamos ahora cómo completar columnas en conjuntos de datos (omitiremos algunas, ya que están relacionadas con otras pestañas; volveremos a ellas en artículos futuros):

- campo, indique el nombre general del atributo;

­­- camino, indique el nombre del detalle mediante el cual lo contactaremos en el sistema de control de acceso, por ejemplo, en Campos calculados;

- título, indique el nombre del atributo que será mostrado en el informe;

- limitación de campo, indicar la disponibilidad de este requisito;

- restricción de detalles, indicamos la disponibilidad de elementos secundarios, es importante que si se indica la disponibilidad de detalles, entonces el campo en sí estará disponible, tal vez esta mecánica se cambie en futuras versiones;

- expresión mediante la cual se calcula la representación del campo, es conveniente usarlo cuando necesitamos cambiar un poco la salida de los detalles, por ejemplo, necesitamos después del nombre nomenclatura fue mostrado existencias, donde se encuentra, luego complete lo siguiente: Artículo + “está en almacén” + Almacén. Repito que el acceso a los datos se realiza a través del nombre indicado en la columna camino;

- orden de expresión, un mecanismo conveniente para configurar el orden de informes, donde la condición se puede configurar manualmente, similar al punto anterior, pero como muestra la práctica, este mecanismo a menudo no funciona como nos gustaría y le aconsejo que utilice la clasificación estándar;

- tipo de valor, indica el tipo de valor del atributo, este debe ser llenado si se utiliza el siguiente campo;

- valores disponibles, funciona sólo cuando está lleno tipo de valor, abre el formulario y en la columna Significado indicamos el elemento que se necesita cambiar, según el tipo, pueden ser objetos predefinidos o numéricos, por ejemplo, los detalles tienen valores simples, en presentación Indicamos a qué debemos cambiar, un ejemplo de tipo booleano:

- decoración– La configuración de formato de campo estándar, similar a la configuración de los formularios administrados, le permite personalizar de manera más precisa y hermosa la salida de ciertos detalles.

Conexiones de conjuntos de datos en 1C SKD

Aqui esta instalado solo unirse a la izquierda, según un principio similar al conexiones en solicitudes, en fuente de comunicación especificar la tabla principal para la conexión, en receptor adicional. EN fuente de expresión Y receptor de expresión Le indicamos los detalles mediante los cuales se realizará la comunicación. Veremos las columnas restantes con más detalle cuando miremos la pestaña. Opciones. Si no hay una conexión adicional con los parámetros, se recomienda realizar la conexión en la solicitud, esto acelerará el informe.

El uso adecuado de un esquema de composición de datos (DCS) le permite:

  • reducir significativamente el tiempo necesario para desarrollar un informe;
  • eliminar la necesidad de crear un controlador de formulario administrado;
  • obtenga un hermoso resultado con la posibilidad de personalización adicional por parte del usuario.

Pero no todos los desarrolladores aprovechan al máximo las capacidades del esquema, ya que no todas sus configuraciones son obvias e intuitivas. En particular, muchas personas saben que en 1C SKD hay campos calculados, sin embargo, no comprenden completamente el alcance de su uso y los métodos para trabajar con ellos.

¿Qué es un campo calculado?

En la mayoría de los casos, la fuente de datos en el diagrama de diseño es una consulta. En principio, dentro de la propia consulta ya se pueden utilizar varias fórmulas, construcciones y expresiones. Surge una pregunta natural: ¿por qué necesitamos funciones duplicadas?

El caso es que el sistema de control de acceso es algo más que mostrar el resultado de una consulta, y esto se ve claramente en el formulario de creación del diagrama (Fig. 1).

Los campos calculados le permiten realizar ciertas acciones con el conjunto de datos generado:

  • Envíe una matriz de datos recibidos por una solicitud a una celda específica, combinando varias líneas en una;
  • Acceder a las funciones de exportación del módulo general;
  • Ejecute las diversas expresiones disponibles para el lenguaje de diseño y utilice las funciones especiales EvaluateExpression.

Repasemos esta lista.

Matriz de valores en una celda

Simulemos una situación en la que es necesario recibir todos los números de documentos de recibo de una contraparte en una celda separada:


Por tanto, hemos creado un campo de cálculo adicional en nuestro esquema;


Como puede ver en el ejemplo anterior, no hay dificultades para agregar y procesar campos calculados. Usamos dos funciones: Array() y ConnectRows().

Algunas palabras sobre este último. Además del primer parámetro que indica el identificador de la matriz, valores o valor, en él se pueden configurar dos más:

  1. Separador de elementos: indica qué carácter separará un elemento de una matriz o una fila de una tabla de valores de otro (en nuestro caso, omitimos este parámetro y se asignó un salto de línea de forma predeterminada);
  2. Separador de columnas: un carácter utilizado para separar columnas de una tabla de valores (el punto y coma se utiliza de forma predeterminada).

Acceder a las funciones de exportación de un módulo común

Las funciones de un módulo común pueden actuar como fuente de datos para completar un campo calculado.

Algunos puntos importantes:

  • La función debe ser exportable;
  • Si una función está ubicada en un módulo común con el atributo "Global" establecido, se llama directamente por su nombre; de ​​lo contrario, la función debe llamarse de acuerdo con el esquema "Nombre de módulo compartido". "Nombre de la función a llamar."

Como ejemplo de uso, tomaremos la misma solicitud de documentos de recibo y la mostraremos en una columna separada. No describiremos la solicitud en sí; pasemos directamente a los campos calculados:


Así, vemos que casi cualquier procesador de datos se puede inicializar desde el sistema de control de acceso, lo que amplía significativamente las posibilidades de uso del esquema.

Expresiones del lenguaje de diseño

Muy a menudo en el trabajo de un desarrollador surge una situación en la que es necesario mostrar el resultado de la división en el campo ACS:

  1. Calcular el costo promedio del artículo;
  2. Todo tipo de intereses;
  3. Cálculos de ingresos medios, etc.

Para evitar problemas, en estos casos es recomendable introducir una prueba de división por 0 en el campo calculado.

Esto se puede hacer usando la construcción "Elegir cuándo... Entonces... De lo contrario... Finalizar".

Al final, unas pocas palabras sobre la función bastante nueva CalculateExpression(). Con su ayuda, en particular, se pueden calcular las desviaciones de costes entre las líneas actuales y anteriores, el saldo acumulado, etc.

Digamos que puede obtener la suma del documento de la línea anterior de nuestra solicitud especificando el valor Calcular expresión ("Suma del documento", "Suma anterior") en el campo "Expresión".

1. Calcular (Evaluar)- tiene como objetivo evaluar una expresión en el contexto de alguna agrupación. La función se utiliza por compatibilidad con versiones anteriores de la plataforma. Se recomienda utilizar la función CalculateExpression en su lugar.

Sintaxis:
Calcular (Expresión, Agrupación, Tipo de cálculo)

Opciones:

  • Expresión(Línea). Contiene una expresión calculada;
  • Agrupamiento(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 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.
  • Tipo de cálculo(Línea). Si este parámetro se establece en "TotalTotal", la expresión se calculará para todos los registros de agrupación. Si el valor del parámetro es "Agrupación", los valores se calcularán para el registro del grupo de agrupación actual.
2. Evaluar expresión (EvalExpression) - tiene como objetivo 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.

Sintaxis:
CalculateExpression(Expresión, Agrupación, Tipo de cálculo, Inicio, Fin, Ordenación, Ordenación jerárquica, Valores de orden idénticos de procesamiento)

Opciones:

  • Expresión(Línea). Contiene una expresión calculada;
  • Agrupamiento(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 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 de la agrupación principal con ese nombre;
  • Tipo de cálculo(Línea). Si este parámetro se establece en "TotalTotal", la expresión se calculará para todos los registros de agrupación. Si el valor del parámetro es "Agrupación", los valores se calcularán para el registro del grupo de agrupación actual. Si el parámetro está configurado en "Agrupación sin recursos", al calcular la función para un registro de grupo por recurso, la expresión se evaluará para el primer registro de grupo de la agrupación original. Al evaluar la función CalculateExpression con el valor "GroupingNonResource" para registros de grupo que no son agrupaciones por recurso, la función se evalúa de la misma manera como se evaluaría con el valor del parámetro "Grouping". El generador de diseño de composición de datos, al generar un diseño de composición de datos al generar un campo (un recurso mediante el cual se realiza la agrupación), genera en el diseño una expresión calculada utilizando la función CalculateExpression con el parámetro "GroupingNon-Resource" especificado. Para otros recursos agrupados por recurso, se devuelven expresiones de recursos normales. Si el parámetro se establece en "Jerarquía", entonces la expresión debe evaluarse para el registro jerárquico principal, si lo hay, y para toda la agrupación, si no hay ningún registro jerárquico principal. El generador de diseño, al generar una expresión para el campo % en el grupo de jerarquía, genera una expresión que contiene la relación de la expresión del recurso con la función CalculateExpression para la expresión del recurso que se calcula para la agrupación actual con el tipo de cálculo Jerarquía.
  • Comenzar. 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. Una cadena que contiene uno de:
    • "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.
    • "Último" 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): obtener el anterior del registro anterior. Si el registro anterior está fuera de la agrupación (por ejemplo, el segundo registro de agrupación requiere obtener Anterior (3)), entonces se obtiene el primer registro de agrupación. Al recibir el registro anterior del total de la agrupación se obtiene el primer registro.
    • "Próximo" 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 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 Siguiente, 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 límite". La necesidad de obtener un registro por el valor especificado. Después de la palabra LimitingValue entre paréntesis, debe indicar la expresión con cuyo valor desea iniciar el fragmento, el primer campo de orden. 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 el Valor límite (Fecha y hora (2010 , 1, 15)), luego se obtendrá un registro con la fecha 01/02.2010.
  • Fin. Indica a qué registro se debe continuar el fragmento, en el que se debe calcular la expresión agregada. Una cadena que contiene uno de:
    • "Primero"
    • "Último"
    • "Anterior"
    • "Próximo"
    • "Actual".
    • "Valor límite".
  • Clasificación. Una cadena que enumera las expresiones, separadas por comas, en la dirección en la que se debe ordenar la secuencia. 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 la palabra clave Ascendente, para ordenar en orden ascendente, Descendente, para ordenar en orden descendente, Orden automático, para ordenar los campos de referencia por los campos por los cuales desea ordenar el objeto al que se hace referencia. La palabra Orden automático se puede utilizar tanto con la palabra Ascendente como con la palabra Descendente.
  • Clasificación jerárquica. Similar a clasificar. Se utiliza para organizar registros jerárquicos. Si no se especifica, el compositor de diseño genera el orden de acuerdo con el orden especificado en el parámetro Ordenar.
  • Procesando los mismos valores de orden. Una cadena que contiene uno de:
    • "Juntos" significa que se utiliza una secuencia de registros ordenados para determinar los registros anterior y siguiente;
    • "Por separado" significa 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:
    1. 01 de enero de 2001 Ivanov M. 10
    2. 02 de enero de 2001 Petrov S. 20
    3. 02 de enero de 2001 Sidorov R. 30
    4. 03 de enero de 2001 Petrov S. 40
    Cuando se utiliza el procesamiento de valores idénticos del orden "Por separado", el anterior para el registro 3 será el registro 2, y cuando se utiliza "Juntos", el registro 1. Y el fragmento del registro actual para el registro 2 para "Por separado" será el registro 2, y para "Juntos" - los registros 2 y 3. Por lo tanto, el total para el registro actual para "Por separado" será 20, y para "Juntos" - 50. Cuando se especifica "Juntos" en Inicio y Parámetros finales, no puede especificar un desplazamiento para las posiciones "Primero", "Último", "Anterior", "Siguiente". El valor predeterminado es "Separado".
Ejemplo:
Obtener la relación entre el importe del campo "Sales.AmountTurnover" de un registro de agrupación y el importe del mismo campo en todo el diseño:
Suma(Ventas.SumTurnover) / CalculateExpression("Suma(Ventas.SumTurnover)", "Total").

Este ejemplo calcula el valor de la jerarquía actual:
Elección
Cuando Nivel() > 0
Luego EvaluateExpression ("Referencia", "Jerarquía")
De lo contrario nulo
Fin

Notas:
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 CalculateExpression("Sum(SumTurnover)", "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 "GrossTotal"), se supone que no hay registros para calcular datos detallados y calcular funciones agregadas. Al generar una expresión para la función CalculateExpression, el compositor de diseño, si la expresión de orden contiene campos que no se pueden usar en la agrupación, reemplaza la función CalculateExpression con NULL.

3. Evaluar expresión con matriz de grupo (EvalExpression con matriz de grupo) - la función devuelve una matriz, cada elemento del cual contiene el resultado del cálculo de una expresión para agrupar por el campo especificado.

Sintaxis:
CalculateExpressionWithGroupArray (Expresión, GroupFieldExpressions, SelectRecords, SelectGroups)

Opciones:

  • Expresión(Cadena): la expresión que se va a evaluar. Por ejemplo, "Importe (Importe de facturación)";
  • Grupos de expresiones de campo
  • Selección de registros
  • Selección de agrupaciones- selección aplicada a registros de grupo. Por ejemplo: "Importe (Importe de facturación) > &Parámetro1".
Ejemplo:
Máximo(CalculateExpressionWithGroupArray("Monto(MontoTurnover)", "Contraparte"));


El generador de diseño, al generar expresiones para mostrar un campo personalizado cuya expresión contiene solo la función CalculateArrayWithGroup, genera la expresión de salida de tal manera que los datos de visualización y los datos estén ordenados.
Por ejemplo, para un campo personalizado con la expresión:
CalculateExpressionWithGroupArray("Monto(MontoRotación)", "Contraparte")
El generador de diseño generará la siguiente expresión para la salida:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

4. Calcular la expresión con GroupValueTable (EvalExpressionWithGroupValueTable) - la función devuelve una tabla de valores, cada elemento de la cual contiene el resultado del cálculo de una expresión para agrupar por el campo especificado.

Sintaxis:
CalculateExpressionWithGroupValueTable (Expresión, Expresiones de campo de grupo, Selección de registros, Selección de grupo)

Opciones:

  • Expresión(Cadena): la expresión que se va a evaluar. Una línea puede contener varias expresiones separadas por comas. Después de cada expresión puede haber una palabra clave opcional AS y el nombre de la columna de la tabla de valores. Por ejemplo: "Contraparte, Importe (Importe de facturación) como volumen de ventas".
  • Grupos de expresiones de campo- expresiones de campos de agrupación, separados por comas. Por ejemplo, "Contraparte, Parte";
  • Selección de registros- una expresión aplicada a los registros detallados. Por ejemplo, "Indicador de eliminación = Falso". Si este parámetro utiliza una función agregada, se producirá un error al componer los datos;
  • Selección de agrupaciones- selección aplicada a registros de grupo. Por ejemplo: "Importe (Importe de facturación) > &Parámetro1".
Ejemplo:
Calcular expresión con tabla de agrupación de valores ("Cuenta como contraparte, monto (monto de facturación) como volumen de ventas", "Cuenta")

El resultado de esta función será una tabla de valores con las columnas Contraparte y Volumen de Ventas, que contendrá las contrapartes con sus volúmenes de ventas.
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.
Por ejemplo, un campo personalizado con la expresión:
CalculateExpressionWithGroupValueTable ("Cuenta, Monto (Monto de facturación)", "Cuenta")
El generador de diseño generará la siguiente expresión para la salida:
ConnectRows(GetPart(Order(CalculateExpressionWithGroupValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet.Account"), "5, 1, 3" ), "2, 4"))

5. Nivel - la función está diseñada para obtener el nivel de grabación actual.

Sintaxis:
Nivel()

Ejemplo:
Nivel()

6. Número de secuencia - obtenga el siguiente número de serie.

Sintaxis:
NúmeroPorOrden()

Ejemplo:
NúmeroPorOrden()

7. Número de secuencia en agrupación - devuelve el siguiente número de secuencia en la agrupación actual.

Ejemplo:
NúmeroPorOrdenEnGrupo()

8. Formato - obtener una cadena formateada del valor pasado.

Sintaxis:
Formato (valor, cadena de formato)

Opciones:

  • Significado- la expresión que debe formatearse;
  • Cadena de formato- la cadena de formato se establece de acuerdo con la cadena de formato 1C:Enterprise.
Ejemplo:
Formato (Facturas de consumibles.Monto del documento, "NPV=2")

9. Comienzo del período

Sintaxis:
Período de inicio (fecha, tipo de período)

Opciones:

  • fecha(Fecha de). Fecha específica;
  • Tipo de período
Ejemplo:
Período de inicio (Fecha y hora (2002, 10, 12, 10, 15, 34), "Mes")
Resultado: 01/10/2002 0:00:00

10. Fin del período - la función está diseñada para seleccionar una fecha específica de una fecha determinada.

Sintaxis:
Fin del período (fecha, tipo de período)

Opciones:

  • fecha(Fecha de). Fecha específica;
  • Tipo de período(Línea). Contiene uno de los siguientes valores: Minuto; Hora; Día; Una semana; Mes; Cuarto; Año; Década; Medio año.
Ejemplo:
EndPeriod(FechaHora(2002, 10, 12, 10, 15, 34), "Semana")
Resultado: 13/10/2002 23:59:59

11. AgregarKDate (FechaAgregar) - la función está diseñada para agregar un cierto valor a la fecha.

Sintaxis:
AddToDate(Expresión, Tipo de incremento, Magnitud)

Opciones:

  • Expresión(Fecha de). Fecha original;
  • TipoAmpliación(Línea). Contiene uno de los siguientes valores: Minuto; Hora; Día; Una semana; Mes; Cuarto; Año; Década; Medio año.
  • Magnitud(Número). En cuánto se debe aumentar la fecha, se ignora la parte fraccionaria.
Ejemplo:
AddToDate(FechaHora(2002, 10, 12, 10, 15, 34), "Mes", 1)
Resultado: 12/11/2002 10:15:34

12. Diferencia de fecha - la función está diseñada para obtener la diferencia entre dos fechas.

Sintaxis:
FechaDiferencia(Expresión1, Expresión2, TipoDiferencia)

Opciones:

  • Expresión1(Fecha de). Fecha restada;
  • Expresión2(Fecha de). Fecha original;
  • TipoDiferencia(Línea). Contiene uno de los valores: Segundo; Minuto; Hora; Día; Mes; Cuarto; Año.
Ejemplo:
DIFERENCIAFECHA(FECHAHORA(2002, 10, 12, 10, 15, 34),
FECHA HORA (2002, 10, 14, 9, 18, 06), "DÍA")
Resultado: 2

13. Subcadena - esta función está diseñada para extraer una subcadena de una cadena.

Sintaxis:
Subcadena (cadena, posición, longitud)

Opciones:

  • Línea(Línea). La cadena de la que se extrae la subcadena;
  • Posición(Número). La posición del carácter desde el que comienza la subcadena que se extraerá de la cadena;
  • Longitud(Número). Longitud de la subcadena asignada.
Ejemplo:
SUBSTRING(Cuentas.Dirección, 1, 4)

14. Longitud de la cuerda - la función está diseñada para determinar la longitud de una cuerda.

Sintaxis:
Longitud de cadena (cadena)

Parámetro:

  • Línea(Línea). Una cadena cuya longitud se especifica.
Ejemplo:
Línea(Contrapartes.Dirección)

15 años- esta función está diseñada para extraer el año de un valor de tipo Fecha.

Sintaxis:
Año (Fecha)

Parámetro:

  • fecha(Fecha de). La fecha en la que se determina el año.
Ejemplo:
AÑO(Gasto.Fecha)

16. 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.

Sintaxis:
Trimestre (Fecha)

Parámetro:

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

17. 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.

Sintaxis:
Mes (fecha)

Parámetro:

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

18. Día del año (DayOfYear) - 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).

Sintaxis:
Día del año (Fecha)

Parámetro:

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

19. 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.

Sintaxis:
Día(Fecha)

Parámetro:

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

20. 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.

Sintaxis:
Semana (Fecha)

Parámetro:

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

21. 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).

Sintaxis:
Día de la semana (Fecha)

Parámetro:

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

22. 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.

Sintaxis:
Hora (fecha)

Parámetro:

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

23. 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.

Sintaxis:
Minuto(Fecha)

Parámetro:

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

24. 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.

Sintaxis:
Segundo (fecha)

Parámetro:

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

25. Reparto - 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.

Sintaxis:
Express(Expresión, TipoIndicación)

Opciones:

  • Expresión- expresión a convertir;
  • Tipo Indicación(Línea). 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.
Ejemplo:
Expreso(Data.Props1, "Número(10,3)")

26. Es nulo (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.

Sintaxis:
Es nulo (Expresión1, Expresión2)

Opciones:

  • Expresión1- valor a comprobar;
  • Expresión2- valor de retorno si Expresión1 es NULL.
Ejemplo:
SíNULL(Importe(Ventas.ImporteRotación), 0)

27.ACos- calcula el arco coseno en radianes.

Sintaxis:
ACos(Expresión)

Parámetro:

  • Expresión(Número). El valor del coseno (en el rango -1 ... 1) por el cual se determina el ángulo.
28.ASen- calcula el arcoseno en radianes.

Sintaxis:
ASen(Expresión)

Parámetro:

  • Expresión(Número). El valor del seno (en el rango -1 ... 1) por el cual se determina el ángulo.
29.ATan- calcula el arcotangente en radianes.

Sintaxis:
ATan(Expresión)

Parámetro:

  • Expresión(Número). El valor de la tangente por el cual se determina el ángulo.
30.porque- calcula el coseno.

Sintaxis:
porque (expresión)

Parámetro:

  • Expresión
31. Exp.- elevar el número e a una potencia.

Sintaxis:
Exp(Expresión)

Parámetro:

  • Expresión(Número). El significado del título.
32.Registro- calcula el logaritmo natural.

Sintaxis:
Registro (expresión)

Parámetro:

  • Expresión
33.Registro10- calcula el logaritmo de X en base 10.

Sintaxis:
Log10(Expresión)

Parámetro:

  • Expresión(Número). El número original es mayor que 0.
34. prisionero de guerra- exponenciación.

Sintaxis:
Potencia(Base, Indicador)

Opciones:

  • Base(Número). La base de la operación de exponenciación.
  • Índice(Número). Exponente.
35. Pecado- calcula el seno.

Sintaxis:
Pecado (Expresión)

Parámetro:

  • Expresión(Número). Especificado en radianes.
36. cuadrado- calcula la raíz cuadrada.

Sintaxis:
Sqrt(Expresión)

Parámetro:

  • Expresión(Número). Número no negativo.
37. bronceado- calcula la tangente.

Sintaxis:
Bronceado (expresión)

Parámetro:

  • Expresión(Número). El valor del seno por el cual se determina el ángulo.
38. Ronda- redondea el número original a la profundidad de bits requerida. El modo de redondeo es estándar (1,5 como 2).

Sintaxis:
Env(Expresión, Profundidad de bits)

Opciones:

  • Expresión(Número). Número original;
  • Profundidad de bits(Número). El número de decimales a los que se redondeará.
39. Internacional- corta la parte fraccionaria de un número.

Sintaxis:
Objeto (Expresión)

Parámetro:

  • Expresión(Número). Un número fraccionario.
40. 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.

Ejemplo:
Nombre abreviado(Documentos.Enlace, Documentos.Fecha, Documentos.Número)

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.

41. Resentimiento - esta función devuelve una representación de cadena del valor pasado de un tipo no primitivo. Para valores de tipo primitivo, devuelve el valor mismo.

<Пустое значение>".

Ejemplo:
Presentación(Contraparte)

42. cuerda - esta función convierte el valor pasado en una cadena.

Si se utiliza una matriz o una tabla de valores como parámetro, la función devuelve una cadena que contiene una representación en cadena de todos los elementos de la matriz, separados por los caracteres ";". Si algún elemento tiene una representación de cadena vacía, entonces la cadena "<Пустое значение>".

Ejemplo:
Fila (fecha de venta)

43. El valor está lleno

Para valores NULL, Indefinido siempre devuelve Falso.
Para valores booleanos, siempre devuelve Verdadero.
Para otros tipos, devuelve True si el valor difiere del valor predeterminado para el tipo determinado.

Ejemplo:
Valor completado (fecha de entrega)

44. Nivel en grupo - esta función obtiene el nivel de grabación actual en relación con la agrupación.

Se puede utilizar para obtener el nivel de anidamiento de un registro en una agrupación jerárquica.

Ejemplo:
NivelEnGrupo()

45. Tipo de valor

Sintaxis:
Tipo de valor (expresión)

Parámetro:

  • Expresión(Línea). Tipo de valor de cadena.
Devuelve un valor de tipo Tipo que contiene el tipo de valor del parámetro de función.

Inicie sesión en el sitio como estudiante

Inicie sesión como estudiante para acceder a los materiales escolares.

Sistema de composición de datos 1C 8.3 para principiantes: contando los resultados (recursos)

El propósito de esta lección será:

  • Redactar un informe que muestre una lista de productos (Directorio de alimentos), su contenido calórico y sabor.
  • Agrupa productos por color.
  • Obtenga información sobre cómo resumir (recursos) y campos calculados.

Crear un nuevo informe

Como en lecciones anteriores, abrimos la base de datos " fiambres"en el configurador y crea un nuevo informe a través del menú" Archivo"->"Nuevo...":

Tipo de Documento - informe externo:

En el formulario de configuración del informe, escriba el nombre " Lección 3" y presione el botón " Diagrama de composición de datos abiertos":

Deje el nombre del esquema predeterminado y haga clic en " Listo":

Agregar una solicitud a través del constructor

En la pestaña " conjunto de datos" haga clic verde signo más y seleccione " Agregar conjunto de datos - Consulta":

En lugar de escribir el texto de la solicitud manualmente, lo ejecutamos nuevamente. constructor de consultas:

En la "pestaña" Mesas"arrastrar la mesa" Alimento" de la primera columna a la segunda:

Seleccione de la tabla " Alimento"campos que solicitaremos. Para ello, arrastre y suelte los campos" Nombre", "Gusto", "Color" Y " Contenido calórico" de la segunda columna a la tercera:

Resultó así:

Presiona el botón " DE ACUERDO" - el texto de la solicitud se generó automáticamente:

Crear configuraciones de presentación de informes

Ir a la pestaña " Ajustes" y haga clic en varita mágica, llamar diseñador de configuración:

Seleccione el tipo de informe " Lista..." y presione el botón " Más":

Arrastre desde la columna de la izquierda hacia la derecha los campos que se mostrarán en la lista y haga clic en " Más":

Arrastre desde la columna de la izquierda al campo de la derecha " Color" - Pasará agrupamiento líneas en el informe. Haga clic en " DE ACUERDO":

Y aquí está el resultado del trabajo del diseñador. Jerarquía de nuestro informe:

  • el informe en su conjunto
  • agrupando "Color"
  • entradas detalladas: líneas con nombres de alimentos

Guarde el informe (botón disquete) Y sin cerrar Inmediatamente abriremos el configurador en modo usuario. Resultó así:

Cambiar el orden de las columnas

pero vamos cambiemos el orden columnas (flechas arriba y abajo) para que se parezca a la siguiente figura:

Guardemos el informe y volvamos a abrirlo en modo usuario:

Genial, eso es mucho mejor.

Resumamos el contenido calórico.

Sería bueno resumir el contenido calórico de los alimentos por grupo. Para ver la suma del contenido calórico de todos los productos, digamos, blancos o amarillos. O descubra el contenido calórico total de todos los productos en la base de datos.

Para ello existe un mecanismo de cálculo de recursos.

Ir a la pestaña " Recursos"y arrastra el campo" Contenido calórico"(vamos a resumirlo) de la columna de izquierda a la derecha.

En este caso, en el campo, seleccione la expresión de la lista desplegable " Cantidad (calorías)", ya que el total será la suma de todos los elementos incluidos en el total:

Guardamos y generamos un informe:

Ahora tenemos resultados para cada uno de los grupos y para el informe en su conjunto.

Resumámoslo (promedio) en términos de calorías.

Ahora hagamos que aparezca en otra columna. promedio Contenido calórico de los productos por grupos y en el informe en su conjunto.

No puede tocar la columna "Calorías" existente: el total ya se muestra en ella, por lo que creemos otro campo, que será una copia exacta del campo "Calorías".

Para crear dicho campo "virtual", usaremos el mecanismo campos calculados.

Ir a la pestaña " Campos calculados" y presione verde Signo de más:

En una columna " Ruta de datos"escribimos el nombre del nuevo campo ( sin problemas, sin espacios). Que se llame " Contenido calórico promedio", y en la columna " Expresión"escribimos el nombre de un campo existente a partir del cual se calculará el nuevo campo. Escribimos allí " Contenido calórico". Columna " Título" se completará automáticamente.

Hemos agregado un nuevo campo (" Contenido calórico promedio"), pero no aparecerá en el informe por sí solo; deberá volver a llamar diseñador de configuración("varita mágica") o agregue este campo a mano.

Vamos a hacerlo segundo forma. Para hacer esto, vaya a la pestaña " Ajustes", seleccionar " Informe"(después de todo, queremos agregar el campo completo al informe), seleccione la pestaña en la parte inferior" Campos seleccionados"y arrastra el campo" Contenido calórico promedio"de la columna de izquierda a derecha:

Resultó así:

Guardamos y generamos un informe:

Ha aparecido el campo y vemos que sus valores son los valores del campo "Calorías". ¡Excelente!

Para hacer esto, usaremos nuevamente el mecanismo que ya conocemos. recursos(resumiendo). Ir a la pestaña " Recursos"y arrastra el campo" Contenido calórico promedio"de la columna de izquierda a derecha:

Además, en la columna " Expresión"elegir" Promedio (calorías promedio)":

Guardamos y generamos un informe:

Vemos que para los grupos, es decir, para cada color, y para el informe en su conjunto, el valor medio se calculó de forma absolutamente correcta. pero están presentes entradas adicionales para productos individuales (no grupos) que me gustaría eliminar del informe.

¿Sabes por qué aparecieron (valores no por grupo)? Porque cuando agregamos el campo " Contenido calórico promedio"en la configuración del informe, en el segundo paso seleccionamos el informe completo y este nuevo campo terminó en el elemento " Detallado registros".

Arreglemos el error. Para hacer esto, regrese a la pestaña " Ajustes", seleccionar " Entradas detalladas" primero desde arriba (paso 2) y luego " Entradas detalladas"desde abajo (paso 3), vaya al marcador" Seleccionado campos" y veremos en su columna derecha el elemento " Auto".

Elemento " Auto" - este no es un solo campo. Estos son varios campos que caen aquí automáticamente según la configuración de nivel superior.

Para ver cuáles son estos campos, haga clic en el elemento " Auto" bien botón y seleccione " Expandir":

Elemento " Auto" ampliado a los siguientes campos:

Y aquí está nuestro campo" Contenido calórico promedio"que vino aquí desde el punto " Informe" cuando lo arrastramos allí. Sólo vamos a eliminar marque la casilla junto a este campo para eliminar su salida.

Publicaciones sobre el tema.