Page 1 of 1

Footer xBrowse

PostPosted: Tue Jan 21, 2014 4:15 pm
by Francisco Horta
Hola foro,

Quiero usar AGGR_COUNT para totalizar conteo en el footer de un xbrowse conforme al valor en mi arreglo, pero no doy como totalizar,
agrego una imagen de como quiero que quede, necesito contar unicamente las celdas con valor 1,2 y 4 y poder mostrar en el footer,
agrego una imagen de como quiero que sea,

http://www.subirimagenes.net/i/140121051741111303.jpg

Image
gracias
saludos

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 4:32 pm
by El Loco
Paco en la versión de septiembre viewtopic.php?f=16&t=22483&p=119856&hilit=bSumCondition#p119856 se agrego una nueva data "bSumCondition", me parece que por ahi van los tiros.
Trate de hacerlo funcionar pero me tira error.
Esto es lo que tengo hasta ahora:
Code: Select all  Expand view

#include "FiveWin.ch"
#include "xbrowse.ch"

function main()

   local oDlg, oBrw, oFont, oBold
   local aDato := {}
   local aHead := {"" ,"Dia 1","Dia 2","Dia 3","Dia 4","Dia 5","Dia 6","Dia 7" }

   aDato:= { { "algo 1", 0 , 2 , 1 , 2 , 0 , 2 , 2 },;
             { "algo 2", 0 , 1 , 4 , 1 , 1 , 0 , 2 },;
             { "algo 3", 1 , 0 , 0 , 3 , 1 , 4 , 1 },;
             { "algo 4", 2 , 0 , 2 , 0 , 3 , 0 , 3 },;
             { "algo 5", 1 , 2 , 1 , 2 , 0 , 1 , 0 },;
             { "algo 6", 0 , 1 , 0 , 0 , 0 , 0 , 0 },;
             { "algo 7", 0 , 0 , 0 , 0 , 0 , 0 , 4 } }
             
   DEFINE FONT oFont NAME 'TAHOMA' SIZE 0,-12
   DEFINE FONT oBold NAME 'TAHOMA' SIZE 0,-12 BOLD
   
   DEFINE DIALOG oDlg SIZE 400,300 PIXEL FONT oFont ;
      TITLE 'Demo para Paco'

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      AUTOCOLS ;
      HEADERS " " , "Dia 1","Dia 2","Dia 3","Dia 4","Dia 5","Dia 6","Dia 7" ;
      ARRAY aDato CELL LINES NOBORDER FASTEDIT FOOTERS

   oBrw:SetArray(aDato)
   
   AEval( oBrw:aCols, { |o| o:cEditPicture := '99', ;
                            o:nFooterType := AGGR_COUNT ,;
                            o:bSumCondition := {|| If(aDato[oBrw:aCols] == 1 .or. aDato[oBrw:aCols] == 2 .or. aDato[oBrw:aCols] == 4 , (oBrw:MakeTotals(),oBrw:RefreshFooters()) , ) } }, 2 )

   oBrw:MakeTotals()
   oBrw:CreateFromCode()
   
   ACTIVATE DIALOG oDlg CENTERED

return nil

 

Algo estoy haciendo mal pero todavía no lo registro.
Sigo intentando.

Abrazo.
Miguel

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 9:24 pm
by cnavarro
Code: Select all  Expand view

o:bSumCondition := {|| If(aDato[oBrw:aCols] == 1 .or. aDato[oBrw:aCols] == 2 .or. aDato[oBrw:aCols] == 4
 

Creo que oBrw:aCols -> devuelve un tipo Array. No se si es correcto utilizarlo como indice de una tabla -> aDato[oBrw:aCols]
A primera vista es lo que me ha parecido

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 9:35 pm
by Francisco Horta
Miguel,

Este sistema es un poco viejo y lo compilo con 11.08, voy a actualizarlo para probar con una version mas nueva, pero por lo pronto, seguire haciendo otras pruebas.
Lo mas facil es crear un segundo arreglo con la condicion del primer arreglo y ponerlo en el cFooter, pero el caso es que utilizo un timer y cada minuto actualizo el array con los valors y estos pueden estar cambiando, ypense que seria menos codigo y mas rapido evaluar cada columna y que totalizara el xbrowse directamente sin tener que hacer yo la actualizacion del segundo arreglo y volver a cargar.
Seguire dandole.
Gracias Carlos y Miguel
Saludos

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 9:43 pm
by El Loco
Si es verdad Cristobal, pero publique la ultima de las mil pruebas que hice.
Probé
Code: Select all  Expand view
o:bSumCondition := {|| If(aDato[oBrw:nArrayAt] == 1 .or. aDato[oBrw:nArrayAt] == 2 .or. aDato[oBrw:nArrayAt] == 4
 


y tampoco.
Para colmo no existe ningún ejemplo ni en el foro ni en Samples de Fivewin.
Igual sigo insistiendo, tiene que funcionar de alguna manera.

Gracias.
Abrazo.,
Miguel

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 10:02 pm
by cnavarro
El Loco wrote:Si es verdad Cristobal, pero publique la ultima de las mil pruebas que hice.
Probé
Code: Select all  Expand view
o:bSumCondition := {|| If(aDato[oBrw:nArrayAt] == 1 .or. aDato[oBrw:nArrayAt] == 2 .or. aDato[oBrw:nArrayAt] == 4
 


y tampoco.
Para colmo no existe ningún ejemplo ni en el foro ni en Samples de Fivewin.
Igual sigo insistiendo, tiene que funcionar de alguna manera.

Gracias.
Abrazo.,
Miguel


Miguel
Creo que un problema lo puedes tener en
Code: Select all  Expand view

aDato[oBrw:nArrayAt] ==   .../...
 

Creo que es un array de dos dimensiones y solo hacer referencia al registro (posicion de aDatos) que es otro array
Deberia ser, quizas, algo asi
Code: Select all  Expand view

aDato[oBrw:nArrayAt][3] = ../...
 

Por ejemplo para referirnos a la posicion 3 del array, ¿que opinas?

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 10:41 pm
by Francisco Horta
Cristobal,

creo que por ahi van los tiros, es un arreglo multi y habira que calcular con el narratat la posicion de cada row del arreglo
algo asi como : oBrw[nArrayAt,nCol] == 1 ....
Saludos
p.d. y perdon por lo de carlos, eres cristobal. se me chispotio.. jiji

Re: Footer xBrowse

PostPosted: Tue Jan 21, 2014 11:29 pm
by El Loco
Tenes razón Cristobal, que gil que soy.
Igualmente hay algo más que no engancho.

Sigo transpirando :oops:
Abrazos

Re: Footer xBrowse

PostPosted: Wed Jan 22, 2014 1:38 am
by cnavarro
Miguel, hay que tener en cuenta que al evaluar el codeblock, el primer parámetro es el valor y el segundo la columna
DATA bSumCondition // Maketotals aggregates if this condition is true, if codeblock is specified
// evaluated with uValue, oCol as parameters

quizás algo asi funcione (no lo he probado)
Code: Select all  Expand view

o:bSumCondition := {|uVal, oCol| If( uVal == 1 .or. uVal == 2 .or. uVal == 4    .../...
 

Es una idea, a ver si te puede servir

Re: Footer xBrowse

PostPosted: Wed Jan 22, 2014 1:43 am
by cnavarro
Francisco Horta wrote:Cristobal,

creo que por ahi van los tiros, es un arreglo multi y habira que calcular con el narratat la posicion de cada row del arreglo
algo asi como : oBrw[nArrayAt,nCol] == 1 ....
Saludos
p.d. y perdon por lo de carlos, eres cristobal. se me chispotio.. jiji


Francisco
No se si te he entendido bien, pero creo que no hace falta lo que comentas ya que el codeblock es una DATA de :aCols[ n ] en el que se desea obtener el total por lo que al evaluar el codeblock ya pasa la el objeto columna como 2 parametro y el valor de la posicion en el que se encuentra al recorrer el browse como 1 parametro.
Espero haberme explicado

Re: Footer xBrowse

PostPosted: Wed Jan 22, 2014 5:14 am
by El Loco
cnavarro wrote:Miguel, hay que tener en cuenta que al evaluar el codeblock, el primer parámetro es el valor y el segundo la columna
DATA bSumCondition // Maketotals aggregates if this condition is true, if codeblock is specified
// evaluated with uValue, oCol as parameters

quizás algo asi funcione (no lo he probado)
Code: Select all  Expand view

o:bSumCondition := {|uVal, oCol| If( uVal == 1 .or. uVal == 2 .or. uVal == 4    .../...
 

Es una idea, a ver si te puede servir


Troesma Cristobal, funciona perfecto !!!
Si bien no era para mi sino para ayudar a Paco, me viene bien porque aprendi algo más. Gracias

Adjunto el ejemplo funcionando:

Code: Select all  Expand view

#include "FiveWin.ch"
#include "xbrowse.ch"

function main()

   local oDlg, oBrw, oFont, oBold
   local aDato := {}
   local aHead := {"" ,"Dia 1","Dia 2","Dia 3","Dia 4","Dia 5","Dia 6","Dia 7" }

   aDato:= { { "algo 1", 0 , 2 , 1 , 2 , 0 , 2 , 2 },;
             { "algo 2", 0 , 1 , 4 , 1 , 1 , 0 , 2 },;
             { "algo 3", 1 , 0 , 0 , 3 , 1 , 4 , 1 },;
             { "algo 4", 2 , 0 , 2 , 0 , 3 , 0 , 3 },;
             { "algo 5", 1 , 2 , 1 , 2 , 0 , 1 , 0 },;
             { "algo 6", 0 , 1 , 0 , 0 , 0 , 0 , 0 },;
             { "algo 7", 0 , 0 , 0 , 0 , 0 , 0 , 4 } }
             
   DEFINE FONT oFont NAME 'TAHOMA' SIZE 0,-12
   DEFINE FONT oBold NAME 'TAHOMA' SIZE 0,-12 BOLD
   
   DEFINE DIALOG oDlg SIZE 400,300 PIXEL FONT oFont ;
      TITLE 'Demo para Paco'

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      AUTOCOLS ;
      HEADERS " " , "Dia 1","Dia 2","Dia 3","Dia 4","Dia 5","Dia 6","Dia 7" ;
      ARRAY aDato CELL LINES NOBORDER FASTEDIT FOOTERS

   oBrw:SetArray(aDato)

   AEval( oBrw:aCols, { |o| o:cEditPicture := '99', ;
                            o:nFooterType := AGGR_COUNT ,; //AGGR_SUM  ,;
                            o:bSumCondition := {|uVal, oCol| If( uVal == 1 .or. uVal == 2 .or. uVal == 4 , .t. , .f. ) } }, 2 )

   oBrw:MakeTotals()
   oBrw:CreateFromCode()
   
   ACTIVATE DIALOG oDlg CENTERED //On Init gBrowse(oBrw:aArrayData)

return nil

 


Un gran abrazo.
Miguel

Re: Footer xBrowse (solucionado)

PostPosted: Wed Jan 22, 2014 7:19 pm
by Francisco Horta
Miguel y Cristobal,

Gracias por su ayuda.
:)
Saludos