4.1 · Subinformes (vinculados y no vinculados)

Nivel 4 · Experto: subinformes, gráficos y multifuente

4.1Subinformes (vinculados y no vinculados)

Objetivo: Insertar un subinforme (vinculado o no), definir el campo de vínculo y dominar su coste.
Tiempo estimado: 11 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Un subinforme = un informe completo dentro del principal : su propia fuente, sus campos, su formato — la solución cuando una simple combinación no basta (fuentes diferentes, relaciones uno-a-varios múltiples).
  • Vinculado o no vinculado, todo cambia : no vinculado = mismos datos mostrados una vez (resumen global) ; vinculado = datos correspondientes por campo de vínculo, ejecutado de nuevo para cada valor del principal.
  • Reflejo de Farès : un subinforme vinculado se coloca al nivel de un grupo (una ejecución por grupo), nunca en los Detalles de un informe grande — y se prefiere la combinación cuando las tablas están en la misma base de datos.

Minicaso hilado — Farès y el extracto de cliente con facturas

Farès, controlador de gestión en Argel, debe producir el extracto mensual de los clientes : el informe principal lista los clientes desde la base de datos de gestión, pero las facturas detalladas vienen de otra extracción que la combinación inflaría con duplicados (dos relaciones uno-a-varios : pedidos Y pagos). Inserta un subinforme vinculado sobre el ID de cliente, colocado en el encabezado de grupo Cliente : para cada cliente, el subinforme muestra las facturas de ESE cliente, una sola ejecución por cliente. Primer hito del hilo conductor : Farès combina dos fuentes sin duplicados y sin matar el rendimiento.

Este mismo caso vuelve en el curso, el esquema, el guion y el desafío 48h — y continúa en 4.2, 4.3, 4.4 y 4.5.

1. Un informe dentro de un informe : cuando el subinforme se impone

El nivel 4 abre las funcionalidades expertas. La primera de ellas : los subinformes (Subreports) — un informe completo (su propia fuente, sus campos, su formato) insertado en una sección del informe « principal ». Como para el extracto de Farès, su fuerza es combinar datos que NO se prestan a una simple combinación : fuentes diferentes (dos bases de datos, una base + un archivo), relaciones complejas o uno-a-varios múltiples que crearían duplicados, información conexa para presentar aparte (para cada cliente, sus últimas facturas).

Regla de decisión : cuando las tablas están en la misma base de datos y se relacionan limpiamente por una clave, una combinación sigue siendo más sencilla y más eficaz — es la opción por defecto. El subinforme es la herramienta de los casos en que la combinación no conviene : fuentes no combinables, duplicados de combinación, lógica o agregación independiente. Se inserta vía « Insertar → Subinforme » (nuevo informe o importación de uno existente), y luego se definen los vínculos.

2. Vinculado frente a no vinculado : el campo de vínculo lo hace todo

Distinción clave. Un subinforme no vinculado (unlinked) es independiente : muestra los mismos datos sea cual sea su posición — por ejemplo un resumen global mostrado una vez en un pie de informe. Un subinforme vinculado (linked) está conectado al principal por un campo de vínculo : para cada registro o grupo del principal, muestra los datos correspondientes — los pedidos de ESE cliente, como las facturas de cada cliente de Farès.

Mecanismo : en el paso « Vínculos » (Subreport Links), se elige el campo del principal (p. ej. Cliente.ID) ; Crystal Reports crea un parámetro en el subinforme y lo asocia al campo correspondiente (p. ej. Facturas.ClienteID) — el filtro se aplica automáticamente, idealmente del lado servidor. El campo de vínculo debe existir en ambos lados. Trampa clásica : olvidar el vínculo — el subinforme muestra entonces todos sus datos, como uno no vinculado.

3. El rendimiento : la ubicación decide el coste

Un subinforme vinculado se vuelve a ejecutar para cada valor de vínculo del principal. Colocado en la sección Detalles, se ejecuta una vez POR línea — catastrófico con grandes volúmenes. Colocado en un encabezado o pie de grupo, solo se ejecuta una vez por grupo — es el gesto de Farès : una ejecución por cliente en lugar de una por factura.

Complementos de prudencia : limitar los datos del subinforme (filtro del lado servidor, solo campos útiles), evitar los subinformes anidados (coste multiplicado), considerar una alternativa (combinación, comando SQL en 4.4, vista consolidada) y probar con un volumen real. Los subinformes comparten difícilmente datos con el principal (variables compartidas = avanzado).

Error frecuente de interpretación: « Un subinforme es solo una combinación visual : lo pongo en los Detalles y va solo ». No. Sin campo de vínculo definido en ambos lados, el subinforme muestra todos sus datos sin corresponder al registro ; y en los Detalles, un subinforme vinculado se ejecuta una vez por línea — el informe se vuelve inutilizable con grandes volúmenes. Vincular por una clave común, filtrar del lado servidor, colocar al nivel del grupo : ese trío es lo que hace un subinforme correcto.
Subinforme : vinculado o no, y a qué coste Correspondencia y coste No vinculado Mismos datos,mostrados una vezVinculado Campo de vínculo :datos correspondientesColocar al nivel del grupo Unaejecución por grupoLimitar y probar Filtroservidor, volumen real
Correspondencia y coste
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Farès lista los clientes en el informe principal (agrupado por cliente) y reserva la combinación para las tablas de la misma base de datos. 2) Inserta un subinforme sobre las facturas vía Insertar → Subinforme y lo vincula por el ID de cliente (campo presente en ambos lados, filtro del lado servidor). 3) Coloca el subinforme vinculado en el encabezado de grupo Cliente : una ejecución por cliente, no una por línea. 4) Limita los campos del subinforme y prueba con el volumen mensual real. Lección : vincular por una clave común, colocar en el grupo, limitar — nunca un vinculado en los Detalles de un informe grande.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Las facturas de cada cliente

El extracto de Farès : un principal de clientes, un subinforme de facturas vinculado y bien colocado.

Principal : lista de clientes (agrupado por cliente).
Subinforme vinculado sobre ID de cliente → las facturas de ESE cliente.
Colocado en el ENCABEZADO DE GRUPO (una ejecución por cliente, no por línea).

Lectura : vincular por la clave común, filtrar del lado servidor, colocar al nivel del grupo.

Lección : datos conexos contextualizados, sin duplicados ni hundimiento del rendimiento.

Vocabulario de la sección

Subinforme (Subreport)
Informe COMPLETO insertado en otro (el principal) : su propia fuente, sus campos, su formato, mostrado en una sección del principal.

Ejemplo sencillo: Farès muestra las facturas (otra extracción) en el extracto de clientes sin combinarlas.

Lo que no es: una simple sección adicional del mismo informe.

Reflejo: fuentes no combinables o duplicados de combinación : pensar subinforme.

Subinforme vinculado (linked)
Conectado al principal por un CAMPO DE VÍNCULO : muestra los datos correspondientes a cada registro o grupo, ejecutado de nuevo por valor de vínculo.

Ejemplo sencillo: Para cada cliente de Farès, el subinforme muestra las facturas de ESE cliente.

Lo que no es: un resumen global idéntico en todas partes.

Reflejo: datos correspondientes por registro : definir el vínculo en ambos lados.

Subinforme no vinculado (unlinked)
Independiente : muestra los MISMOS datos sea cual sea su posición en el principal.

Ejemplo sencillo: Farès muestra un resumen global de los impagados una vez en pie de informe.

Lo que no es: un detalle que sigue a cada registro.

Reflejo: resumen global mostrado una vez : no vinculado en pie de informe.

Coste por ejecución
Un subinforme vinculado se ejecuta una vez POR valor de vínculo : Detalles = una vez por línea (costoso), grupo = una vez por grupo.

Ejemplo sencillo: Farès pasa de cientos de ejecuciones (Detalles) a una por cliente (grupo).

Lo que no es: un coste fijo independiente de la ubicación.

Reflejo: vinculado + gran volumen : subir siempre al nivel del grupo.

En la práctica — En práctica — Insertar un subinforme

  1. Inserte un subinforme (« Insertar → Subinforme ») : cree un nuevo informe o importe uno existente, con su propia fuente y sus campos.
  2. Decida VINCULADO o NO VINCULADO : no vinculado para un resumen global (mismos datos) ; vinculado para datos correspondientes por registro o grupo.
  3. Para un subinforme VINCULADO, defina el CAMPO DE VÍNCULO (p. ej. ID de cliente) : mostrará los datos correspondientes a cada valor del principal.
  4. Para el RENDIMIENTO, coloque un subinforme vinculado en un encabezado o pie de GRUPO (una vez por grupo) en lugar de en Detalles (una vez por línea).
Inserta subinformes (vinculados o no) para combinar fuentes diferentes y relaciones complejas, dominando el impacto en el rendimiento.

Guion listo para decir — justificar el subinforme ante su responsable (30 s)

« Soy Farès : para el extracto de clientes, no puedo combinar las facturas sin crear duplicados — por eso he puesto un subinforme vinculado por el ID de cliente, colocado al nivel del grupo. Una ejecución por cliente en lugar de una por línea : el extracto sigue siendo correcto y se abre en unos segundos. »

Para decir cuando le pregunten por qué no « simplemente combinar » : muestre el total inflado por los duplicados.

Plantilla copiar-pegar — ficha de encuadre de un subinforme

Necesidad : [extracto clientes + facturas otra extracción]
Elección : [combinación imposible → subinforme]
Tipo : [vinculado sobre ID de cliente | no vinculado — resumen global]
Vínculo : principal [Cliente.ID] → subinforme [Facturas.ClienteID], filtro del lado servidor [sí]
Ubicación : [encabezado de grupo Cliente — una ejecución por cliente]
Contenido : [solo campos útiles : N.º factura, fecha, importe]

Extracto de cliente multifuente

Como Farès : principal sobre la base de datos de gestión, subinforme vinculado sobre la otra extracción — una ejecución por cliente.

Doble relación uno-a-varios

Pedidos Y pagos de un cliente : un subinforme por relación para evitar la multiplicación de las líneas.

Resumen global

Total de los impagados mostrado una vez en pie de informe : subinforme no vinculado, sin campo de vínculo.

Gran volumen que se arrastra

Subir el subinforme al grupo, filtrar del lado servidor, considerar un comando SQL o una vista (ver 4.4).

✓ Buenas prácticas

  • Coloque un subinforme vinculado al nivel de un GRUPO, no en los Detalles.
  • Filtre el subinforme del lado servidor y ponga solo los campos útiles.
  • Prefiera una combinación cuando las tablas estén en la misma base de datos.

✗ Errores frecuentes

  • Un subinforme vinculado en los Detalles de un informe grande (rendimiento catastrófico).
  • Olvidar el vínculo (el subinforme muestra entonces todos sus datos).
  • Encadenar subinformes anidados (coste multiplicado).

Puntos clave

  • Un SUBINFORME es un informe COMPLETO insertado en otro. Fuerza : combinar datos difíciles de UNIR — fuentes diferentes, relaciones complejas, información conexa.
  • Distinción CLAVE : VINCULADO (campo de vínculo — datos correspondientes por registro/grupo) frente a NO VINCULADO (independiente, mismos datos).
  • RENDIMIENTO : un vinculado se ejecuta una vez POR valor de vínculo. Detalles = muy costoso ; encabezado/pie de GRUPO = muchas menos ejecuciones.
  • Inserción vía « Insertar → Subinforme » y definición de los VÍNCULOS. Probar con volumen real.

Desafío 48h — aplíquelo mañana

En un extracto real : inserte un subinforme vinculado (clave común en ambos lados), colóquelo al nivel del grupo, limite sus campos y compare el tiempo de apertura con una colocación en los Detalles.

Lista de salida de la sección
  • Sé insertar un subinforme y elegir vinculado o no vinculado según la necesidad.
  • Sé definir un campo de vínculo presente en ambos lados, filtrado del lado servidor.
  • Coloco un subinforme vinculado al nivel del grupo y pruebo con volumen real.
Autoevaluación 1-5 : ¿mi último subinforme vinculado se ejecuta una vez por grupo o por línea ?¿he verificado que el campo de vínculo existe en ambos lados ?

Preguntas frecuentes

¿Cuándo usar un subinforme en lugar de una combinación, y cómo evitar los problemas de rendimiento ?

Cuando las tablas están en la MISMA base de datos y se relacionan por una clave, una COMBINACIÓN es más sencilla y más eficaz — es la opción por defecto. Reserve el SUBINFORME para los casos en que la combinación no conviene : fuentes DIFERENTES no combinables, relaciones múltiples uno-a-varios que crearían duplicados, datos conexos para presentar aparte. Rendimiento : un subinforme vinculado se vuelve a ejecutar para cada valor de vínculo — no lo coloque NUNCA en los Detalles de un informe grande : póngalo en un encabezado o pie de GRUPO, limite sus datos (filtro del lado servidor, campos útiles), evite los anidados, considere un comando SQL o una vista (ver 4.4), y pruebe con un volumen real.

¿Cómo hacer corresponder los datos de un subinforme con cada registro del informe principal ?

VINCULANDO el subinforme al principal por un CAMPO común (p. ej. ID de cliente). Para cada registro o grupo, el principal pasa un valor de vínculo y el subinforme filtra sus datos sobre él. En concreto : inserte el subinforme, y en el paso « Vínculos » elija el campo del principal (Cliente.ID) y asócielo al campo correspondiente del subinforme (Facturas.ClienteID) — Crystal Reports crea el parámetro y aplica el filtro automáticamente. Puntos clave : clave presente en AMBOS lados, filtro del lado servidor, ubicación (Detalles o grupo) que regula la frecuencia de ejecución. Sin vínculo, el subinforme muestra todos sus datos.

Comprueba tu comprensión

¿Dónde colocar un subinforme vinculado para preservar el rendimiento ?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 4Preguntas inéditas y más difíciles para validar tus conocimientos