Usando selecciones en SCD. Crear un diagrama de diseño de datos dentro del informe

En mi último artículo ya escribí que 1C es una plataforma paradójica. El sistema de composición de datos es una de estas paradojas. SKD está diseñado para diseñar informes complejos e implica reemplazar la programación de informes "manual" con el diseño en un conjunto de herramientas multifuncional. Oportunidad uso de sistemas de control de acceso apareció en la octava versión, pero pasó mucho tiempo hasta que apareció la versión 8.2 para que 1C pudiera usarla en sus productos estándar. Por un lado, ACS es un conjunto de herramientas multifuncional con el que se pueden crear informes muy complejos sin una sola línea de código. Sin embargo, el sistema de control de acceso tiene una barrera de entrada bastante alta, es muy difícil aprenderlo y empezar a utilizarlo plenamente “de una vez”, porque la interfaz no es del todo intuitiva, pero sí la más; manuales completos su uso están disponibles sólo en forma de literatura paga.

En el proceso de mi estudio de SKD, surgió un problema. Es necesario obtener datos de una tabla de valores de terceros utilizando un lenguaje de consulta y luego operar estos datos como con datos similares de tablas de bases de datos (operaciones de reducción, agrupación, etc.). En el formato clásico, crearíamos una consulta que recibe información de la tabla pasada a la consulta como parámetro.

Solicitud = Nueva solicitud (
"ELEGIR
| Tabla.Nomenclatura,
| Mesa.Almacén
|DESDE
| &TK AS Tabla");
Solicitud.SetParameter("TZ", TZ);

Pero con SKD no todo es tan sencillo. Desgraciadamente, es imposible realizar la operación descrita anteriormente en el sistema de composición de datos. Sin embargo, el sistema ha implementado la capacidad de cargar tablas de valores externas.

Aquí vale la pena hacer una breve digresión y hablar de Datasets. Los conjuntos de datos son fuentes de información de las cuales el sistema de gestión de datos recibe datos que luego compila en un informe. Los conjuntos de datos se dividen en tipos, principalmente utilizando el tipo "Consulta", en cuyo cuerpo el programador escribe una consulta a la base de datos. El tipo "Objeto" se utiliza para cargar datos de objetos externos. En ambos casos, la salida es un determinado conjunto de campos obtenidos como resultado de ejecutar una solicitud o cargar un objeto externo. Posteriormente, estos campos se pueden operar en la pestaña "Configuración", junto con configuraciones detalladas estructura del informe. Para interconectar diferentes conjuntos, el ACS brinda la posibilidad de indicar conexiones entre conjuntos de datos en la pestaña del mismo nombre. Estas conexiones son un análogo directo de la unión izquierda en una consulta clásica. Sin embargo, se debe tener en cuenta que las consultas en cualquier conjunto de datos no “conocen” la existencia de otros conjuntos de datos, en última instancia, las relaciones entre los conjuntos de datos afectarán el diseño de los datos de acuerdo con la estructura especificada en el “; Pestaña Configuración”.

Detallemos el problema con un ejemplo. Hay un informe estándar: Declaraciones de nómina para la organización de la configuración ZiK 8. Es necesario que los tipos de cálculos en el informe se agrupen en ciertos grupos. Las correspondencias entre vista de cálculo y grupo se almacenan en una tabla de valores externa. Para cargarlo en el esquema de diseño de datos principal, creamos un "objeto de conjunto de datos" con el nombre "Grupos" (Figura 2). Hacemos una conexión con el "conjunto de datos de consulta" - "Acumulaciones" por tipo de cálculo (Figura 3). En el "conjunto de datos de solicitud" - "Acumulaciones" hay información para grupos, eliminamos todas las entradas. Posteriormente, en la pestaña “Configuración” podemos utilizar el campo “Grupo”, cuyo valor se carga desde una fuente de datos externa (Figura 4). En la función de generación de informes, complementamos la carga de datos externos.

Función GenerateReport(Resultado = Indefinido, Datos de descifrado = Indefinido, OutputInReportForm = Verdadero) Exportar

//obteniendo o formando la tabla requerida de valores de “Grupos” y escribiéndola en la variable del mismo nombre

ExternalData = New Structure();//crea y completa la estructura de datos externos
DatosExternos.Insertar(Grupos);

UserPanelValue = TypicoReports.GetUserPanelSettingValuesofObject(ThisObject);
Configuración predeterminada = ConfiguraciónComposer.GetSettings();
TípicoReports.GetAppliedSetting(EsteObjeto);
WhichReports.GenerateTypicalReport(ThisObject, Resultado, Datos de descifrado, OutputToReportForm, ExternalData);
ConfiguracionesLinker.LoadSettings(Configuración predeterminada);
Resultado de devolución;

Función final

Si estuviéramos haciendo un informe desde cero, el código de inicio de generación del informe se vería así:

ExternalDataSets = nueva estructura;
ExternalDataSets.Insert("Grupos", Grupos); //Grupos - la tabla de valores deseada
EsquemaComposiciónDatos = GetLayout("EsquemaComposiciónDatosMain"); //nuestro diseño con diagrama de flujo de datos
Configuración = DataCompositionScheme.DefaultSettings;
DiseñoLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Configuración);
Procesador de composición de datos = nuevoProcesador de composición de datos;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = Nuevo documento tabular;
OutputProcessor = Nuevo OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

Leer 9660 una vez

Extensión de lenguaje de consulta para sistema de composición de datos

La extensión del lenguaje de consulta para el sistema de composición de datos se lleva a cabo mediante instrucciones sintácticas especiales encerradas entre llaves y colocadas directamente en el texto de la consulta.

Elementos sintácticos de la extensión del lenguaje de consulta del sistema de composición de datos.

ELEGIR

Esta oración describe los campos que el usuario podrá seleccionar para la salida. Después de este palabra clave Separados por comas, se enumeran los alias de los campos de la lista de selección de consultas principal que estarán disponibles para la configuración.

Por ejemplo:

(SELECCIONAR Artículo, Almacén)

Después del alias del campo puede haber una combinación de caracteres “.*”, que indica la posibilidad de utilizar campos secundarios de este campo.

Por ejemplo, la entrada Nomenclatura.* indica la posibilidad de utilizar campos secundarios del campo “Nomenclatura” (por ejemplo, el campo “Nomenclatura.Código”). El elemento SELECT solo puede aparecer en la primera consulta de unió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.

(DONDE Nomenclatura.*, Almacén)

Un ejemplo sencillo

Es necesario obtener las ventas del período + mostrar el artículo completo, independientemente de si hubo ventas o no. Es decir, debe seleccionar datos de la tabla de facturación del Registro de ventas, datos del directorio de nomenclatura. Saltemos la pregunta de por qué necesitamos toda la nomenclatura.

Para resolver el problema, puede crear una consulta que conecte el artículo y la tabla de facturación con una unión izquierda, como resultado, para el artículo que no se vendió en el período seleccionado, obtendremos los valores del campo. Contraparte, Acuerdo, Cantidad, Suma= Nulo. Esta petición:

SELECCIONE ReferenceNomenclature.Link AS Nomenclatura, SalesTurnover.Counterparty, SalesTurnover.Contraparte Acuerdo, SalesTurnover.QuantityTurnover AS Cantidad, SalesTurnover.CostTurnover AS Costo DESDE Referencia.Nomenclatura AS ReferenceNomenclature CONEXIÓN IZQUIERDA Registrar Acumulaciones.Sales.Turnover AS Software SalesTurnover SprNomenclature.Link = SalesTurnover. Nomenclatura

Aquí está el resultado:

Contraparte Acuerdo Nomenclatura Cantidad Suma
nulo nulo _Prueba1 nulo nulo
LLC "Cuernos y pezuñas" Acuerdo1 Zapatillas 10 1200
"Gazprom" Contrato genial Botas 5 13000
nulo nulo chanclos nulo nulo
nulo nulo Pizarras nulo nulo

En este ejemplo, no hubo ventas de los artículos: “Cubrezapatos” y “Zapatillas”

Y todo estaría bien, si agrupamos la muestra por contraparte, entonces todos los artículos no vendidos caerán en un grupo separado, donde Contraparte = Nulo, pero el cliente quiere tener una selección aleatoria en el informe por el campo de contraparte (naturalmente, esto significa la contraparte del registro de Ventas). ¿Qué tengo que hacer? Después de todo, de hecho, solo necesitamos filtrar la tabla. Ventas. Si usamos autocompletar en el constructor ACS, entonces los campos de selección disponibles incluirán el campo Contraparte, todo parece estar bien, pero al ejecutar un informe con selección por contraparte, perderemos todos los registros de la conexión con el ítem. Por ejemplo, establezcamos la selección: Contraparte = LLC "Cuernos y pezuñas". El resultado se verá así:

Para nada lo que necesitamos, ¿verdad?

Para solucionar el problema, por supuesto puedes agregar un parámetro a la consulta, por ejemplo en los parámetros de una tabla virtual. El volumen de ventas, pero al mismo tiempo se pierde la flexibilidad para establecer el tipo de comparación.

Hay una solución: para esto en consultor de construcción en la pestaña Composición de datos => Mesas agregar un campo de condición a las condiciones de la tabla virtual El volumen de ventas y cambiar su apodo a Selección de contraparte

Para no confundir al usuario con los campos de selección, desactivaremos el campo de condición. Contraparte y cambiar el título del campo Selección de contraparte


Como resultado de ejecutar este esquema con la selección habilitada por el campo de contraparte, la consulta resultante tomará la forma:

SELECCIONAR Nomenclatura de referencia.Enlace AS Nomenclatura, Facturación de ventas.Contraparte COMO Contraparte, Facturación de ventas.Acuerdo de contraparte COMO Acuerdo de contraparte, Facturación de ventas.Cantidad Facturación AS >Cantidad, Facturación de ventas.CostoFacilidad de ventas AS Costo, PRESENTACIÓN ENLACE(Favor de ventas.Acuerdo de contraparte) COMO Agente controlador de contratoIntroducción, REPRESENTACIÓN ENLACE(Favor de ventas. Contraparte) AS ContraparteIntroducción, SprNomenclature.Presentation AS NomenclaturePresentation FROM Directory.Nomenclature AS SprNomenclature CONEXIÓN IZQUIERDA Registro Acumulaciones.Ventas.Turnover(&P , , , Contraparte = &P3 ) AS SalesTurnover BY SprNomenclature.Link = SalesTurnover.Nomenclature

Y en consecuencia el resultado:

Contraparte Acuerdo Nomenclatura Cantidad Suma
nulo nulo _Prueba1 nulo nulo
LLC "Cuernos y pezuñas" Acuerdo1 Zapatillas 10 1200
nulo nulo Botas nulo nulo
nulo nulo chanclos nulo nulo
nulo nulo Pizarras nulo nulo

Test1 es un grupo en el directorio de Nomenclatura en el que se encuentra todo

Adjunto a la publicación se encuentra el esquema XML del informe utilizado en la publicación. Creé el circuito en Automatización Integrada, pero creo que todo funcionará bien tanto en UPP como en UT 10.

resumiendo

Este ejemplo muestra cómo crear sus propias configuraciones de selección en el ACS y deshabilitar las creadas automáticamente si está diseñando un circuito con la bandera habilitada. Autocompletar.

Si tienes suficiente experiencia para crear circuitos sin usar Autocompletar- Entonces este consejo no tiene sentido.

Software utilizado

  • Programa de captura de pantalla¡OK!
  • Editor de archivos XML

¡Atención! Esta es una versión introductoria de la lección, cuyos materiales pueden estar incompletos.

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: conectar conjuntos de datos

  • Escriba un informe que muestre a los clientes y sus productos favoritos. Cada cliente tiene un color favorito y cada producto tiene su propio color; en función de estos colores, debe determinar el "favorito" del producto. Por ejemplo, si el color favorito de Andrey es el rojo, entonces una de sus comidas favoritas serán los tomates (son rojos).
  • Aplique dos conjuntos de datos en el informe. El primer conjunto son datos de la tabla del directorio "Clientes". El segundo son datos de la tabla del directorio "Alimentos".
  • Implementar conexión entre estos dos conjuntos, para que el informe contenga sólo los productos favoritos de cada cliente.

Crear un nuevo informe

Abra la base de datos "Gastronom" en el configurador y cree un nuevo informe a través del menú principal:

Tipo de documento - "Informe externo":

En forma de nuevo informe, indique el nombre “Lección 6” y haga clic en el botón “Abrir diagrama de composición de datos”:

Deje el nombre del esquema predeterminado:

Agregar el primer conjunto de datos

En el diagrama que se abre, vaya a la pestaña "Conjuntos de datos" y seleccione "Agregar conjunto de datos - Consulta" usando el signo más verde:

Llame al constructor de la solicitud:

Indicamos la tabla "Clientes" y los campos que se deben obtener de la solicitud:

Agregar un segundo conjunto de datos

Agregue un segundo conjunto de datos:

Selecciónelo (DataSet2) y vuelva a llamar al constructor de consultas:

Indicamos la tabla del directorio "Alimentos" y los campos que se deben obtener de la solicitud:

El texto de la solicitud resultante fue:

Tenga en cuenta que actualmente tenemos dos conjuntos de datos en el informe: Conjunto de datos1 y Conjunto de datos2. Cada uno tiene su propio texto y datos de solicitud.

Hacer que los nombres sean más descriptivos

Para mayor claridad, cambiemos el nombre de DataSet1 a Clientes y DataSet2 a Alimentos.

Hazlo haciendo doble clic en cada uno de los conjuntos:

Podemos utilizar los datos de cada conjunto en nuestro informe. Accederemos a estos datos a través de campos.

EN este momento El conjunto “Clientes” tiene los siguientes campos: “Nombre” y “Color Favorito”, y el conjunto “Comida” tiene: “Nombre” y “Color”.

Vemos que los nombres se superponen y podemos confundirnos fácilmente. Entonces, cambiemos los nombres de los campos para que sean más significativos.

Seleccione el conjunto "Clientes" y cambie los nombres de los campos de esta manera:

Luego seleccione el conjunto "Comida" y cambie los nombres de los campos de esta manera:

Llamando al constructor de configuraciones

Finalmente, vaya a la pestaña "Configuración" y haga clic en la varita mágica para abrir el diseñador de configuración:

Tipo de informe: "Lista...":

Seleccione campos para el informe de ambos conjuntos:

¿Ves por qué era tan importante cambiar los nombres de los campos? En la etapa de configuración de composición de datos, no vemos de qué conjuntos provienen estos campos. Sólo vemos sus nombres.

Comprobando el informe

Guardamos el informe y lo generamos en modo usuario:

Sí. Está bien, pero no realmente. Se ha producido la llamada unión cruzada de dos conjuntos (debe estar muy familiarizado con esto por las uniones en consultas que estudiamos en módulos anteriores). Cada registro de la tabla Clientes tiene un registro correspondiente de la tabla Alimentos.

Pero de todos estos registros debemos dejar solo aquellos cuyo campo “Color favorito del cliente” sea igual al campo “Color de comida”:

Conectamos dos conjuntos de datos.

Para hacer esto, conectaremos dos conjuntos de datos (Clientes y Alimentos) usando los campos Customer FavoriteColor y FoodColor.

Vaya a la pestaña "Enlaces de conjunto de datos" y haga clic en el botón más para agregar un nuevo enlace:

Configuramos los parámetros como en la siguiente figura:

Voy a dar una explicación.

Fuente y receptor de la comunicación. Bueno, aquí todo está claro. Indicamos el primer conjunto (Clientes) y el segundo conjunto (Alimentos) de datos. Me gustaría llamar especialmente la atención sobre el hecho de que la comunicación se llevará a cabo según el principio unión exterior izquierda(lo cubrimos en el tema de solicitudes en módulos anteriores). En base a esto, debe elegir qué conjunto será la fuente y cuál el receptor.

Fuente de expresión. Indicamos aquí una expresión o simplemente un campo del conjunto de datos de origen (especificamos el campo ClientFavoriteColor del conjunto de Clientes aquí).

Expresión del receptor. Indicamos aquí una expresión o simplemente un campo del conjunto de datos del receptor (aquí indicamos el campo ColorFood del conjunto de Alimentos).

De este modo esta conexión dejará de la lista anterior solo aquellas filas en las que el campo Color Favorito del Cliente sea igual al campo Color de Comida.

Guardemos el informe y ejecútelo en modo usuario:

¡Excelente!

Haré una explicación sobre el campo " Condición de comunicación", sobre el cual los programadores novatos a menudo golpean sus lanzas.

La condición de conexión es un campo auxiliar. Puedes escribir expresiones allí. que involucran campos solo del conjunto de datos especificado en la fuente del enlace.

En este caso, para todas las filas del origen del vínculo, esta expresión (condición del vínculo) se verificará antes de realizar el vínculo. Y si esta expresión es VERDADERA, entonces se intentará establecer vínculos entre esta fila y las filas del receptor de vínculos. Si la expresión es FALSA, no se realizarán tales intentos.

Como trabajar