Page 1 of 1

Footer xBrowse

Posted: 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

Posted: Tue Jan 21, 2014 4:32 pm
by El Loco
Paco en la versión de septiembre http://forums.fivetechsupport.com/viewt ... on#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

#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

Posted: Tue Jan 21, 2014 9:24 pm
by cnavarro

Code: Select all

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

Posted: 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

Posted: 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

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

Posted: 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

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

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

aDato[oBrw:nArrayAt][3] = ../...
 
Por ejemplo para referirnos a la posicion 3 del array, ¿que opinas?

Re: Footer xBrowse

Posted: 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

Posted: 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

Posted: 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

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

Posted: 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

Posted: 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

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

#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)

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

Gracias por su ayuda.
:)
Saludos