Tabla con muchos datos.

Hola nuevamente por acá, ojala me puedas ayudar con esto ya que se me ha hecho un lio. La cosa esta así: tengo un formulario en el cual tengo una tabla ms o menos:
Lunes miércoles viernes domingo
semana1 100 150 200 120
semana2 50 50 80 60
semana3 100 100 250 130
semana4 150 60 60 60
mes1 400 360 390 370
Así sucesivamente por cada mes del año. He tratado con textbox para luego mandarlos a la tabla pero obvio son demasiados y con el mentado grid me he hecho pelotas. Por favor me podrías guiar a través del procedimiento para poder mandar los datos a la tabla y luego mandar a imprimir un reporte con todos los mismos datos. Gracias de antemano.

1 respuesta

Respuesta
1
Cerca del medio día contesto tu pregunta, no te preocupes que lo vamos a hacer fácil.. ahora tengo un poco más de trabajo de lo normal pero al medio día te puedo desarrollar la respuesta con tiempo..
Keystone - Christian
Ok esperare tu valiosa ayuda. Gracias.
Disculpame por la demora.. nos espera algo de trabajo
Bueno, vamos a tratar de que funcione..
Primero que nada vamos a crear una tablita de trabajo temporal que tenga campos de referencia al mes y al año porque vos tienes que sumarlos y un idenfiquidaro de tipo de dato.. porque tienes semanas, meses y años. Ya que estamos también le ponemos una columna Total para que sume horizontalmente ademas de las columnas. ..
Par crear la tabla hace así:
create dbf miTabla (tipo c(1), mesaño c(6), descrip c(40), lunes n(3), miercoles n(3), viernes n(3), domingo n(3), total n(6))
index on tipo+mesAño to miTablaI
set order to
También de paso creamos un indice para localizar la fila donde poner los resultados..
El próximo paso, es llenar la tablita con valores listos para usar..
sele miTabla
mAño=2007
for mMes=1 to 12
for mSemana=1 to 4
append blank
replace tipo with 'S',mesAño with transf(mAño)+right('00'+transf(mMes),2), descrip with 'Semana '+transf(mSemana)
Endfor
Append blank
replace tipo with 'M', mesAño with transf(mAño)+right('00'+transf(mMes),2), descrip with 'Mes '+transf(mMes)
Endfor
Append blank
replace tipo with 'A', descrip with 'Año '+transf(mAño)
Go top
Bueno, con esto tenemos la tablita lista para ponerla en un grid.
Ahora bien. En el formulario creas un grid donde mostrar la tabla que hemos creado y llenado..
y ahora un par de toques..:
El grid tiene la siguiente estructura:
Grid
Column
TextBox
Bueno vamos a trabajar con el textBox
En el when de cada textBox correspondiente a los días ponemos lo siguiente:
return tipo='S'
Entonces, si no es una semana no te permite escribir un valor..
Ahora en el valid ponemos
replace lunes with this.value
Thisform. Calcula(mesAño)
(Lunes cambia por miércoles, viernes y domingo según corresponda en los otros textbox)
Bueno, por ultimo, creamos un método en el formulario que se llame calcula y le pones esto:
LParameter lMesAño
Se le miTabla
mRec=recno()
mMesAño=miTabla.mesAño
dimension mTotalMes(1,4)
dimension mTotalAño(1,4)
mTotalMes=0
mTotalAño=0
Sele sum(lunes), sum(miercoles), sum(viernes), sum(domingo) from miTabla where tipo='S' and mesAño=mMesAño into array mTotalMes
sele sum(lunes), sum(miercoles), sum(viernes), sum(domingo) from miTabla where tipo='S' into array mTotalAño
sele miTabla
if seek('M'+mMesAño,'miTabla','miTablaI')
replace lunes with mTotalMes(1,1), miercoles with mTotalMes(1,2), viernes with mTotalMes(1,3), domingo with mTotalMes(1,4)
endif
set order to
go bottom
replace lunes with mTotalAño(1,1), miercoles with mTotalAño(1,2), viernes with mTotalAño(1,3), domingo with mTotalAño(1,4)
Go mRec
Thisform. Grid. Refresh
Con eso se llenaran dinámicamente los valores de los meses y al final de todo el año..
Para imprimirlo directamente mandas a imprimir la tablita con un report..
Otra sugerencia es que uses la propiedad dynamicBackColor de las columnas (column) para que tengo otro color la fila donde están los meses.. podes poner así en el init:
thisform.grid.setAll('dynamicBackColor','iif(tipo="S",rgb(255,255,255),rgb(255,255,230))','column')
Bueno, espero que te haya sido útil y cualquier cosa estoy a tu disposición
Keystone - Christian
www.keystone.com.ar
Me olvidé..
El el controlSource de la columna que corresponde al total, pones..
lunes+miercoles+viernes+domingo..
Así te saca la cuenta horizontal también..
Keystone - Christian
www.keystone.com.ar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas