Page 1 of 1

Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 3:18 am
by remtec
Amigos, Muy buenas noches.

Tengo un Problema con el PICTURE del Totalizador de Xbrowse.

Aun cuento uso :cFooterPicture := "9,999,999", para que me separe los miles, el resultado se escribe como Ejemplo 1520.0 cuando debiera mostrar 1,520.



Lo extraño es que si salgo del xbrowse y vuelvo a ingresar con un dato en el Array, ahora si muestra con el PICTURE correcto, de lo contrario puedo seguir agregando filas al Array y se mantiene el formato 1520.0.

Le he dado muchas vueltas a este problema y no logro dar con la solucion.

Desde ya muchas gracias

Saludos
Antonio.

Dejo parte del código:

Code: Select all

   REDEFINE XBROWSE oBrw2  ID 4005 OF oDlg33 DATASOURCE aCodigos FONT oFont2;
                        HEADERS 'Codigo','Nombre del Examen','Canti','Precio','Total';
                      COLUMNS 1, 2,3,4,5;
                        COLSIZES 70, 280, 50, 65, 80;
                        PICTURES '@!','@!','9999','9,999,999','9,999,999';
                                        CELL LINES AUTOSORT NOBORDER;

                                 oBrw2:nMarqueeStyle := MARQSTYLE_HIGHLROW
                                 oBrw2:nColDividerStyle := LINESTYLE_RAISED
                                 oBrw2:nRowDividerStyle := LINESTYLE_RAISED
                                
                                 oBrw2:nFooterLines:=1
                                 

                                 oBrw2:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
                                 
                                 oBrw2:bClrStd  := { || If( Eval( oBrw2:bKeyNo,,oBrw2) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                 { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra

                                 oBrw2:nOpacity    := 230
                                 oBrw2:nHeaderHeight      := 35
                                 oBrw2:nFreeze       := 2

                                 oBrw2:aCols[ 1 ]:oDataFont := oFont7

                                 oBrw2:aCols[2]:cFooter := "TOTAL  -->"
                                                oBrw2:aCols[2]:nFootStrAlign := AL_RIGHT

                                oBrw2:lAutoSort := .t.
                                oBrw2:lFooter := .T.
                                oBrw2:lHScroll := .f.
                                oBrw2:SetStyle( 2007)
                                oBrw2:nColorPen := CLR_RED
                                oBrw2:bChange := {|| oBrw2:Refresh() }

                                 oBrw2:aCols[03]:cEditPicture    := "999"
                                 oBrw2:aCols[03]:nFooterType := AGGR_SUM

                                 oBrw2:aCols[01]:bFooter   := { || Ltrim( Str( oBrw2:KeyNo() ) ) + " / " + LTrim( Str( oBrw2:KeyCount() ) ) }


                                oBrw2:aCols[05]:cFooterPicture := "9,999,999"        //  <--- Este formato  no lo considera, cuando arreglo ingresa sin datos
                                oBrw2:aCols[05]:nFooterType    := AGGR_TOTAL
                                oBrw2:bChange := {|| oBrw2:Maketotals() }
                                oBrw2:MakeTotals()

                        WITH OBJECT oBrw2:aCols[3]                     // <----- Modifico Columna Cantidad
                                     :cEditPicture  := "9,999,999"
                                      :nEditType     := EDIT_GET
                                       :bEditValid    := { |oGet| oGet:VarGet() > 0 }
                                       :bOnPostEdit   := { | oCol, xVal, nKey | If( nKey == VK_RETURN ,;
                                                                      ( oCol:value := xVal ,;
                                                                      totalinea( oBrw2,@Can_Cod1,@Val_Tot1), oBrw2:MakeTotals(), oBrw2:Refresh()), ) }

                        END WITH


 

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 4:34 am
by joseluisysturiz
Saludos, intenta anteponiendo entre las comillas a el primer 9, @E o @Z, seria algo asi "@E 999,999,999", eso deberia darte 999.999.999 y para decimales separa con punto "@E 999,999,999.99" para 999.999.999,99, por lo menos a mi me funciona asi...gracias... :shock:

Post-data: creo que hay algo en el xbrowse de SetPicture o algo asi, imagino para que todos ya salgan como quieras y no debas hacerlo uno por uno...gracias... :shock:

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 3:37 pm
by remtec
Hola Jose Luis

Muchas gracias por responder.

Lamentablemente ninguna de las sugerencias funciona.

Explico Total en Footer:
1. Cuando entro a Xbrowse con uno o mas elementos en el Array del, Funciona Perfecto.

2. Cuando Entra Vacio, muestra el Picture 0.0 , aunque comience a agregar elementos a esta Array, Xbrowse sigue mostrando el mismo formato, 1520.0

3. Cuando tengo el caso 2 con elementos en el Array, salgo del Xbrowse y vuelvo a ingresar, en este caso, el punto 2, ya se muestra como 1.520, sin haber ingresado mas elementos al Array.

Sera un Error que yo cometo o sera Error de Xbrowse?

Uso FWH 17.09 y HARBOUR.

En espera de sus comentarios, les saluda.

Antonio.

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 6:13 pm
by FranciscoA
Hola Antonio. Prueba el siguiente codigo y nos dices. ( Uso FW1204 )

Code: Select all

FUNCTION XBrwArrVacio()
local oDlg1, oBrw1, oCodi, cCodi:=Space(7), oFont1,oFont2,oFont3, oBt1, oSay
local aDatos := {space(10), 0}
local aArrData :=  { { " ", " ", 0, 0, 0 } }
local aRow := { " ", " ", 0, 0, 0 }, nCanti := 2

local bAddItem := ;
     {|| aRow := { cCodi, aDatos[1], nCanti, aDatos[2], nCanti * aDatos[2] } ,;
         AAdd( oBrw1:aArrayData, aRow ), oBrw1:Refresh() ,; 
         oBrw1:MakeTotals() ,;
         aDatos := {space(10), 0} ,;
         aRow := { " ", " ", 0, 0, 0 } ,;
         cCodi := Space(7), oCodi:Refresh(), oCodi:SetFocus() ;
     }


   DEFINE FONT oFont1 NAME "ARIAL" SIZE 0,-12
   DEFINE FONT oFont2 NAME "ARIAL" SIZE 0,-12
   DEFINE FONT oFont3 NAME "ARIAL" SIZE 0,-12

   DEFINE DIALOG oDlg1 SIZE 800,400 PIXEL TITLE "PROBANDO BRW/ARR VACIO"

    @ 20,10 SAY oSay PROMPT "Introduzca Codigo" SIZE 60,20 PIXEL OF oDlg
    @ 20,70 GET oCodi Var cCodi  SIZE 50,10 PIXEL OF oDlg1 PICTURE "@!" COLOR RGB(0,0,128) FONT oFont2 UPDATE;
            VALID if(!empty(cCodi),;
                     if(!CodigoOK(cCodi,@aDatos),(MsgStop("Codigo digitado no existe"),.F.),;
                        ( Eval(bAddItem), .T. ) ) ,.t.)

    @ 35,10 XBROWSE oBrw1 SIZE -10,-60 PIXEL OF oDlg1 ;
            DATASOURCE aArrData ;
            FONT oFont3 ;
            HEADERS 'Codigo','Descripción','Cantidad','Valor Unit','Valor Total' ;
            COLUMNS 1, 2,3,4,5 ;
            COLSIZES 70, 280, 70, 110, 110 ;
            PICTURES nil,nil,'9999','999,999,999','999,999,999' ;
            CELL LINES FOOTERS NOBORDER 

    WITH OBJECT oBrw1
       :nStretchCol      := STRETCHCOL_WIDEST
       :nMarqueeStyle    := MARQSTYLE_HIGHLWIN7
       :nColDividerStyle := LINESTYLE_INSET
       :nRowDividerStyle := LINESTYLE_INSET
       :bClrHeader       := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
       :bClrStd          := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
       :bClrSelFocus     := {|| { nRGB(  255,  255,  255), nRGB(102, 178, 255) } }
       :nFooterLines     := 1

       :aCols[2]:cFooter        := "Total Items --> "
       :aCols[2]:nFootStrAlign  := AL_RIGHT

       :aCols[3]:nFooterType    := AGGR_COUNT
       :aCols[3]:nDataStrAlign  := AL_CENTER
       :aCols[3]:nFootStrAlign  := AL_CENTER

       :aCols[4]:cFooter        := "Total Ingresos --> "
       :aCols[4]:nFootStrAlign  := AL_RIGHT

       :aCols[05]:nFooterType   := AGGR_TOTAL  

       :MakeTotals()
       :CreateFromCode()
   END

   @ 160,300 BTNBMP oBt1 SIZE 60, 20 PROMPT "Salir" OF oDlg1 PIXEL 2007 FONT oFont2 ;
             ACTION oDlg1:End() ;
             ToolTip "Salir del sistema"
   oBt1:lCancel := .t. 
   
   ACTIVATE DIALOG oDlg1 CENTERED ;
            ON INIT ( oCodi:SetFocus(), aSize(aArrData,0), oBrw1:Refresh() ) 

   oFont1:End()
   oFont2:End()
   oFont3:End()
   RETURN NIL
 
   //----------------------------------------------------//
   function CodigoOK(cCod, aDatos)
   local n, aCodi := {  { "000001 ","CODIGO1", 100 },;
                        { "000002 ","CODIGO2", 200 },;
                        { "000003 ","CODIGO3", 300 },;
                        { "000004 ","CODIGO4", 400 },;
                        { "000005 ","CODIGO5", 500 } ;
                     }
   if ( n := Ascan( aCodi, {|a| a[1] == cCod} ) ) == 0
      return .f.
   else
      aDatos := {aCodi[n,2], aCodi[n,3]}
   endif
   return .t.
 
Saludos.

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 6:28 pm
by armando.lagunas

Code: Select all

oBrw:aCols[ x ]:cEditPicture  :=  "@E ###,###.##"
donde "x" es el numero de columna numerica

Saludos

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 9:18 pm
by remtec
armando.lagunas wrote:

Code: Select all

oBrw:aCols[ x ]:cEditPicture  :=  "@E ###,###.##"
donde "x" es el numero de columna numerica

Saludos
Hola Armando

Muchas gracias por responder.

Ya había probado tu sugerencia y no funciono.

Muy agradecido por responder.

Saludos
Antonio

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 9:24 pm
by remtec
FranciscoA wrote:Hola Antonio. Prueba el siguiente codigo y nos dices. ( Uso FW1204 )

Code: Select all

FUNCTION XBrwArrVacio()
local oDlg1, oBrw1, oCodi, cCodi:=Space(7), oFont1,oFont2,oFont3, oBt1, oSay
local aDatos := {space(10), 0}
local aArrData :=  { { " ", " ", 0, 0, 0 } }
local aRow := { " ", " ", 0, 0, 0 }, nCanti := 2

local bAddItem := ;
     {|| aRow := { cCodi, aDatos[1], nCanti, aDatos[2], nCanti * aDatos[2] } ,;
         AAdd( oBrw1:aArrayData, aRow ), oBrw1:Refresh() ,; 
         oBrw1:MakeTotals() ,;
         aDatos := {space(10), 0} ,;
         aRow := { " ", " ", 0, 0, 0 } ,;
         cCodi := Space(7), oCodi:Refresh(), oCodi:SetFocus() ;
     }


   DEFINE FONT oFont1 NAME "ARIAL" SIZE 0,-12
   DEFINE FONT oFont2 NAME "ARIAL" SIZE 0,-12
   DEFINE FONT oFont3 NAME "ARIAL" SIZE 0,-12

   DEFINE DIALOG oDlg1 SIZE 800,400 PIXEL TITLE "PROBANDO BRW/ARR VACIO"

    @ 20,10 SAY oSay PROMPT "Introduzca Codigo" SIZE 60,20 PIXEL OF oDlg
    @ 20,70 GET oCodi Var cCodi  SIZE 50,10 PIXEL OF oDlg1 PICTURE "@!" COLOR RGB(0,0,128) FONT oFont2 UPDATE;
            VALID if(!empty(cCodi),;
                     if(!CodigoOK(cCodi,@aDatos),(MsgStop("Codigo digitado no existe"),.F.),;
                        ( Eval(bAddItem), .T. ) ) ,.t.)

    @ 35,10 XBROWSE oBrw1 SIZE -10,-60 PIXEL OF oDlg1 ;
            DATASOURCE aArrData ;
            FONT oFont3 ;
            HEADERS 'Codigo','Descripción','Cantidad','Valor Unit','Valor Total' ;
            COLUMNS 1, 2,3,4,5 ;
            COLSIZES 70, 280, 70, 110, 110 ;
            PICTURES nil,nil,'9999','999,999,999','999,999,999' ;
            CELL LINES FOOTERS NOBORDER 

    WITH OBJECT oBrw1
       :nStretchCol      := STRETCHCOL_WIDEST
       :nMarqueeStyle    := MARQSTYLE_HIGHLWIN7
       :nColDividerStyle := LINESTYLE_INSET
       :nRowDividerStyle := LINESTYLE_INSET
       :bClrHeader       := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
       :bClrStd          := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
       :bClrSelFocus     := {|| { nRGB(  255,  255,  255), nRGB(102, 178, 255) } }
       :nFooterLines     := 1

       :aCols[2]:cFooter        := "Total Items --> "
       :aCols[2]:nFootStrAlign  := AL_RIGHT

       :aCols[3]:nFooterType    := AGGR_COUNT
       :aCols[3]:nDataStrAlign  := AL_CENTER
       :aCols[3]:nFootStrAlign  := AL_CENTER

       :aCols[4]:cFooter        := "Total Ingresos --> "
       :aCols[4]:nFootStrAlign  := AL_RIGHT

       :aCols[05]:nFooterType   := AGGR_TOTAL  

       :MakeTotals()
       :CreateFromCode()
   END

   @ 160,300 BTNBMP oBt1 SIZE 60, 20 PROMPT "Salir" OF oDlg1 PIXEL 2007 FONT oFont2 ;
             ACTION oDlg1:End() ;
             ToolTip "Salir del sistema"
   oBt1:lCancel := .t. 
   
   ACTIVATE DIALOG oDlg1 CENTERED ;
            ON INIT ( oCodi:SetFocus(), aSize(aArrData,0), oBrw1:Refresh() ) 

   oFont1:End()
   oFont2:End()
   oFont3:End()
   RETURN NIL
 
   //----------------------------------------------------//
   function CodigoOK(cCod, aDatos)
   local n, aCodi := {  { "000001 ","CODIGO1", 100 },;
                        { "000002 ","CODIGO2", 200 },;
                        { "000003 ","CODIGO3", 300 },;
                        { "000004 ","CODIGO4", 400 },;
                        { "000005 ","CODIGO5", 500 } ;
                     }
   if ( n := Ascan( aCodi, {|a| a[1] == cCod} ) ) == 0
      return .f.
   else
      aDatos := {aCodi[n,2], aCodi[n,3]}
   endif
   return .t.
 
Saludos.
Hola Francisco

Muchas gracias por estar siempre dispuesto a ayudarme y por tomarte el tiempo de prepararme este codigo de ejemplo.

Probe tu ejemplo, funciona muy bien, tome algunas lineas de el y lo aplique a mi código, Claro que ahora al volver desde donde lo llamo, pierde los datos.

Muchas gracias por todo.

Saludos
Antonio

Mira viendo tu

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Thu Nov 07, 2019 10:57 pm
by FranciscoA
Probe tu ejemplo, funciona muy bien, tome algunas lineas de el y lo aplique a mi código, Claro que ahora al volver desde donde lo llamo, pierde los datos.
Antonio.
El ejemplo lo hice para probar a presentar el Browse totalmente vacio al entrar. Es decir un array vacio.
Si estas usando la linea del ON INIT, el browse siempre se presentará vacio al inicio.

La parte central del ejemplo es para probar los footers y sus totales. Esta parte es identica a tu codigo, salvo que le he quitado algunas lineas que no son necesarias para que funcione el ejemplo.

Sería bueno que elaboraras un ejemplo auto-contenido que reproduzca el problema, para que podamos compilarlo y poder ayudar con su solucion.
Mira viendo tu
Que quisiste decir con eso...?

Saludos.


Saludos.

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Fri Nov 08, 2019 12:01 am
by remtec
Hola Fracisco

Lo que trate de decir que el código que tu preparaste, funciona muy bien.

En mi aplicaion, al modificar mi codigo con algunas lineas sacadas de tu codigo, funcoonan los picture y totales en Footer.

El Xbrowse usado es alimentados desde otro Xbrowse que tiene el ingreso de codigos digitados y un icono para ir a buscar codigos a otro Xbrowse, que el que tenia el problema del Totalizador, entonces el proceso es que entre ambos Xbrowse tienen un Array aCodigos en comun, el error se presento al retornar al xbrowse de origen, pierdo el contenido del Array, podria pensar que aplique mal la modificacion al codigo.

Pero por apremios de tiempo, he invertido muchas hrs en tratar de solucionar este problema, tome la determinacion de usar Total en Footer y crear una funcion personal que tolaice cantidad y total y lo imprime en una linea destinada para esto, lo bueno ubiese sido poder haber logrado hacerlo de la forma original, pero no pude.

De verdad que te agradezco mucho por tu esfuerzo y como siempre todo el tiempo que inviertes para ayudar a quienes necesitamos de ayuda.

Muchos Saludos.

Antonio.

Re: Consulta Sobre Total en Footer de Xbrowse

Posted: Fri Nov 08, 2019 12:50 am
by FranciscoA
Lo importante es encontrar solución.
Saludos.