Informes y Documentos
Jerarquía en Reports
Dificultad: 9/10Si 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:
- El bucle Padre
(DataItem 1: Socios)coge al Socio A (Iteración 1). - 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)!". - El bucle Hijo entra en acción iterando 4 préstamos del socio A, mandando las `Columns` (los importes) para imprimir.
- Termina el hijo. El Padre recupera el control, y salta al Socio B (Iteración 2).
- 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") { }
}
}
}