Informes y Documentos

Jerarquía en Reports

Dificultad: 9/10

Si la factura de la luz fuera un informe y tuviera un solo DataItem que itera la palabra "Factura 1", tendrías una sola cara blanca y fea. Los reports reales tienen Jerarquías de Datos (Anidación) para explicar desgloses (cabecera, y todos sus miles de hijos).

Cómo anidar DataItems

Cuando anidas (indentas o metes dentro) un segundo `DataItem` dentro de uno original (Padre), creas un bucle infinito *"hijo"* que **se dispara por cada vuelta individual que da el bucle inicial**.

Por ejemplo, imagina que queremos una lista de los préstamos organizados o agrupados dentro de cada socio infractor de la biblioteca:

  1. El bucle Padre (DataItem 1: Socios) coge al Socio A (Iteración 1).
  2. Inmediatamente el motor desciende al bucle Hijo (DataItem 2: Préstamos). El hijo le grita al motor "¡Espera, solo quiero iterar mis préstamos cuyo número de socio coincida con el Padre A en este microsegundo (SubLink)!".
  3. El bucle Hijo entra en acción iterando 4 préstamos del socio A, mandando las `Columns` (los importes) para imprimir.
  4. Termina el hijo. El Padre recupera el control, y salta al Socio B (Iteración 2).
  5. Se repite la cascada hija para el Socio B con los préstamos del B... y así sucesivamente.
dataset
{
    dataitem(Padre; "Socio") {
        
        // Para cada socio, exporta su nombre
        column(SocioName; "Name") { }

        // Y luego por cada uno, indaga en esta sub-tabla:
        dataitem(Hijo; "Prestamos") {
            DataItemLink = "Id Socio" = field("Id");
            column(FechaRetraso; "Fecha Devolucion") { }
        }
    }
}
← Volver a Teoría