Crear elementos de datos de informes y sus propiedades
Crear un diseño lógico para un informe significa definir el modelo de datos, lo que también implica definir cómo se recopilan los datos para el informe. Esto incluye:
Tablas que el informe utiliza definiendo elementos de datos.
Relaciones entre elementos de datos si el informe utiliza más de una tabla.
Clave, orden de clasificación y filtros para usar con los elementos de datos.
Elementos que el usuario puede cambiar en tiempo de ejecución.
Agrupación de datos.
Cálculo de subtotales y totales.
Normalmente, los elementos de datos y las columnas corresponden a los campos de una tabla. Cuando se ejecuta el informe, cada elemento de datos se repite para todos los registros de la tabla subyacente, se aplican filtros y se crea el conjunto de datos. Cuando un informe se basa en más de una tabla, debe establecer relaciones entre los elementos de datos para poder recuperar y organizar los datos.
Puede crear el conjunto de datos de un informe a partir de elementos de datos y columnas. Un elemento de datos es una tabla. Una columna puede ser una de las siguientes entidades:
Un campo en una tabla
Una variable
Una expresión
Una constante de texto
Puede definir un modelo de datos agregando elementos de datos, lo cual indica qué tablas lee el informe. Las tablas que aparezcan en la lista se leen en su totalidad cuando se ejecuta el informe. Puede vincular y filtrar elementos de datos para limitar el número de registros que lee el informe y determinar cómo se unen las tablas.
Un elemento de datos tiene la estructura siguiente:
dataitem(DataItemName; SourceTableName)
{
}
SourceTableName es el nombre de la mesa y DataItemName es el nombre que le asigna al elemento de datos. DataItemName debe ser un nombre que cumpla con Common Language Specification (CLS), lo que significa que no puede contener caracteres especiales, excepto el subrayado.
Un informe puede leer la misma tabla varias veces si la tabla se enumera varias veces. Por ejemplo, puede configurar que un informe lea los registros de clientes dos veces: primero, de los clientes que no estén bloqueados y, a continuación, de los clientes que sí lo estén.
Las tablas enumeradas se convierten en elementos de datos en el informe. Los elementos de datos son variables de registro que permiten al informe acceder a los datos de la tabla mediante código. El informe lee los datos de las tablas en el orden en el que se enumeren los elementos de datos.
Cuando se agregan dos elementos de datos, uno después del otro, las tablas se concatenan al conjunto de datos en las columnas correspondientes de cada elemento de datos.
El siguiente ejemplo muestra un conjunto de datos que contiene dos elementos de datos. El primer elemento de datos se vincula a la tabla de clientes y el segundo elemento de datos, a la tabla de proveedores:
dataset
{
dataitem(Customer;Customer)
{
}
dataitem(Vendor;Vendor)
{
}
}
Si un elemento de datos tiene sangría debajo de otro elemento de datos (el elemento de datos principal), el informe lee todos los registros del elemento de datos principal y todos los registros del elemento de los datos de la sangría, incluidos los filtros o los vínculos. En ese caso, las tablas se unen.
El siguiente ejemplo muestra un conjunto de datos que contiene dos elementos de datos anidados. El primer elemento de datos se vincula a la tabla de clientes y el segundo elemento de datos, a la tabla de la línea de ventas:
dataset
{
dataitem(Customer;Customer)
{
dataitem("Sales Line";"Sales Line")
{
DataItemLinkReference = Customer;
DataItemLink = "Bill-to Customer No." = field("No.");
}
}
}
Este concepto es parecido a un bucle FOR anidado. Por ejemplo, si la tabla Línea de ventas se agrega como un elemento de datos en el elemento de datos de la tabla Cliente, el informe lee el primer cliente y luego la información relevante de la línea de ventas de ese cliente antes de pasar al cliente siguiente.
Cada elemento de datos tiene las propiedades DataItemLinkReference y DataItemLink. Estas propiedades definen una relación maestra/detallada entre dos tablas.
En la propiedad DataItemLinkReference de un elemento de datos, seleccione el elemento de datos principal al que se desee vincular (el elemento de datos debe ser parte del elemento de datos principal). Después de especificar el valor DataItemLinkReference, utilice la propiedad DataItemLink para especificar un campo de cada elemento de datos en el que basar el vínculo. En la propiedad DataItemLink del elemento de datos con sangría, especifique un vínculo para el elemento de datos haciendo coincidir los campos de este elemento de datos con los campos del elemento de datos principal.
El ejemplo anterior ilustra cómo utilizar esta propiedad. En el ejemplo hay dos elementos de datos: primarios y secundarios. El elemento de datos primario es una lista de clientes denominada Cliente. El elemento de datos secundario contiene un registro de todos los pedidos de ventas. En la tabla Cliente, la clave principal es el número de cliente, que se almacena en el campo N.º. En la tabla que contiene los datos de ventas, cada registro contiene este número de cliente como una clave extranjera en el campo Facturar a n.º cliente. Puede establecer el valor de la propiedad DataItemLinkReference del elemento de datos secundario al elemento de datos primario. Además, puede configurar la propiedad DataItemLink del elemento de datos secundario en el valor siguiente:
"Bill-to Customer No." = field("No.");
Ahora tiene un filtro en los registros del elemento de datos secundario. Este filtro solo muestra los registros que pertenecen al registro de cliente seleccionado actualmente.
Si omite la propiedad DataItemLink, entonces las dos tablas se vincularán mediante una combinación cruzada, lo que significa que todos los registros del primer elemento de datos se vincularán con todos los registros del segundo elemento de datos. Intente evitar esta situación, porque vinculará registros de ambas tablas que no están relacionados desde un punto de vista empresarial.
La propiedad PrintOnlyIfDetail especifica si se imprimen datos en un informe para el elemento de datos principal cuando el elemento de datos secundario no genera resultados. (se correlaciona con una unión interna o izquierda)
Esta propiedad no tiene ningún efecto en un elemento de datos que no tenga elementos de datos secundarios. Si esta propiedad es false y no existe ningún registro en el elemento de datos secundario que corresponda al registro actual del elemento de datos primario, el informe imprimirá datos del registro actual en el elemento de datos primario, aunque no existan datos para el elemento de datos secundario. Si esta propiedad es true y no existe ningún registro en el elemento de datos secundario que corresponda al registro actual del elemento de datos primario, el informe no imprimirá datos del registro actual en el elemento de datos primario. Si existen más de dos elementos de datos, el informe se repetirá a través de cada relación primario-secundario de la misma manera.
En el siguiente ejemplo, la propiedad PrintOnlyIfDetail se ha establecido en el elemento de datos Cliente:
dataitem(Customer; Customer)
{
PrintOnlyIfDetail = true;
dataitem("Sales Line"; "Sales Line")
{
DataItemLinkReference = Customer;
DataItemLink = "Bill-to Customer No." = field("No.");
}
}
El resultado es que cuando se recupera un registro de cliente de la tabla Cliente y si no existen líneas de ventas relacionadas para este cliente, el registro de cliente no se agregará al conjunto de datos. Puede plantearse establecer en la propiedad PrintOnlyIfDetail el valor true, lo que es parecido a implementar COMBINACIÓN INTERNA en una consulta SQL. Otra opción es establecer en la propiedad PrintOnlyIfDetail el valor false, que es el valor predeterminado, lo cual es parecido a implementar COMBINACIÓN EXTERNA IZQUIERDA en una consulta SQL.
La propiedad DataItemTableView establece la clave en la que basarse para ordenar, el orden de clasificación y los filtros del elemento de datos. A menudo, esta propiedad se utiliza para aplicar un filtro al elemento de datos.
Por ejemplo, si no desea todos los registros de la tabla Cliente del conjunto de datos, sino solo los no bloqueados, puede usar el siguiente filtro:
dataitem(Customer; Customer)
{
PrintOnlyIfDetail = true;
DataItemTableView = where(Blocked=filter(false));
}
La propiedad DataItemTableView afecta a las situaciones siguientes:
Si establece una clave, el elemento de datos no tendrá una ficha desplegable en la página Solicitud y los usuarios no pueden seleccionar una clave para ordenar, un orden de clasificación o filtros para el elemento de datos.
Si establece un orden de clasificación, este se utilizará para el informe, independientemente del orden de clasificación que el usuario seleccione en la página Solicitud.
Si se establece un filtro, este filtro no aparece en la página de solicitud, pero se utiliza junto con los filtros que el usuario especifique en la página Solicitud.
Establecer un orden de clasificación, un filtro o ambos no impide que los usuarios seleccionen un campo de clasificación en la página Solicitud.
Puedes usar el método abreviado de teclado Ctrl+barra espaciadora en Visual Studio Code para obtener una descripción general de las propiedades del elemento de datos disponible.
