Crear 1 Cursor a partir de 4 tablas libres

58 views
Skip to first unread message

PabloZa

unread,
Nov 30, 2015, 6:23:56 PM11/30/15
to Comunidad de Visual Foxpro en Español
Hola a todos:
a ver si alguien me puede ayudar con esta consigna.
Necesito armar una tabla temporal con los artículos que nunca han tenido movimientos de facturación dentro de 1 sistema, para ello cuento con la Tabla ARTICULOS.DBF (datos de artículos) y 3 Tablas donde guardo diferentes movimientos de entrada y salida de artículos (MOVISTOK1.DBF, MOVISTOK2.DBF y MOVISTOK3.DBF).
La idea inicial es tomar cada uno de los registros de la tabla ARTICULOS y verificar si existen movimientos de ese artículo en las otras 3 tablas.
Si lo hago en forma secuencial (1 a 1) tardo mucho. Quise aplicar una sentencia SQL pero no logre hacerlo.
Les dejo la inquietud. Si alguien puede darme alguna pista se agradecerá.
Saludos
Pablo

Fidel Charny

unread,
Nov 30, 2015, 6:29:47 PM11/30/15
to Comunidad de Visual Foxpro en Español
Supuestamente la tabla artículos  tendrá algún identificador, que supuestamente será el mismo en las de movimientos.
Pregunto,
tienes un índice para el campo identificador en cada tabla?

PabloZa

unread,
Nov 30, 2015, 6:37:24 PM11/30/15
to Comunidad de Visual Foxpro en Español
en la tabla ARTICULOS tengo un indice por "idarticulo", en las otras no

Fidel Charny

unread,
Nov 30, 2015, 6:48:45 PM11/30/15
to Comunidad de Visual Foxpro en Español
Este código no debería demorar tanto:

* Llamo "Descrip" al campo que tiene la descripción de los artículos

* 1 Crear 3 cursores con idArticulo único
SELECT distinct idArticulo FROM movistok1 WHERE
.t. INTO CURSOR curmovistok1
SELECT curmovistok1
INDEX on idArticulo TAG imovistok1

SELECT distinct idArticulo FROM movistok2 WHERE
.t. INTO CURSOR curmovistok2
SELECT curmovistok2
INDEX on idArticulo TAG imovistok2

SELECT distinct idArticulo FROM movistok3 WHERE
.t. INTO CURSOR curmovistok3
SELECT curmovistok3
INDEX on idArticulo TAG imovistok3

* Creo un cursor vacío de la tabla artículos
SELECT idArticulo
,descrip FROM Articulos WHERE .f. INTO CURSOR CurArticulos READWRITE

* Scan de detección
SELECT
Articulos
SCAN FOR
!INDEXSEEK(Articulos.idArticulo,.f.,"curmovistok1","imovistok1") ;
    AND
!INDEXSEEK(Articulos.idArticulo,.f.,"curmovistok2","imovistok2") ;
    AND
!INDEXSEEK(Articulos.idArticulo,.f.,"curmovistok3","imovistok3")
    INSERT INTO curArticulos
(idArticulo,descrip) VALUES (Articulos.idArticulo,Articulos.descrip)
ENDSCAN

SELECT
CURArticulos
GO TOP
BROWSE


* Cerrar cursores

PabloZa

unread,
Nov 30, 2015, 6:50:13 PM11/30/15
to Comunidad de Visual Foxpro en Español
Lo voy a probar Fidel. Desde ya, muchas gracias

Carlos Miguel FARIAS

unread,
Dec 1, 2015, 6:46:53 AM12/1/15
to Grupo Fox
SELECT datos articulo sin movimiento (según se requiera);
   FROM tablaArticulos AS A INTO CURSOR articulosSinMovimiento
   WHERE NOT EXIST (SELECT idArticulo FROM Movistock1 AS B WHERE A.idArticulo=B.idArticulo) AND;
      NOT EXIST (SELECT idArticulo FROM Movistock2 AS C WHERE A.idArticulo=C.idArticulo) AND;
      NOT EXIST (SELECT idArticulo FROM Movistock3 AS D WHERE A.idArticulo=D.idArticulo)

Si resulta lento, mejora si creas un indice sobre los idarticulos en las tablas de movimientos

Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe.

PabloZa

unread,
Dec 1, 2015, 10:22:21 AM12/1/15
to Comunidad de Visual Foxpro en Español
Me funcionaron las 2 opciones que me pasaron. Gracias Fidel y Miguel.
Reply all
Reply to author
Forward
0 new messages