FoxPro/Visual FoxPro - Como relacionar varias tablas en un listado???

 
Vista:

Como relacionar varias tablas en un listado???

Publicado por Andrea (325 intervenciones) el 03/02/2009 22:05:54
Hola a todos!

Tengo 4 tablas

- MOVIMIENTOS (guarda los comprobantes emitidos con todos sus datos)
- CLIENTES (datos de los clientes)
- IVA (nombre y tasas del impuesto del IVA)
- PROVINCIAS (nombre de las provincias de mi país)

En la tabla MOVIMIENTOS tengo CAMPOS que relacionan esta tabla con las otras 3
(cod_cliente, cod_iva; cod_pcia)

Necesito emitir un listado (informe o reporte) donde muestre los movimientos mensuales, con este formato

FECHA NOMBRE PROVINCIA SUBTOTAL %IVA IVA TOTAL
01/01/09 GONZALEZ MARCELO PROV1 10,00 21 2,10 12,10
01/01/09 GOMEZ MARÍA PROV5 100,00 21 21,00 121,00
....
03/01/09 PEREZ JACINTO PROV2 20,00 21 4,20 24,20
....

Lo intenté hacer mediante VISTAS (instrucción Select SQL) pero solamente funciona con estructuras de este tipo

TABLA1 ->(campo_comun1/2) ->TABLA2 ->(campo_comun 2/3) -> TABLA3 ->....

y lo que yo necesito es filtra mediante un SELECT algunos valores pero en esta forma

-> (campo_comun1/2) -> TABLA2
TABLA 1 -> (campo_comun1/3) -> TABLA3
-> (campo_comun1/4) -> TABLA4

¿Cómo lo puedo hacer???? GRACIAS!!!
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

Lo explico un poco mejor... porque es medio compli

Publicado por Andrea (325 intervenciones) el 04/02/2009 13:57:52
Al mirar el post anterior, me di cuenta que el editor de texto no tabula como lo publiqué, por lo que realmente no se entiende nada...

Explico fácil:

-Tengo que sacar un listado de una tabla principal y datos de otras 2 o 3 tablas secundarias

- Pido ayuda porque no tengo forma de que me muestre datos coherentes en el reporte.

- Hasta ahora he probado lo siguiente:
--- Agrego las tablas en el ENTORNO DE DATOS DEL FORMULARIO que llama al reporte
--- Mediante SELECT de SQL filtro los datos necesarios y los vuelco a un cursor (INTO CURSOR)
--- (con este método solo puedo relacionar tablas en serie, es decir, 2 tablas)

-
--- También probé de relacionar las tablas gráficamente en el ENTORNO DE DATOS, pero solamente se muestran bien los datos de la tabla principal y de las secundarias me muestra siempre el primer registro (no cambia)

¿Ahora está un poco más claro???
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

RE:Lo explico un poco mejor... porque es medio com

Publicado por enrique (1041 intervenciones) el 04/02/2009 14:55:51
antes de imprimir un reporte debes tener todos los datos en un solo archivo o cursor, por lo cual hacelo en el SELECT de SQL, el cual no tiene inconvenientes para tomar datos de la cantidad de tablas que manejas.
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

RE:Lo explico un poco mejor... porque es medio com

Publicado por Andrea (325 intervenciones) el 04/02/2009 17:03:39
Gracias Enrique, pero no sé como hacerlo, ya que según lo que pude experimentar, el SELECT de SQL solo trabaja con tablas "en serie", es decir, una tabla principal relacionada con otra secundaria, y esta otra secundaria, relacionada con una tercera tabla secundaria.

En los ejemplos Solution y Trastade, del VFP hacen siempre lo mismo

TABLA_CLIENTES -> relacionada con->TABLA_PEDIDOS ->relacionada con-> TABLA_ARTICULOS

Si paso el ejemplo a lo que necesito, en mi caso empiezo de la TABLA_PEDIDOS , y necesito que al recorrerla, me vaya mostrando a qué cliente pertenece y que artículos tiene,

Si lo defino así, la sentencia SELECT SQL da un error
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

RE:Lo explico un poco mejor... porque es medio com

Publicado por enrique (1041 intervenciones) el 04/02/2009 17:22:17
SELECT * ;
FROM TABLA_PEDIDOS ;
LEFT JOIN TABLA_CLIENTES ON TABLA_CLIENTES.COD==TABLA_PEDIDOS.COD;
LEFT JOIN TABLA_ARTICULO ON TABLA_ARTICULO.COD==TABLA_PEDIDOS.CODART;
INTO CURSOR TU_CURSOR
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

RE:Lo explico un poco mejor... porque es medio com

Publicado por Giovanni (64 intervenciones) el 05/02/2009 05:03:56
Para darte una solucion mas concreta me gustaria saber que campos utilizas en la tabla movimientos o las relaciones entre ellas, por el momento yo diria algo asi:

SELECT movimientos.fecha as fecha,;
clientes.nombre as nombre,;
provincias.nom_prov as provincia,;
movimientos.sub_total as subtotal,;
iva.porcentaje as %iva,;
movimiento.sub_total * iva.porcentaje as iva,: **calculo el valor del iva
movimiento.subtotal + (movimiento.sub_total * iva.porcentaje as iva) as total ******** se realiza la operacion valor mas el iva
FROM movimientos, clientes, iva, provincias
WHERE movimientos.fecha between AQUI RANGO DE FECHAS CONSULTA;
and movimientos.cliente_codigo = clientes.codigo,
and clientes.cod_provincia = provincia.codigo (etc segun tu dbf entidad relacion)
GROUP BY nombre (en caso q mismo cliente con varias ordenes)
ORDER BY Fecha (o como se quiera ordenar)
INTO CURSOR mi_consulta

Espero te sea de ayuda
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