Como hacer reportes en Fox
hola, necesito hacer un reporte de varias tablas, con ciertas condiciones alguien sabe como filtrar esa informacion a un reporte
Cuando es condicional tendras que hacerlo con @ say
Ej.
SET DEVICE TO PRINTER
SET PRINT ON
SET PRINTER FONT 'arial narrow', 12 && STYLE 'BI'
do while !EOF( )
contador=contador+1
*SCATER MEMVAR
@ 04,60 SAY DMY(date())
@ 05.7,0.1 SAY alltrim(v_nom_ben)
@ 05.7,103 SAY v_total picture "999,999.99"
@ 07.5,0.1 SAY alltrim(v_letra)
@ 21,0.1 SAY alltrim(v_concepto1)
@ 22,0.1 SAY alltrim(v_concepto2)
@ 25,0.1 SAY v_cuentas
@ 25,95 SAY v_subtotal picture "999,999.99"
if v_iva > 0
@ 26,0.1 SAY v_coniva
@ 26,95 SAY v_iva picture "999,999.99"
endif
@ 30,0.1 SAY v_contrabanco
@ 30,110 SAY v_total picture "999,999.99"
.label5.caption=alltrim(STR(contador))
skip 1
if con = contador cuantas lineass imprime y ahi hacer el corte
ejec
exit
endif
ENDDO
* EJECT && Activa esto
SET DEVICE TO SCREEN
SET PRINT OFF
Ej.
SET DEVICE TO PRINTER
SET PRINT ON
SET PRINTER FONT 'arial narrow', 12 && STYLE 'BI'
do while !EOF( )
contador=contador+1
*SCATER MEMVAR
@ 04,60 SAY DMY(date())
@ 05.7,0.1 SAY alltrim(v_nom_ben)
@ 05.7,103 SAY v_total picture "999,999.99"
@ 07.5,0.1 SAY alltrim(v_letra)
@ 21,0.1 SAY alltrim(v_concepto1)
@ 22,0.1 SAY alltrim(v_concepto2)
@ 25,0.1 SAY v_cuentas
@ 25,95 SAY v_subtotal picture "999,999.99"
if v_iva > 0
@ 26,0.1 SAY v_coniva
@ 26,95 SAY v_iva picture "999,999.99"
endif
@ 30,0.1 SAY v_contrabanco
@ 30,110 SAY v_total picture "999,999.99"
.label5.caption=alltrim(STR(contador))
skip 1
if con = contador cuantas lineass imprime y ahi hacer el corte
ejec
exit
endif
ENDDO
* EJECT && Activa esto
SET DEVICE TO SCREEN
SET PRINT OFF
SALUDOS!
PARA HACER SELECCIONES DE DIVERSOS DATOS EN MAS DE UNA TABLA, PRUEBA LOS "SELECT" SON MUY PODEROSOS Y TE AYUDARAN SIEMPRE. SI NO TIENES DONDE INVESTIGAR SOLO BUSCA EN INTERNET CON ALTAVISTA, GOOGLE, O TU BUSCADOR FAVORITO. SI QUIERES ESCRIBE A MI CORREO ELECTRONICO Y TE ENVIO MAS INFORMACION DEL MISMO. POR FAVOR NO DEJES DE CONTARME COMO TE FUE!
PARA HACER SELECCIONES DE DIVERSOS DATOS EN MAS DE UNA TABLA, PRUEBA LOS "SELECT" SON MUY PODEROSOS Y TE AYUDARAN SIEMPRE. SI NO TIENES DONDE INVESTIGAR SOLO BUSCA EN INTERNET CON ALTAVISTA, GOOGLE, O TU BUSCADOR FAVORITO. SI QUIERES ESCRIBE A MI CORREO ELECTRONICO Y TE ENVIO MAS INFORMACION DEL MISMO. POR FAVOR NO DEJES DE CONTARME COMO TE FUE!
Podrias ser mas especifica en cuanto a que condiciones te refieres?
En cuanto a lo que menciona el compañero no estoy del todo de acuerdo con el, ya que si es posible filtrar la informacion y mandarla por medio del report form, todo deoende de como planteas el problema, y por otro lado como planteas tus relaciones.
Cuando se trata de varias tablas yo acostumbro crear temporales y una tabla pivote(tambien temporal) para evitar cualquier conflicto en las tablas originales, sobre todo cuando estan trabajando en red. Anexo un ejemplo de codigo de lo que te comento, en este caso se manejan 5 tablas y el codigo es el evento click del CommandBottom imprimir.
thisform.i_clave2.value=ambito.clave2
sele proyecto
Public a,b,c,d
go top
locate for proyecto.clave=ambito.clave2
a=proyecto.clave
b=proyecto.localidad
c=proyecto.municipio
d=proyecto.distrito
select ambito1
*set filter to ambito1.clave2a=ambito.clave2
go top
scan for ambito1.clave2a=ambito.clave2
scatter memvar
select temp_amb
append blank
repla clave with ambito.clave2
gather memvar
select ambito1
endscan
select ambito2
go top
scan for ambito2.clave2b=ambito.clave2
select temp_amb
append blank
repla clave with ambito.clave2
repla tipo with ambito2.tipo
repla destino with ambito2.destino
repla distancia with ambito2.distancia
repla tiempo with ambito2.tiempo
select ambito2
endscan
select pivote
go top
locate for pivote.clave2c=ambito.clave2
go top
if not found()
append blank
repla clave2c with ambito.clave2
repla tipo with 1
repla descrip with 'Tipo de camino'
append blank
repla clave2c with ambito.clave2
repla tipo with 2
repla descrip with 'Ferrocarril'
endif
sys(1037)
select temp_amb
select ambito
set order to clave2
select pivote
set order to tipo
go top
select temp_amb
set order to tipo
go top
set relation to tipo into pivote
REPORT FORM rep_ambito PREVIEW
select pivote
use
use pivote excl
delete all
set talk off
zap
use pivote
select temp_amb
use
use temp_amb excl
delete all
set talk off
zap
use temp_amb
thisform.init
thisform.load
thisform.refresh()
Te hago la aclaracion que esta es una forma de elaborar reportes con varias tablas (mas no la unica), todo depende de como planteas tus filtros para crear los temporales y almacenar la informacion que necesitas en los temporales creados.
Espero que lo anterior te sea de utilidad
Saludos
Fernando
En cuanto a lo que menciona el compañero no estoy del todo de acuerdo con el, ya que si es posible filtrar la informacion y mandarla por medio del report form, todo deoende de como planteas el problema, y por otro lado como planteas tus relaciones.
Cuando se trata de varias tablas yo acostumbro crear temporales y una tabla pivote(tambien temporal) para evitar cualquier conflicto en las tablas originales, sobre todo cuando estan trabajando en red. Anexo un ejemplo de codigo de lo que te comento, en este caso se manejan 5 tablas y el codigo es el evento click del CommandBottom imprimir.
thisform.i_clave2.value=ambito.clave2
sele proyecto
Public a,b,c,d
go top
locate for proyecto.clave=ambito.clave2
a=proyecto.clave
b=proyecto.localidad
c=proyecto.municipio
d=proyecto.distrito
select ambito1
*set filter to ambito1.clave2a=ambito.clave2
go top
scan for ambito1.clave2a=ambito.clave2
scatter memvar
select temp_amb
append blank
repla clave with ambito.clave2
gather memvar
select ambito1
endscan
select ambito2
go top
scan for ambito2.clave2b=ambito.clave2
select temp_amb
append blank
repla clave with ambito.clave2
repla tipo with ambito2.tipo
repla destino with ambito2.destino
repla distancia with ambito2.distancia
repla tiempo with ambito2.tiempo
select ambito2
endscan
select pivote
go top
locate for pivote.clave2c=ambito.clave2
go top
if not found()
append blank
repla clave2c with ambito.clave2
repla tipo with 1
repla descrip with 'Tipo de camino'
append blank
repla clave2c with ambito.clave2
repla tipo with 2
repla descrip with 'Ferrocarril'
endif
sys(1037)
select temp_amb
select ambito
set order to clave2
select pivote
set order to tipo
go top
select temp_amb
set order to tipo
go top
set relation to tipo into pivote
REPORT FORM rep_ambito PREVIEW
select pivote
use
use pivote excl
delete all
set talk off
zap
use pivote
select temp_amb
use
use temp_amb excl
delete all
set talk off
zap
use temp_amb
thisform.init
thisform.load
thisform.refresh()
Te hago la aclaracion que esta es una forma de elaborar reportes con varias tablas (mas no la unica), todo depende de como planteas tus filtros para crear los temporales y almacenar la informacion que necesitas en los temporales creados.
Espero que lo anterior te sea de utilidad
Saludos
Fernando