2.8.Creando una agrupación por columna.

Para el siguiente informe realizaremos una agrupación por columna.
Lo que vamos hacer es que el informe nos muestre el importe total de las facturas por meses y cada mes representará una columna en nuestro informe.

Vamos a seguir en este post con los objetos creados anteriormente.

Empezaremos creando en nuestra tabla temporal CustInvoiceJourReportTmp dos campos:

1.-MonthName de tipo string: podemos utilizar el extended Monthyear.
2.-Month de tipo integer: podemos crear el campo directamente en la tabla.

Esto nos permitirá guardar el nombre del mes y su valor numérico.


Modificaremos el método processReport para agregar los nuevos campos.


[SysEntryPointAttribute]
Public void processReport()
{
     CustInvoiceJourReportContract contract = this.parmDataContract() as CustInvoicejourReportContract;
     QueryRun                                   qr = new QueryRun(this.parmQuery()); 
     QueryBuildDataSource              qbds;
     CustInvoiceJour                         custInvoiceJour;
     
     FromDate                                   fromDate;
     ToDate                                       toDate;
     ;
 
     fromDate  = contract.parmFromDate();
     toDate       = contract.parmToDate();
 
     qbds = qr.query().dataSourceTable(tablenum(CustinvoiceJour));
     qbds.addRange(fieldnum(CustinvoiceJour, invoiceDate)).value(queryRange(fromDate, toDate));
 
     While (qr.next())
     {
             custInvoiceJour = qr.get(tablenum(CustInvoiceJour));

 tmp.clear();
             tmp.CustGroup          = custInvoiceJour.custGroup;
             tmp.DueDate              = custInvoiceJour.DueDate;
             tmp.invoiceAccount  = custInvoiceJour.invoiceAccount;
             tmp.InvoiceDate        = custInvoiceJour.invoiceDate;
             tmp.InvoiceId             = custInvoiceJour.InvoiceId;
             tmp.salesId                 = custInvoicejour.salesId;
             tmp.invoiceAmount   = custInvoicejour.invoiceAmount;

             switch(mthOfYr(CustInvoiceJour.InvoiceDate))
            {
                   case 1:
                          tmp.Months           = 1;
                          tmp.MonthOfYear = MonthOfyear::January:
                          break;
                  case 2:
                          tmp.Months           = 2;
                          tmp.MonthOfYear = MonthOfyear::February:
                          break;
                  case 3:
                          tmp.Months           = 3;
                          tmp.MonthOfYear = MonthOfyear::March:
                          break;
                  case 4:
                          tmp.Months           = 4;
                          tmp.MonthOfYear = MonthOfyear::April:
                          break;
                  case 5:
                          tmp.Months           = 5;
                          tmp.MonthOfYear = MonthOfyear::May:
                          break;
                  case 6:
                          tmp.Months           = 6;
                          tmp.MonthOfYear = MonthOfyear::June:
                          break;
                  case 7:
                          tmp.Months           = 7;
                          tmp.MonthOfYear = MonthOfyear::July:
                          break;
                  case 8:
                          tmp.Months           = 8;
                          tmp.MonthOfYear = MonthOfyear::August:
                          break;
                 case 9:
                          tmp.Months           = 9;
                          tmp.MonthOfYear = MonthOfyear::September:
                          break;
                case 10:
                          tmp.Months           = 10;
                          tmp.MonthOfYear = MonthOfyear::October:
                          break;
                case 11:
                          tmp.Months           = 11;
                          tmp.MonthOfYear = MonthOfyear::November:
                          break;
                case 12:
                          tmp.Months           = 12;
                          tmp.MonthOfYear = MonthOfyear::December:
                          break;
             }

             tmp.insert()
    }
}


Una vez realizados los cambios en la clase , haremos una compilación CIL y en el informe agregaremos los nuevos campos al DataSet.


Info:
Agregar los nuevos campos al dataSet:


Vamos a por nuestro diseño.

Agregaremos una matriz al diseño en blanco.

 
Vamos a indicarle a la matriz el dataset.
 

 

Necesitaremos realizar dos agrupaciones, ya que lo que se quiere conseguir es que me muestre para cada cliente, el importe de las facturas por meses.

Crearemos una agrupación por filas agrupando por la cuenta de facturación.
Para esto lo podemos hacer:

En la parte inferior en los grupos

 
O directamente desde la matriz.
 
 
Agruparemos por invoiceAccount
 
 
 

Ahora agregaremos un grupo para las columnas.


Agruparemos por el campo meses
 
 


Acabaremos de rellenar la matriz con los siguientes campos




Borraremos el texto Group1

 


 
Pondremos en negrita el campo meses del año.
 
 
Hacemos un "Preview" para ver como va quedando.
 
 
De momento estéticamente no es muy bonito, pero cumple su objetivo.
A la izquierda podemos ver los clientes y una columna por cada mes.
Si os fijáis faltan meses,eso es debido a que no existe facturación para ningún cliente en estos meses.
Si lo quisiéramos resolver nos tocaria insertar como minimo un registro para cada mes ,aunque estuviera vacío.

En el informe se puede ver que encima de cada mes está su representación númerica. Éste es el verdadero campo de la agrupación.
Como no queda estético lo borraremos.

 
Al eliminar la fila nos pregunta que deseamos eliminar. Le debemos indicar eliminar sólo filas.
Si marcáramos el primer "check" nos borraría también la agrupación creada.
 
 
El siguiente paso será añadir una columa que nos sume el importe de todos los meses por proveedor.
Para ello, agregaremos una columna a la derecha fuera del grupo.
 
Esto es así porque si la ponemos dentro del grupo se imprimirá a la vez que este. Lo que nosotros queremos que cuando se haya imprimido todo el grupo, se imprima nuestra columna.
 
 
Cuando creáis esta columna aseguraros que está fuera de cualquier grupo. Si os fijáis en ésta imagen, la nueva columna está dentro de un grupo, si es necesario agregad otra columna a la derecha y borrad la que está agrupada.
 
Seleccionaremos el campo importe para esta columna

 
 
Se puede ver como automáticamente visual le indica que será un sumatorio.
Esto es debido a que se encuentra en una agrupación por cuenta de facturación.
 
 
 
Si ahora lanzamos nuestro informe podemos ver como nos ha agregado el sumatorio.
 
Para finalizar, colocaremos unos sumatorios por meses y total.
Esto no lo explico pero con la imagen y lo enseñado no deberíais tener dificultades en hacerlo.

 
Y así es como quedará nuestro diseño.
 

 
Al finalizar este post ya deberíais poder entender el funcionamiento de las agrupaciones por filas/columnas en los informes de visual.
 







Comentarios