¿Cómo hago el campo saldo?

Tengo el siguiente problema:
El código es este:
if alltr(thisformset.form1.text11.value)=alltr("L") and alltr(thisformset.form1.text12.value)=ALLTR("C02")
thisformset.form1.grdec.recordsourcetype=4
thisformset.form1.grdec.recordsource="select fecha as a,orden as nose,orden,sum(cantidad),ordenes2005.duracion,moti.nombre,precio*cantidad as camponuevo from ordenes2005,moti where (ordenes2005.motivos=moti.motivos) and (ordenes2005.orden like 'L-C02%') group by orden into cursor ordenplease"
DBF("ordenplease")
Se le ordenplease
set filter to
set filter to year(ordenplease.a) = year(date())
thisformset.form1.grdec.refresh
endif
-----------------
Lo que necesito es una columna llamada saldo, donde muestre la resta entre un valor inicial(VI) que variara menos el campo sum(precio*cantidad) y se muestre en la grilla registro por registro, pueden hacer esto, ¿se puede crear un nuevo campo en un cursor? ¿O qué haría?, tiene que verse ene este campo la resta sucesivamente por registro y linea en la grilla
gracias!

3 Respuestas

Respuesta
1
Si es posible,
Puedes crear campos calculados en una sentencia SQL y mostrarlos en una grilla o directamente en la columna de la grilla puedes poner el controlsource de la columna, por ejemplo
Caso 1.
Select Importe1, Importe2, (Importe1-Importe2) as diferencia, Sum(Importe1) as sum1, avg(importe2) as prom from tabla into cursor tmp
Caso 2.
Select Importe1, Importe2 from tabla into cursor temp
sum importe1 to suma
thisform.grid.recordsource = "temp"
thisform.grid.column3.controlsource = "Importe1-Importe2"
thisform.grid.column4.controlsource = "m.suma"
Respuesta
1
¿El valor inicial(VI) donde lo tienes almacenado?
Bueno, a simple vista, me parece que tendrías que armar un segundo cursor con el valor inicial(VI) asociado a tu campo clave y directamente lo incorporas a tu operación de select.
cursor2.inicial-sum(precio*cantidad)
Igualmente, aclarame como lo tienes almacenado, porque no me queda claro, tampoco me queda claro la operación SUM; primero tienes la linea precio*cantidad as camponuevo (en el select) y luego me preguntas, resta entre un valor inicial(VI) que variara menos el campo sum(precio*cantidad) ...
El VI lo tengo almacenado en otra tabla, y varia según la elección de cliente y medio en unos combobox, y el valor inicial sale en una caja de texto.
En el primer cursor tengo los valores a restar, por ejemplo
el VI=108000 U$
En el cursor ordenplease por registro hay un valor sum(cantidad*precio) puesto que son varios y hay que sumarlos
entonces en el primer registro seria 108000-el primer valor del cursor ordenplease = 8000
entonces en segundo registro debe de aparecer en la columna saldo 100000, y así sucesivamente
Eso de hacer el segundo cursor creo que es lo mejor pero no entiendo los cursor2.inicial-sum(precio*cantidad)
¿De dónde saco sum(precio*cantidad) del segundo cursor?
Como es que los uno, o hago referencia en la grid, ya que son 2 cursores,
podrías hacerme el código tal y como lo harías, estoy comenzado en fox y no se mucho de cursores.
Gracias amigo
Listo, ahora entiendo.
Tu valor inicial sale de un textbox y vos quieres que aparezca actualizado tu saldo para cada linea en tu grid, primeramente pensé que era una operación simple dentro de tu select pero acá, como tienes datos que van a variar para cada registro es otro el tema, aparte por lo que veo dinámicamente se pueden modificar muchas veces.
Según mi humilde opinión tienes que:
Crear un campo auxiliar en tu tabla ordenes2005, llamado saldo
Luego tu código sería:
Valorinicial=108.000
* con simple ciclo insertas los saldos
sele ordenes2005
do while !eof()
folio=recno()
id=campoclave
SELECT top folio Valorinicial-SUM(DEBE)-SUM(HABER) as SALDO FROM ordenes2005 into cursor Caux1
sele ordenes2005
* aca actualizas el valor acumulado desde el primer registro hasta el registro nro folio que tenes en el cursor (Caux1.saldo) y lo colocas en tu campo ordenes2005.saldo con update
UPDATE ordenes2005 SET saldo = Caux1.saldo WHERE id = campoclave
sele ordenes2005
skip
enddo
*(campoclave = clave principal de la tabla ordenes2005)
Bueno, estúdialo al código y fíjate de adaptarlo a tu proyecto, ¨he pensado bastante en el tema, para mi deben existir otras alternativas, pero bueno, esta funciona.
Con la misma sentencia update agregas los datos y los pones en cero.
1) Agregar
UPDATE ordenes2005 SET saldo = Caux1.saldo WHERE id = campoclave
2) Poner en cero
UPDATE ordenes2005 SET saldo = 0 WHERE campoclave>0
Cualquier duda sobre el uso de las sentencias sql, aquí te dejo un excelente manual con ejemplos y ejercicios
http://www.aulaclic.es/sql/
Respuesta
1
Para actualizar un cursor es por ejemplo select campo1, campo2, 0000000.00 as camponuevo from mitabla into cursor w1 readwrite ...
Luego ...
update w1 set camponuevo=campo1+campo2
Y luego ... cargar el formulario con el grid ... que tiene el cursor relacionado ..
Yo crearía el cursor con un camvpo nuevo numerisdo y luego correría un proceso que tome los campos y haga la fórmula que necesitas y lo grabe en la columna nueva del cursor y luego si muestro rl grid ...
Para actualizar un cursor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas