Suma condicional de columnas de un grid

Hola, tengo un formulario en el cual hay un grid el cual tiene las columnas: Producto, Cantidad, Precio, Activo (es una Casilla de Verificación) y Total (cantidad*precio). Lo que deseo es... En un cuadro de texto (Subtotal) poner la sumatoria de todos los productos que tengan el visto en la Casilla de Verificación en la columna Activo. En otro cuadro de texto (Noactivos), sumar los que no estén activos. Y un ultimo cuadro de texto que haga la resta. Subtotal-Noactivos.
Desde ya muchas gracias por su ayuda

1 respuesta

Respuesta
1
Espero poder ayudarte
Para mi, lo mejor es no sumar directamente los valores de los registros de la tabla que esta debajo del grid, porque se mueve el puntero.. ¿entendés?
Yo haria asi..
Suponete que la tabla o cursor que esta debajo del grid se llama miTabla:
Dimen mTotales(1,2)
mTotales=0
Sele sum(iif(activo, round(cantidad*precio, 2), 0)), sum(iif(activo, 0, round(cantidad*precio, 2))) from miTabla into array mTotales
Ahora, veo que hay un error..
En realidad vos decís que en el tercer textbox debería ser subtotal-noactivos..
Y a mi me parece que no debería ser así.. fíjate
Cantidad por precio de los activos=1000
Cantidad por precio de lo no activos: 300
Tercer textBox=700
A mi me parece que es:
Tercer textBox=1300 (porque creo que vos quieres discriminar los activos, los no activos del total)
O puede ser también..
Total de todo: 1300
Total no activo: 300
Tercer textbox=1000 (ahí si resta) pero en la primera son todos, no los activos..
Por las dudas yo en el select hice todos los activos y por otro lado los no activos, vos con esos dos datos haces como quieras en los textBox..
Entonces dijimos:
Dimen mTotales(1,2)
mTotales=0
sele sum(iif(activo,round(cantidad*precio,2),0)), sum(iif(activo,0,round(cantidad*precio,2))) from miTabla into array mTotales
thisform.textBox1=mTotales(1,1)
thisform.textBox2=mTotales(1,2)
thisform.textBox3=mTotales(1,2)+mTotales(1,2)
Este codigo lo podes poner en un procedimiento "calcula" por ejemplo y llamarlo desde los valid de los controles dentro de las columnas..
Bueno, espero que te haya sido de utilidad la respuesta y cualquier cosa estoy a tu disposición..
Si te parece bien, cerra y califica la respuesta.. muchas gracias
Keystone - Christian
www.keystone.com.ar
Perdon. me falto el value en todos los textbox..
thisform.textBox1.VALUE=mTotales(1,1)
Gracias keystonesys por tu ayuda, y disculpa mi ignorancia, pero soy muy novato y quiero preguntarte lo siguiente:
1.- ¿En el evento valid de las columnas creo un procedure calcula y pongo todo el código que me diste?.
2.- Si es así... yo puse esto en el evento Valid.
DO calcula
PROCEDURE calcula
dimen mTotales(1,2)
mTotales=0
sele sum(iif(activo,round(cantidad*precio,2),0)), sum(iif(activo,0,round(cantidad*precio,2))) from miTabla into array mTotales
thisform.txtSubtotal.Value = mTotales(1,1)
thisform.txtTcero.Value = mTotales(1,2)
thisform.txtTotal.Value = mTotales(1,2)+ mTotales(1,2)
ENDPROC
y me sale este error: Methods and events cannot contain nested procedures or class definitions.
A que se debe eso, ¿o qué es lo que estoy haciendo mal?
No
En el formulario, crear un método (se hace en el menu form, new metod) y le pones de nombre "calcula" y el código que te pasé, fíjate que el método ese esta al final de los métodos del formulario..
En el valid de los controles de la columna, no en la columna porque no tiene..
Grid
Column
TextBox o CheckBox (aca)
Pones thisform. Calcula()
Eso es..
Keystone - Christian
www.keystone.com.ar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas