1s 8.3 Campos calculados del informe SCD. Ejemplos útiles de creación de un diagrama de composición de datos. Resto de la división

  • 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 Breve descripción Ideas y arquitectura del mecanismo ACS y sus capacidades.


    ACS es un mecanismo basado en una descripción declarativa de informes. ACS está diseñado para crear informes y mostrar información que tiene 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 maximizar la reducción de esfuerzos 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 libro de referencia o un 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.

    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, 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:

    Consideremos ahora 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 recomiendo 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.

    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, en la selección del grupo Nomenclatura, no puede utilizar la expresión CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Pero dicha 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.

    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.

    Opciones

    <Выражение>

    Tipo: Cuerda. La expresión que se va a evaluar.

    <Группировка>

    Tipo: Cuerda. 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 el mismo nombre.

    Por ejemplo:

    Suma(Ventas.SumTurnover)/Calcular(“Suma(Ventas.SumTurnover)”, “Total”)

    En este ejemplo, el resultado será la relación entre el importe del campo Sales.SumTurnover del registro de agrupación y el importe del mismo campo en todo el diseño;

    <ОбластьВычисления>

    Tipo: Cuerda. El parámetro puede tomar los siguientes valores:

    • GeneralTotal: 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.
    • Agrupación: la expresión se evaluará para el registro de agrupación de agrupación actual.
    • Agrupación sin recursos: al calcular una 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 calcular una función CalcularExpresión() con el valor Agrupación sin recursos para registros de grupo que no son agrupaciones de recursos, la función se calcula de la misma manera que se calcularía si el valor del parámetro fuera igual al valor de Agrupación.

    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 utilizando la función CalcularExpresión(), que indica el parámetro Agrupación sin recursos. Para otros recursos, las expresiones de recursos habituales se colocan en la agrupación de recursos.

    <Начало>

    Tipo: Cuerda. 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:

    <Конец>

    Tipo: Cuerda. 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.

    • Ú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 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.

    • 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 el registro 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 registros y se recibe Next() para el tercer registro, entonces se considera que no hay registros.

    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 LimitingValues ​​​​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.

    <Сортировка>

    Tipo: Cuerda. 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 palabra clave Ascender (para ordenar en orden ascendente), Descendente (para ordenar en orden descendente) y AutoOrden (para ordenar campos de referencia por los campos por los cuales desea ordenar el objeto referenciado). La palabra Orden automático se puede utilizar tanto con la palabra Ascendente como con la palabra Descendente.

    <ИерархическаяСортировка>

    Tipo: Cuerda. Igual que la opción Ordenar. 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.

    <ОбработкаОдинаковыхЗначенийПорядка>

    Tipo: Cuerda. 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 significa que se utiliza una secuencia de registros ordenados para determinar los registros anterior y siguiente. Valor por defecto.
    • Juntos 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:

    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

    Si el valor del parámetro es Por separado, entonces:

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

    § si el fragmento de cálculo se define como Actual, Actual (respectivamente, los parámetros Inicio y Fin), entonces para el registro 2 este fragmento constará de un registro 2. La expresión CalculateExpression(“Suma (Valor)”, Actual, Actual) ser igual a 20.

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

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

    § si el fragmento de cálculo se define como Actual, Actual (respectivamente, los parámetros Inicio y Fin), entonces para el registro 2 este fragmento constará de los registros 2 y 3. La expresión CalculateExpression(“Suma (Valor)”, Actual, Actual) será igual a 50.

    Al especificar un valor de parámetro igual a Juntos, en los parámetros Inicio y Fin no puede especificar un desplazamiento para las posiciones Primero, Último, Anterior y Siguiente.

    CalcularExpresión(“Suma(SumaRotación)”, “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 comprueban en busca de 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. Parámetro: 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 los caracteres “; “. Si se pasa una tabla de valores como parámetro, la función devuelve una cadena que contiene las representaciones de cadena de todas las filas de la tabla de valores, con las representaciones de celda de cada fila separadas por los caracteres “; “, y las líneas son un símbolo de avance de línea. Si algún elemento tiene una representación de cadena vacía, entonces se muestra la cadena en lugar de su representació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 nuevo material. ¡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:

    Importe - Precio* Cantidad

    Mire otro y también puede descargarlo usando estas funciones.

    Básicamente, los campos calculados tienen la misma configuración que los campos de diseño. Lo único que falta aquí es la columna Grupo de jerarquía. Al escribir campos calculados, no puede hacer referencia a otros campos calculados.

    ¿Cómo transferir parámetros y selecciones a un informe creado en un sistema de control de acceso sin crear un formulario de informe?

    &EnCliente // Pasar parámetros al informe ACS Procedimiento Procesamiento de comandos(Parámetro de comando, Parámetros de ejecución de comando) Selección = Nueva estructura("Nomenclatura", Parámetro de comando); Configuraciones fijas = GetFixedSettings(); Parámetros de formulario = Nueva estructura ( "Formulario en la apertura, Selección, tecla de opción, configuración fija", Verdad , Selección, "Opción de informe de ventas", Configuración Fija); Formulario abierto( "Informe.InformeVentas.Formulario", Parámetros de formulario); EndProcedure &OnServer Function GetFixedSettings()SalesReport = Informes. Reporte de ventas. Crear() ; SKD = ​​Informe de Ventas. Esquema de composición de datos; Configuración = SKD. Configuración por defecto; Inicio del período = Configuración. Parámetros de datos. FindParameterValue( NewDataCompositionParameter("BeginPeriod" ) ); Inicio de periodo. Valor = Mes de Inicio(FechaActual()); Inicio de periodo. Uso = Verdadero; Inicio del período = Configuración. Parámetros de datos. FindParameterValue( NewDataCompositionParameter("EndPeriod") ); Fin del periodo. Valor = MesFinal(FechaActual()); Fin del periodo. Uso = Verdadero; Configuración De Devolución; Función final // Obtener configuración fija()

    ¿Cómo centrar los encabezados de las columnas en un informe ACS?

    Debe configurar dos parámetros en el campo "Diseño" en la pestaña "Conjuntos de datos":

    Posición horizontal: Centro Posición vertical: Centro

    También en la pestaña “Configuración” en la parte inferior encontrarás otra pestaña: “Apariencia condicional”. Allí para cada agrupación, parámetro, etc. Puedes configurar el diseño como quieras.

    ¡Parece que te lo dije todo! Como recordarás, tienes la oportunidad de hacer preguntas si tienes alguna. Intentaré responder. Planeo escribir más artículos sobre este tema en el futuro, así que no olvides suscribirte a las actualizaciones de nuestro sitio web para no perdértelo. Además, definitivamente haré una prueba para reforzar el material de esta lección.

    Al final del artículo quiero recomendarte uno gratuito de Anatoly Sotnikov. Este es un curso de un programador experimentado. Le mostrará por separado cómo crear informes en el sistema de control de acceso. ¡Solo necesitas escuchar atentamente y recordar! Recibirá respuestas a las siguientes preguntas:
    • ¿Cómo crear un informe de lista simple?
    • ¿Para qué sirven las columnas Campo, Ruta y Título en la pestaña "Campos"?
    • ¿Cuáles son las limitaciones de los campos de diseño?
    • ¿Cómo configurar roles correctamente?
    • ¿Cuáles son las funciones de los campos de diseño?
    • ¿Dónde puedo encontrar la pestaña de composición de datos en una consulta?
    • ¿Cómo configurar parámetros en el sistema de control de acceso?
    • Se vuelve aún más interesante...
    ¿Quizás no debería intentar navegar por Internet usted mismo en busca de la información necesaria? Además, todo está listo para usar. ¡Empieza ya! Todos los detalles sobre lo que hay en las videolecciones gratuitas.

    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("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)),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: