FoxPro/Visual FoxPro - Seleccionar campos del ultimo registro de una subtabla

 
Vista:
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 22/11/2016 00:49:16
Buenas noches
Estoy programando en FoxPro9. No soy experto, entiendo lo básico

Tengo una tabla llamada crédito

Nro de factura Cliente Condición Saldo
1 cliente1 pendiente 10000
1 cliente1 pendiente 5000
4 cliente2 pendiente 25000
7 cliente3 pendiente 20000
7 cliente3 pendiente 10000
7 cliente3 cancelado 0
12 cliente4 pendiente 50000
12 cliente4 pendiente 30000
12 cliente4 pendiente 25000

quiero que al iniciar un formulario, se complete automaticamente un grid con los datos de las facturas no canceladas. tomar solo el ultimo registro de cada numero de factura aun no cancelada. en el caso de la tabla del ejemplo seria

Nro de factura Cliente Condición Saldo
1 cliente1 pendiente 5000
4 cliente2 pendiente 25000
12 cliente4 pendiente 25000

Mi codigo es el siguiente, en el Activate del formulario

SELECT credito
GO TOP
num1=credito.numero

SELECT credito
DO WHILE !EOF()
LOCATE FOR credito.numero=num1
IF FOUND()
SELECT *;
from credito;
WHERE credito.numero=num1 ORDER BY credito.numero INTO CURSOR encontrado1

SELECT encontrado1
GO BOTTOM
IF encontrado1.condicion="PENDIENTE"
SELECT informaciones &&Grid
APPEND BLANK
replace informaciones.aviso WITH "Vencimiento factura cliente: "+ALLTRIM(encontrado1.cliente)+" - Saldo: "+ALLTRIM(STR(encontrado1.saldo))+" - Fecha: "+ DTOC(encontrado1.vencimiento)
ENDIF

ELSE
SELECT credito
SKIP
num1=num1+1
ENDIF

No me funciona este codigo

Alguien puede ayudarme?



ENDDO
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
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

Seleccionar campos del ultimo registro de una subtabla

Publicado por Mauricio Antonio (1541 intervenciones) el 22/11/2016 12:50:22
si tienes el campo fecha, te seria mas facil localizar el ultimo de cada cliente......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 22/11/2016 14:17:17
Disculpa mi ignorancia.
Como seria el código?
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 Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 22/11/2016 18:11:52
gracias por la respuesta

Intenté adecuar el código a lo que necesito pero no lo conseguí

Necesito que en el grid Informaciones aparezca

Vencimiento factura cliente: Juan Carlos - Saldo: 80000 - Fecha: 10/11/2016

Adjunto el inteto que hice

Saludos
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 Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 22/11/2016 20:02:21
No me funciona

Al ejecutar factura, aparecen todos los datos de la tabla crédito.

Lo que yo quiero es que al iniciar el formulario menú, se complete automáticamente el grid informaciones, estirando los datos de la tabla credito. De esta forma, por ejemplo

Vencimiento factura cliente: Juan Carlos - Saldo: 80000 - Fecha: 10/11/2016
Vencimiento factura cliente: Hijo - Saldo: 10000 - Fecha: 8/11/2016
Vencimiento factura cliente: Odilon Avalos - Saldo: 65000 - Fecha: 15/11/2016

Solo debe aparecer una vez el dato de una factura no cancelada de un cliente, que este próxima a vencer.
Yo uso "encontrado" solo como un cursor interno. He visto que lo creaste como tabla, esto me causaria problemas, ya que uso varias veces este cursor en el programa.

Saludos
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

Seleccionar campos del ultimo registro de una subtabla

Publicado por Mauricio Antonio (1541 intervenciones) el 22/11/2016 23:31:00
Cristian, te dire que un par de cosas:
1 - FORM factura si funciona, aca esta una imagen de lo que hace, esto con datos creados segun tu primer post, en base a eso, cree la tabla creditos y no aparecen repetidos.
cristian1

2 - Con los datos que me enviaste en la tabla creditos, viene vacia, todos los registros estan eliminados, como puede verse en la imagen adjunta.
cristian

3 - No se que buscas en tu procedimiento, asi es que es mejor que investigues por tu cuenta. Saludos.

4 - Dices que el cursor ENCONTRADO lo usas varis veces, segun lo que he visto no hay ninguna parte donde lo uses y si es en otro programa, pues debes crearlo de nuevo, no es este mismo cursor el que usas.


bye bye. y mucha suerte!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 22/11/2016 23:37:20
Se acabo la paciencia verdad?
Lo comprendo.
Yo solo quería que al ejecutar el formulario menu, ya se cargaran los datos así como puse en el ejemplo.
Seguro por mi poca experiencia no pude entender la solución que me proponías.
Muchas gracias por toda la 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
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 23/11/2016 12:24:52
www

Volvi a ejecutar el form factura. quiero mostrarte que si, muestra todos los registros
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

Seleccionar campos del ultimo registro de una subtabla

Publicado por Fidel José (657 intervenciones) el 23/11/2016 14:04:06
Realmente no entiendo para qué quieres hacer eso. Normalmente se pretende cobrar desde los más viejo a lo más nuevo.
Al margen de eso, ese campo "condicion" debería ser boolean (logical) y tener .T. en lugar de "pendiente" y .F. en lugar de "cancelado" o a la inversa, como quieras. En el futuro será mucho más rápido y te evita el trim, el problema de mayúsculas/ minúsculas, etc.

De todos modos, aquí tienes un ejemplito de cómo se puede hacer lo que pides.
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
51
52
53
54
55
56
#define _PEND_	"pendiente"
LOCAL lnTally,i
LOCAL ARRAY laPend(1)
 
lcList = "Credito,curLast,curPend"
FOR i = 1 TO GETWORDCOUNT(lcList,CHR(44))
	lcCursor = GETWORDNUM(m.lcList,i,CHR(44))
	IF USED(lcCursor)
		USE IN SELECT(m.lcCursor)
	ENDIF
NEXT
 
* Creo el cursor que voy a mostrar
CREATE CURSOR curLast ("NoFactura" i,"cliente" c(20),"Saldo" n(12,2))
lcFolder = "c:\theodore\temp"    && esto es para mi
 
USE (ADDBS(lcFolder)+"credito") IN 0 SHARED
 
* Selecciono solamente los registros que tienen "pendiente"
SELECT * ;
	FROM credito ;
	WHERE TRIM(condicion)== _PEND_ ;
	INTO CURSOR curPend readwrite
lnTally = _tally
IF m.lnTally > 0
       * Si hay registros, creo un array con los números de factura pendientes
	SELECT distinct NoFactura;
		WHERE .t. ;
		FROM curPend ;
		INTO ARRAY laPend
	lnTally = _tally
	FOR i = 1 TO m.lnTally
               * para cada factura pendiente creo un cursor de paso y tomo el último registro
               * Incluyo el último registro en el cursor que voy a mostrar
 
		lnFactura = laPend[i,1]
		SELECT * ;
			FROM curPend ;
			WHERE NoFactura = laPend[i,1] ;
			INTO CURSOR curTramo
		SELECT curTramo
		GO bott
		INSERT INTO curlast (NoFActura,Cliente,Saldo) ;
			VALUES (laPend[i,1],curtramo.cliente,curtramo.saldo)
		USE IN curtramo
	NEXT
	SELECT curLast
	GO top
	BROWSE
ENDIF
FOR i = 1 TO GETWORDCOUNT(lcList,CHR(44))
	lcCursor = GETWORDNUM(m.lcList,i,CHR(44))
	IF USED(lcCursor)
		USE IN SELECT(m.lcCursor)
	ENDIF
NEXT

Fijate que yo cierro todos los cursores, pero a vos te tiene que quedar "curLast" abierto para que se muestre en el form.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 23/11/2016 14:28:55
Muchas gracias por la respuesta.


La verdad ya casi esta funcionando y si cambio el código tengo que empezar todo de nuevo.

Te envío mi proyecto.

En informaciones debe aparecer los datos de las facturas no canceladas y que estén vencidas o falten menos de 30 días para vencer.

El filtro de fecha funciona
p1

Pero en el grid de prueba no estira el cliente "eee", aunque cumple la condición (a mi entender)
p2

Ya casi está funcionando. Podrías indicarme cual es mi error por favor

Desde ya muchas gracias




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
SET DATE FRENCH
 
 
CREATE CURSOR informaciones(aviso c(100))
CREATE CURSOR deudor(nofactura N(5), cliente C(20), condicion C(10), saldo N(10,2), vencimiento d)
*
SELECT credito
SELECT *;
from credito;
WHERE credito.vencimiento<DATE()+30 ORDER BY credito.vencimiento INTO CURSOR encontrado
*
vfac = 0
SELECT encontrado
vfac = encontrado.numero
SCAN
	SCAN WHILE encontrado.numero= vfac
		SCATTER MEMVAR
	ENDSCAN
*
	IF m.condicion = 'PENDIENTE'
		INSERT INTO deudor (nofactura, cliente, condicion, saldo, vencimiento) VALUES (m.numero, m.cliente, m.condicion, m.saldo, m.vencimiento)
	ENDIF
*
	vfac = encontrado.numero
	SCATTER MEMVAR
ENDSCAN
SELECT deudor
GO TOP
 
********CARGA A INFORMACIONES**********
SELECT deudor
GOTO TOP
DO WHILE !EOF()
SELECT informaciones
APPEND BLANK
replace informaciones.aviso WITH "Vencimiento factura cliente:    "+ALLTRIM(deudor.cliente)+"    - Saldo: "+ALLTRIM(STR(deudor.saldo))+"     - Fecha: "+ DTOC(deudor.vencimiento)
*thisform.grid1.Refresh
 
SELECT deudor
SKIP
ENDDO
 
SELECT informaciones
GO TOP
 
SELECT deudor
GO TOP
********************************************
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

Seleccionar campos del ultimo registro de una subtabla

Publicado por Mauricio Antonio (1541 intervenciones) el 23/11/2016 14:50:22
Cristian, aca esta la manera que quieres mostrar los datos, en la figura de arriba es como se mira mas ordenado y mas estetico, pero para gustos hay colores, buena suerte
cristian2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 23/11/2016 19:14:04
Gracias por su respuesta
Volví a probar con el código y funciona, solamente que el ultimo registro no estira al grid.

Este seria el browse de los datos que cumplen condición "PENDIENTE" y vencimiento

p1

y estos son los que aparecen en el grid


p2

No aparece el ultimo registro (cliente ggg) aunque cumple la condicion
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 Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 23/11/2016 19:57:40
Como comentario, estuve probando y comprobé de que el registro que tiene mayor fecha es el que no se estira al grid. Aunque aparezca en el browse previo.
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

Seleccionar campos del ultimo registro de una subtabla

Publicado por Mauricio Antonio (1541 intervenciones) el 23/11/2016 22:05:45
Aca esta ya corregido del ultimo que no aparece en ambos grid's.......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian

Seleccionar campos del ultimo registro de una subtabla

Publicado por Cristhian (13 intervenciones) el 24/11/2016 13:03:47
Ya funciona correctamente.

Muchísimas gracias Mauricio por tu ayuda, aunque ya se acabó la paciencia me volviste a ayudar.

Es que soy un recién nacido aun en la programación.

Éxitos
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