FoxPro/Visual FoxPro - Sumar columnas de grid: y mostrar el resultado en otra columna

 
Vista:
Imágen de perfil de daniel
Val: 33
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por daniel (21 intervenciones) el 18/07/2017 06:39:53
Para los trome que me puedan orientar con lo siguiente:
Al iniciar el formulario Necesito se muestre el resultado en la columna3 de un grid de sumar column1+column2  y que la suma se cumpla en todo los registros de la columna.
e intentado sumando directo en los text de la grid pero solo me muestra el resultado del primer registro y no del total de 220 registros que tengo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por Fidel José (657 intervenciones) el 18/07/2017 14:18:08
Daniel, lo que necesitas lo tienes que hacer en el cursor asociado al grid.
Si tienes que mostrar en la column3 del grid la suma de cada item de las column1 y column2.
Si el cursor asociado tiene los campos Valor1,Valor2 y Suma, lo que tienes que hacer es
SELECT (thisform.grid1.RecordSource)
SCAN
REPLACE suma with valor1 + Valor2
ENDSCAN
go top
Thisform.Grid1.Refresh

Para mayor generalidad, mira esta rutina que puede utilizarse para cualquier control grid.
Para to caso, el uso sería algo así:
Show_Sum_InColumn( Thisform.grdNombre , "1,2", 3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PROCEDURE show_Sum_InColumn
*---------------------------
LPARAMETERS toGrid,tcListColumn,tnColumnSum
 
*!*	toGrid			Referencia al objeto grid	(Object)
*!*	tcListColumn	        Lista de números de columnas (1,3,4,etc) (Character)
*!*	tcColumnSum		Número de Columna donde se muestra la suma de columnas (numeric)
*!*					Si se omite, intenta sumar en la última columna
*!*
TRY
 
 
	LOCAL lnColumns,;
		i,;
		lnSuma,;
		lnRecno,;
		loex as Exception
 
	LOCAL ARRAY laColumns(1)
 
	IF VARTYPE(toGrid)="O"
		tnColumnSum = EVL(m.tnColumnSum,toGrid.ColumnCount)
		lnColumns = ALINES(laColumns,tcListColumn,1+4,CHR(44))
		SELECT (toGrid.RecordSource)
		lnRecno = RECNO()
		SCAN
			lnSuma = 0
			FOR i = 1 TO lnColumns
				lnSuma = m.lnSuma + EVALUATE(toGrid.Columns(VAL(laColumns[m.i])).ControlSource)
			NEXT
			replace (toGrid.Columns(m.tnColumnSum).ControlSource) WITH m.lnSuma
		ENDSCAN
		IF !EMPTY(m.lnRecno)
			GO m.lnRecno
		ELSE
			GO top
		ENDIF
		toGrid.Refresh
		toGrid.SetFocus()
	ENDIF
 
CATCH TO loex
	loex.UserValue = PROGRAM()
	*ShowError(loex)  && rutina que muestra un error producido
 
FINALLY
	toGrid = null
ENDTRY
 
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de daniel
Val: 33
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por daniel (21 intervenciones) el 18/07/2017 18:34:46
Gracias por responder
De que manera seria entiendo que el PROCEDURE show_Sum_InColumn es un archivo.prg ?? de que manera lo implemento en mi formulario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por Fidel José (657 intervenciones) el 18/07/2017 23:25:02
Hola Daniel
Si, como está puesto es un PROCEDURE que iría en un archivo prg. La idea es que si te sirve, no tengas que copiarlo en todos los formularios.
Pero también puedes crear un método con ese nombre (u otro) dentro del formulario, con lo cual tienes que cambiar la llamada:
Thisform.Show_Sum_InColumn( Thisform.grdNombre , "1,2", 3)
Recuerda que en el método del formulario no debes incluir ni PROCEDURE, ni ENDPROC.

Pero también fijate si no te resulta más simple el tema del SCAN / ENDSCAN.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de daniel
Val: 33
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por daniel (21 intervenciones) el 19/07/2017 03:36:48
Hola FIdel, gracias por la respuesta dime como seria si los campos a sumar fueran de Fecha.
Es decir campo.inicio+campo.vencimiento mostrar el resultado en campo días transcurridos.

Desde ya gracias por los aportes que me ayudan mucho a orientarme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por Fidel José (657 intervenciones) el 19/07/2017 17:36:34
Obviamente no puedes hacer una suma de fechas: qué sentido tendría?
Lo que si puedes hacer es
lnDiasTranscurridos = FechaMayor - FechaMenor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de daniel
Val: 33
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por daniel (21 intervenciones) el 20/07/2017 00:56:47
Hola Fidel te comento que logre hacer lo de la suma de los campos fecha con controlsource de cada columna.
Ahora tengo otro problema. haber si me puedes echar una mano con lo siguiente.
tengo el campo vencimiento necesito que el campo estado me muestre el texto "vencido" si el date() es mayor que el campo vencimiento.
Te agradecería un monton si pudieras orientarme..

Te comento que esto es para que al abrir un formulario se actualice automáticamente los datos y poder visualizar si un documento esta vencido o esta pronto a vencerse.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por Fidel José (657 intervenciones) el 20/07/2017 13:58:32
Los valores Date() y Datetime() son perfectamente comparables.
La resta de dos valores Date() da la cantidad de días entre ambas fechas
La Resta de dos valores Datetime() da la cantidad de Segundos entre ambos valores.

1
2
3
4
5
6
7
8
9
10
11
12
13
* En este caso, se usan dos palabras.
SELECT (thisform.grid1.recordSource)
SCAN
	REPLACE ESTADO WITH IIF(Vencimiento < DATE(),"Vencido","Corriente")
ENDSCAN
 
* En este caso, se utiliza una sola palabra, como propones.
SELECT (thisform.grid1.recordSource)
SCAN FOR vencimiento < DATE()
	REPLACE ESTADO WITH "Vencido"
ENDSCAN
 
Thisform.Grid1.Refresh
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de daniel
Val: 33
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por daniel (21 intervenciones) el 21/07/2017 03:09:42
Fidel Jose
Para agradecerte por tu aporte me sirvió y funciona muchas gracias.
Si no es abusar de tu tiempo tengo otra inquietud mira tengo un campo donde use lo que me enviaste para restar 2 fechas y me da el resultado en un campo " tiempo_transcurrido", Ahora quisiera me orientes como hacer para que al resultado de restar se muestre acompañado de un texto como porejemplo "días"
Es decir

campo_fechainicio-campo_fechafin= resultado (365) + "días"

Desde ya mi agradecimiento por tus aportes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Antonio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sumar columnas de grid: y mostrar el resultado en otra columna

Publicado por Mauricio Antonio (1541 intervenciones) el 21/07/2017 03:51:06
Si se esta aprendiendo, minimo, hay que leer la ayuda.
Hay que enseñar a pescar, para que sepan que para comer pescado, hay que mojarse el c.....ulo.
y no poner el pescado servido, asi no se ayuda en nada.......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar