Problemas con la grilla

59 views
Skip to first unread message

Rubén Dario Lezcano Salinas

unread,
Mar 24, 2015, 5:40:49 AM3/24/15
to publice...@googlegroups.com
Buenos Días

Tengo un problemita con la grilla; tengo el siguiente código en el AfterRowColChange  

SELECT liquidacion
SUM liquidacion.importepedido TO totalfactura
thisform.text10.Value = totalfactura

Pero me tira al final del registro y si pongo Go TOP  va al primero y cada ves que doy clic en la grilla se queda en el primer registro no me deja recorrer

Por que podría ser?

Si Coloco en al BeforeRowColChange ahí si va bien pero claro tarda en actualizar la caja de texto donde cargo la suma de totalfactura

Un saludos

Fidel Charny

unread,
Mar 24, 2015, 8:32:49 AM3/24/15
to publice...@googlegroups.com
Calculo que el código verdadero no es el que expones. Si fuera el que expones, no veo por qué tiene que estar en AfterRowColChange ya que se ejecutará en cada cambio de columna o fila, arrojando el mismo resultado.

*<AfterRowColChange>

local lnReg
select (this.recordsource)
lnreg=recno(this.recordsource)       && toma número de record
SUM liquidacion.importepedido TO thisform.text10.value
GO lnReg                  && envía el puntero al record original

*</AfterRowColChange>

Rubén Dario Lezcano Salinas

unread,
Mar 24, 2015, 8:35:29 AM3/24/15
to publice...@googlegroups.com
Perfecto Fidel gracias por estar ahí siempre. 

Un saludos
--

Rubén Lezcano

acmc

unread,
Mar 24, 2015, 4:58:37 PM3/24/15
to publice...@googlegroups.com
Pues igual pudiera estar ahí, solo tendrías que controlar que cuando entre por primera vez, guarde el número de factura en una variable y al entrar de nueva si es la misma factura que no ejecute el sum, si es otra factura entonces que si lo ejecute.

Salu2!!

Fidel Charny

unread,
Mar 25, 2015, 7:40:11 AM3/25/15
to publice...@googlegroups.com
amcm:
Fijate que no pone ninguna condición en la instrucción SUM. Por esta sola razón no tiene que estar en el AfterRowColChange.
Si lo que necesitas es el total de una columna, lo tienes que poner en el momento en que generas el cursor y no complicar la interfaz con código que lo único que aporta es ralentizar la navegación.

Rubén Dario Lezcano Salinas

unread,
Mar 25, 2015, 8:20:41 AM3/25/15
to publice...@googlegroups.com
Fidel pero lo que se quiere conseguir es que según se va modificando los precios, se actualice una caja de texto de total, así tipo excel, por eso puse en el After el comando por que al entrar el foco me suma todo y lueog si hay celdas vacías en esa columna y yo lo relleno a mano me va sumando al salir de esa celda y pasar a otra

saludos
--

Rubén Lezcano

Jose Mario

unread,
Mar 25, 2015, 10:07:42 AM3/25/15
to publice...@googlegroups.com
yo lo coloco en en las columnas en donde se modifca el valor del total
por ejemplo
1.- cuando genero el cursor, para llenar el grid
sum temporal.tot TO thisform.txtcargo.value FOR ! DELETED()

2.- cuando modifica un valor que hace cambiar el total
por ejmplo la columna, tres vlaores de columnas de un grid
unidades    valor unidades       totales
  10                  250.00              250.00    esta es solo lectura, el total

unidades: lo que hago es reemplazar 
selec (this.recordsource)
replace next 1 uni with this.value in temporal

valor unidades 250.00
selec (this.recordsource)
replace next 1 vu with this.value in temporal

total=round(temporal.uni*this.value,2)
selec (this.recordsource)
repl next 1 tot with total in temporal
sum temporal.tot TO thisform.txtcargo.value FOR ! DELETED()

total: que es solo lectura
visualiza con lo que llenas en la columna unidades

Fidel Charny

unread,
Mar 25, 2015, 11:02:37 AM3/25/15
to publice...@googlegroups.com
Para eso lo mejor es crear un textbox de clase y luego lo agregas al control grid. Algo más o menos así:
(Adapta el código a tu necesidad. Código gernerado con Foxbin2prg)

*Librería:     "myclass.vcx"
*Clase:        "txtprecio"    

DEFINE CLASS txtprecio AS textbox
     
*< CLASSDATA: Baseclass="textbox" Timestamp="" Scale="Pixels" Uniqueid="" />

   
*<DefinedPropArrayMethod>
       
*p: previus_value
   
*</DefinedPropArrayMethod>

   
Alignment = 3
   
BackStyle = 0
   
BorderStyle = 0
   
FontSize = 8
   
Format = "Z"
   
Height = 23
   
InputMask = "999,999.99"
   
Name = "txtprecio"
    previus_value
= 0
   
Value = 0
   
Width = 100
   
    PROCEDURE
LostFocus
        LOCAL lcProcedure
        IF
this.Value # this.previus_value ;
            AND
!EMPTY(this.Comment)
       
            lcProcedure
=TRIM(this.Comment)
            IF PEMSTATUS
(thisform,lcProcedure,5)
                thisform
.&lcProcedure()
            ENDIF
        ENDIF
       
           
    ENDPROC

    PROCEDURE
When
       
this.previus_value=this.Value
       
    ENDPROC

ENDDEFINE

* Agregando la clase a un control grid
    PROCEDURE get_grid
        LOCAL i
,lnWidth,lnRows
        lnWidth
= 0
        lnRows
= 15
        thisform
.NewObject("grilla","grid")
       
        WITH
this.grilla
           
.top=60
           
.left=3
           
.recordsource="cur_Facture"
           
.deletemark=.f.
           
.columnCount=4
           
.Setall("fontsize",8,"Column")
           
.Setall("Readonly",.t.,"Column")
           
.Setall("Fontsize",8,"Header")
           
.Scrollbars = 2
           
.gridlinecolor=RGB(220,228,224)
            WITH
.columns(1)
               
.ControlSource='cur_Facture.producto'
               
.readonly=.f.
               
.width=200
            ENDWITH
            WITH
.columns(2)
               
.ControlSource='cur_facture.cantidad'
               
.width=80
               
.format="Z"
               
.Inputmask="999,999.99"
               
.readonly=.f.
            ENDWITH
            WITH .columns(3)
               
.ControlSource='cur_facture.precio'
                IF NOT PEMSTATUS
(this.grilla.columns(3),"txtPrecio",5)
                   
.newobject("txtPrecio","txtPrecio","myClass.vcx")
                   
.CurrentControl="txtprecio"
                ENDIF
               
.txtprecio.comment="Get_Sumas"
               
.width=80
               
.format="Z"
               
.Inputmask="999,999.99"
               
.readonly=.f.
            ENDWITH

            WITH
.columns(4)
               
.ControlSource='cur_facture.Importe'
               
.width=80
               
.format="Z"
               
.Inputmask="9,999,999.99"
            ENDWITH    
            FOR i
=1 TO .columnCount
                lnWidth
= lnWidth + .columns(i).width
            NEXT
           
.Width = lnWidth + .columnCount-1 + SYSMETRIC(7) + 1 ;
               
+ IIF(.recordmark,10,0) + 4
               
           
.Height = lnRows * .RowHeight + 2
           
.visible=.t.
           
        ENDWITH
        WITH THIS
           
.TEXT1.WIDTH=80
           
.text1.TOP=.Grilla.top+.grilla.height
           
.text1.Left=lnWidth + .grilla.left ;
               
+ IIF(.grilla.recordmark,10,0) - .text1.Width + 2
        ENDWITH
       
               
    ENDPROC

   
PROCEDURE get_sumas
        LOCAL lnREgis
,lnSuma
        lnSuma
=0
        SELECT cur_Facture
        lnREgis
=RECNO()
        SCAN
            replace importe WITH ROUND
(cantidad * precio , 2)
            lnsuma
= lnSuma + importe
        ENDSCAN
        IF lnREgis
> 0
            GO lnREgis
        ELSE
            GO top
        ENDIF
       
this.text1.Value=lnSuma
       
    ENDPROC
Reply all
Reply to author
Forward
0 new messages