Language:


Break Points, Sutotales y Totales

Si necesitas calcular y mostrar subtotales, debes organizar tu informe de tal manera que los registros individuales que contribuyen a un subtotal, estén alineados todos de forma grupal en el informe. Es decir que los subtotales aparecen luego de cada grupo.

Como recordarás, ya habíamos descrito un ejemplo de cómo mostrar un subtotal (paso 4 de la página Imprimir Información desde el Registro Secundario). Vimos que la Lista de Contactos mostraba cada Factura de los Clientes y las alineaba bajo los detalles respectivos de cada Cliente. Así:

Cliente 1
Primra Factura del Cliente 1
Segunda Factura del Cliente 1
Tercera Factura del Cliente 1
Cliente 2
Primera Factura del Cliente 2
Segunda Factura del Cliente 2
Tercera Factura del Cliente 2
Cliente 3
Primera Factura del Cliente 3
Segunda Factura del Cliente 3
Tercera Factura del Cliente 3
Esta estructura constituye efectivamente un listado de Facturas ordenadas según el Código de Contacto y se mostrará la información de cada Cliente según corresponda. El tipo de ordenación para las Facturas (registro secundario) ha sido impuesto por el registro primario. Esto nos permite calcular varios subtotales para cada Cliente (ej. subtotales para el número de facturas, valor de las facturas, cantidad de ítems vendidos, etc.). Tales subtotales son calculados desde el registro secundario. Dicho esto, si deseas que tu informe contenga subtotales, necesitas un “percutador” (a veces conocido como “break point”) para mostrarlos. En este caso, la última factura de un Cliente en particular (al final de la búsqueda en el registro secundario), es el “break point” que hace que los subtotales se muestren en el informe.

Podría darse el caso que no desees mostrar ningún detalle del Cliente en el informe. Es más, el informe podría ser titulado “Lista de Facturas” no “Lista de Contactos???, de modo que solo aparezca una simple lista de Facturas ordenadas por el Código de Cliente con respectivos subtotales para cada Cliente. Una manera de hacer esto es usando exactamente la misma estructura y decidir simplemente no mostrar ninguna información proveniente del registro primario. Así que la persona que lea el informe, estará leyendo una lista de facturas. Ahora, si has decidido convertir el registro Facturas en tu registro primario, puedes ordenar las Facturas según el Código de cliente, pero no habrá ningún “break point??? entre los diferentes Clientes y por ende no se mostrarán subtotales (es decir, la búsqueda se correrá desde la última factura de un Cliente hasta la primera factura del siguiente cliente sin interrupciones).

Este método a través del cual se usa el registro primario para imponer un tipo de ordenación al registro secundario pero solo mostrar información del secundario, es una manera muy práctica de estructurar un informe con subtotales. Por ejemplo, a lo mejor decidirás mostrar una lista de clientes con varios subtotales para cada Categoría de Cliente en cuyo caso la opción ???Categorías Cliente’ será el registro primario. Nada provendrá de la Categoría de Cliente pero el registro Contacto será el registro secundario. El informe correrá una búsqueda en la opción ‘Categorías Cliente’ – para cada registro individual en tal opción se procederá a correr una búsqueda en el registro Contactos para hallar aquellos Contactos que pertenecen a la Categoría sujeto de la búsqueda. En resultado será un informe que mostrará Contactos ordenados según su Categoría y luego mostrará los subtotales.

El desventaja de este método es que no puedes usarlo cuando no existe ningún registro para ser usado como el registro primario y así imponer un tipo de ordenación sobre el registro secundario. Por ejemplo, no podrás usar este método para ordenar Facturas por orden de fecha e imprimir subtotales para cada fecha; esto debido a que no existe ningún registro que almacene fechas. Y, como ya se mencionó, no puedes hacer que el registro Facturas sea el registro primario y ordenar las Facturas por orden de fecha puesto que no habría ningún “break point” entre las diferentes fechas y por ende no habrá una separación para los subtotales. La solución es hacer que el registro Facturas sea tanto registro primario y registro secundario. Es decir, al ser registro primario ordenado por orden de fecha, hallará los “break points” entre las fechas; al ser registro secundario, mostrará las Facturas correctas y calculará los subtotales.

El procedimiento es el siguiente:

  1. Crea un nuevo informe. Estando en la solapa ‘Data’, especifica que el registro Facturas ha de ser tu registro primario y que las Facturas estarán ordenadas por orden de fecha (las fechas de las facturas). Tal vez querrás agregar una búsqueda sobre Facturas que caigan dentro de un periodo específico (según lo descrito aquí), y una segunda búsqueda para omitir Facturas no aprobadas. No diseñes ningún elemento en la solapa ‘Diseño???.

  2. La idea es hacer que el informe corra una búsqueda de las Facturas dentro del periodo especificado. Cuando la búsqueda se tope con una Factura cuya fecha es diferente a la fecha de la Factura anterior, entonces se deberá correr una búsqueda en el registro secundario (que es también el registro Facturas) en función a Factura emitidas en la fecha nueva. Para comprobar que la fecha de una Factura es diferente a la fecha de la Factura anterior, cada Fecha de Factura deberá estar registrada dentro de su respectiva variable. Cuando la búsqueda se tope con la siguiente Factura, se realizará la comparación de su fecha con la fecha de la variable (es decir, la fecha de la Factura anterior). Después de esto, el próximo paso consiste en declarar la variable de la fecha al comienzo del informe.

  3. En el anterior ejemplo de una Lista de Contactos, el informe corría una búsqueda de Clientes en el registro Contactos y para cada Cliente se buscaban las Facturas – en el registro Facturas – emitidas para ese Cliente. La búsqueda de Factura se efectuó una vez para cada Cliente. En la presente Lista de Facturas, el informe correrá una búsqueda sobre el registro Facturas y cuando se tope con una Factura cuya fecha es diferente a la fecha de la Factura previa, deberá por ende efectuarse una búsqueda en el registro secundario (que es también el registro Facturas) en función a Facturas emitidas en la fecha nueva. En otras palabras, a diferencia de la Lista de Contactos, no deseamos exigirle al sistema una búsqueda de cada registro individual en el registro primario, solo necesitamos que la búsqueda se efectúe cuando la fecha cambie. Se requiere de una variable para registrar el hecho de que la fecha ha cambiado y para correr la búsqueda. Si la variable es auténtica, la búsqueda se efectuará exitosamente. Si no lo es, no habrá ninguna búsqueda. Bien, el siguiente paso consiste en declarar la variable al comienzo del informe. La variable en cuestión puede ser de tipo “boolean” (puede contener verdadero o falso) o de tipo “integer” (puede contener 1 o 0).

  4. El siguiente paso es agregar dos franjas de tipo “Code:..” a la sección del registro primario. A la primera franja se le asignará la variable vbChanged configurada en ???falso” cuando el bucle de búsqueda se tope con la siguiente Factura. La segunda franja comparará la Fecha de Factura de tal Factura frente a la fecha de la factura anterior (en la variable vdDate). Si las dos fechas resultan diferentes, la Fecha de Factura será copiada a la variable vdDate que estará lista para la siguiente comparación; y la variable vbChanged será configurada como “verdadero” para disparar la búsqueda en el registro secundario.

  1. Debes especificar que el registro Facturas ha de ser tu registro secundario. Debes además agregar una Condición que estipule que el registro secundario solo será procesado si vbChanged está configurada en “verdadero”.

  2. Agrega una búsqueda en la sección del registro secundario – tal búsqueda debe ser en función a Facturas cuyas Fechas sean igual a vdDate.

    Seguramente, querrás también agregar una búsqueda que omita aquellas Facturas no aprobadas, especialmente si agregaste una búsqueda similar en el registro primario (paso 1).
  1. Dado que el informe es una Lista de Facturas, deberás usar una variable para calcular los subtotales, no así el botón [Total]. Si usas el botón [Total], las Notas de Crédito serán agregadas al valor facturado de una jornada cuando en realidad deberían ser restadas. Haz el procedimiento normal para declarar la variable al comienzo del informe y agrega el código al las secciones del registro primario y secundario para calcular subtotales. Aparte de esto, necesitarás una variable para mostrar el valor por separado de cada Factura si es que quieres mostrar el valor de las Notas de Créditos como cifras negativas:

  1. Pasa a la solapa ‘Diseño’ para proceder con el diseño de la diagramación del registro secundario (según tus requerimientos).

  1. Este es el resultado:

Por favor, haz clic en los siguientes subtítulos para ver la descripción detallada sobre: