FoxPro/Visual FoxPro - Duda con DO WHILE

   
Vista:

Duda con DO WHILE

Publicado por Andrea Lopez (6 intervenciones) el 06/02/2014 04:52:31
Buenas noches,
Estoy creando un programa que abre una tabla y la empieza a recorrer según las condiciones dadas, este es el código:

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
CREATE CURSOR Salida(Codigo C(3),Caja N(1),NumComputador C(15),PrefijoFacturas C(4),NumIniFaturas C(15),NumFinFacturas C(15),;
					 Exenta L,AcumVentasExentas N,Gravada L,AcumVentasGravadas N,Iva N(6),Consumo L,;
					 AplicaDescuento N(13),Valor N(13),FormaPago C(10),TipoPago C(10),TotalPago N(13),;
					 Empresa C(30),NitEmpresa N(20),FechaDesde D,FechaHasta D,AcumVentasGravadas16 N,AcumVentasGravadas5 N,Descuentos N)
 
	USE facturacion
	INDEX ON ALLTRIM(STR(POS)+ALLTRIM(DTOS(Fecha))) TO facturacion
GO TOP
DO WHILE !EOF() and THISFORM.ldFecha <= THISFORM.TxtFechaHasta.VALUE
   lncaja = facturacion.caja
   !EMPTY (CodCliente)
   DO WHILE !EOF() and lnfactura = facturacion.factura
        SELECT salida
        APPEND BLANK
        REPLACE salida.Codigo 			        WITH facturacion.Codigo
	  	REPLACE salida.Caja 			WITH facturacion.Caja
		REPLACE salida.PrefijoFacturas 	WITH facturacion.Prefijo
		REPLACE salida.NumIniFaturas 	WITH facturacion.Facdes
		REPLACE salida.NumFinFacturas 	WITH facturacion.Fachas
		REPLACE salida.Exenta 			WITH facturacion.Exenta
		REPLACE salida.Gravada 		WITH facturacion.Gravada
		REPLACE salida.Iva 				WITH facturacion.Tarifa
		REPLACE salida.Valor 			WITH facturacion.Valor
		REPLACE salida.TotalPago		WITH facturacion.Valor
	IF salida.Codigo = 'PAG' and salida.Gravada > 0
	   lnAcumVentasgravadas = SUM(salida.Valor)
	   REPLACE salida.AcumVentasGravadas WITH lnAcumVentasgravadas
	ENDIF
	IF salida.Codigo = 'PAG' and salida.Exenta > 0
	   lnAcumVentasexentas = SUM(salida.valor)
	   REPLACE salida.AcumVentasExentas WITH lnAcumVentasExentas
	ENDIF
	IF salida.Codigo = 'PAG' and Tarifa = 16 and salida.gravada > 0
		lnAcumVentasGravadas16 = SUM(salida.valor)
		REPLACE salida.lnAcumVentasGravadas16 WITH lnAcumVentasGravadas16
	ENDIF
	IF salida.Codigo = 'PAG' and Tarifa = 5 and salida.gravada > 0
		lnAcumVentasGravadas5 = SUM(salida.valor)
		REPLACE salida.lnAcumVentasGravadas5 WITH lnAcumVentasGravadas5
	ENDIF
	IF salida.Codigo = 'DSC' and salida.AplicaDescuento > 0
		lnDescuentos = SUM (salida.valor)
		REPLACE salida.lnDescuentos WITH lnDescuentos
	ENDIF
	IF salida.FormaPago = 'EF' 
		lcFormaPago = '1'
		REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.FormaPago = 'CH'
		lcFormaPago = '2'
		REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.FormaPago = 'TA' 
		lcFormaPago = '3'
		REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.FormaPago = 'BO' 
		lcFormaPago = '5'
		REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.FormaPago = 'VA' 
		lcFormaPago = '6'
		REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.FormaPago = 'OT' 
		lcFormaPago = '7'
		REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.TipoPago = 'C' 
		lcTipoPago = 'Crédito'
	REPLACE salida.TipoPago WITH lcTipoPago
	ENDIF
	IF salida.TipoPago = 'D' 
		lcTipoPago = 'Débito'
	REPLACE salida.TipoPago WITH lcTipoPago
	ENDIF
	IF salida.FormaPago = 'TA' and salida.TipoPago = 'C'
		lcFormaPago = '3'
	REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	IF salida.FormaPago = 'TA' and salida.TipoPago = 'D'
		lcFormaPago = '3'
	REPLACE salida.FormaPago WITH lcFormaPago
	ENDIF
	ENDDO
ENDDO

Lo que deseo hacer es recorrer la tabla siempre y cuando encuentre coddian y la fecha desde sea menor o igual a la fecha hasta... No se si está bien, se podría mejorar?
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

Duda con DO WHILE

Publicado por Mauricio Antonio (1368 intervenciones) el 06/02/2014 14:04:43
Mira este codigo:
**************
CREATE CURSOR Salida(Codigo C(3),Caja N(1),NumComputador C(15),PrefijoFacturas C(4),NumIniFaturas C(15),NumFinFacturas C(15),;
Exenta L,AcumVentasExentas N,Gravada L,AcumVentasGravadas N,Iva N(6),Consumo L,;
AplicaDescuento N(13),Valor N(13),FormaPago C(10),TipoPago C(10),TotalPago N(13),;
Empresa C(30),NitEmpresa N(20),FechaDesde D,FechaHasta D,AcumVentasGravadas16 N,AcumVentasGravadas5 N,Descuentos N)

USE facturacion
INDEX ON ALLTRIM(STR(POS)+ALLTRIM(DTOS(Fecha))) TO facturacion
SELE facturacion
GO TOP
SCAN
IF THISFORM.ldfecha.value > THISFORM.txtfechahasta.value
LOOP
ENDIF
IF EMPTY(codcliente)
LOOP
ENDIF
* Aca entraran todos los registros que cumplan condiciones
*
lncaja = facturacion.caja
*
SCAN WHILE lnfactura = facturacion.factura
*
SELECT salida
APPEND BLANK
REPLACE Codigo WITH facturacion.Codigo, Caja WITH facturacion.Caja, ;
PrefijoFacturas WITH facturacion.Prefijo, NumIniFaturas WITH facturacion.Facdes, ;
NumFinFacturas WITH facturacion.Fechas, Exenta WITH facturacion.Exenta, ;
Gravada WITH facturacion.Gravada, Iva WITH facturacion.Tarifa, ;
Valor WITH facturacion.Valor, TotalPago WITH facturacion.Valor
*
IF salida.Codigo = 'PAG' and salida.Gravada > 0
lnAcumVentasgravadas = SUM(salida.Valor)
REPLACE AcumVentasGravadas WITH lnAcumVentasgravadas
ENDIF
*
IF salida.Codigo = 'PAG' and salida.Exenta > 0
lnAcumVentasexentas = SUM(salida.valor)
REPLACE AcumVentasExentas WITH lnAcumVentasExentas
ENDIF
*
IF salida.Codigo = 'PAG' and Tarifa = 16 and salida.gravada > 0
lnAcumVentasGravadas16 = SUM(salida.valor)
REPLACE lnAcumVentasGravadas16 WITH lnAcumVentasGravadas16
ENDIF
*
IF salida.Codigo = 'PAG' and Tarifa = 5 and salida.gravada > 0
lnAcumVentasGravadas5 = SUM(salida.valor)
REPLACE lnAcumVentasGravadas5 WITH lnAcumVentasGravadas5
ENDIF
*
IF salida.Codigo = 'DSC' and salida.AplicaDescuento > 0
lnDescuentos = SUM (salida.valor)
REPLACE lnDescuentos WITH lnDescuentos
ENDIF
*
IF salida.FormaPago = 'EF'
lcFormaPago = '1'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'CH'
lcFormaPago = '2'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'TA'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'BO'
lcFormaPago = '5'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'VA'
lcFormaPago = '6'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'OT'
lcFormaPago = '7'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.TipoPago = 'C'
lcTipoPago = 'Crédito'
REPLACE TipoPago WITH lcTipoPago
ENDIF
*
IF salida.TipoPago = 'D'
lcTipoPago = 'Débito'
REPLACE TipoPago WITH lcTipoPago
ENDIF
*
IF salida.FormaPago = 'TA' and salida.TipoPago = 'C'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'TA' and salida.TipoPago = 'D'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
ENDSCAN
SELE facturacion
ENDSCAN
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

Duda con DO WHILE

Publicado por Mauricio Antonio (1368 intervenciones) el 08/02/2014 16:51:43
Error de dedo!!!!!!
CREATE CURSOR Salida(Codigo C(3),Caja N(1),NumComputador C(15),PrefijoFacturas C(4),NumIniFaturas C(15),NumFinFacturas C(15),;
Exenta L,AcumVentasExentas N,Gravada L,AcumVentasGravadas N,Iva N(6),Consumo L,;
AplicaDescuento N(13),Valor N(13),FormaPago C(10),TipoPago C(10),TotalPago N(13),;
Empresa C(30),NitEmpresa N(20),FechaDesde D,FechaHasta D,AcumVentasGravadas16 N,AcumVentasGravadas5 N,Descuentos N)

USE facturacion
INDEX ON ALLTRIM(STR(POS)+ALLTRIM(DTOS(Fecha))) TO facturacion
SELE facturacion
GO TOP
SCAN
IF THISFORM.ldfecha.value > THISFORM.txtfechahasta.value
LOOP
ENDIF
IF EMPTY(codcliente)
LOOP
ENDIF
* Aca entraran todos los registros que cumplan condiciones
*
lncaja = facturacion.caja
*
SCAN WHILE lnfactura = facturacion.factura
*
SELECT salida
APPEND BLANK
REPLACE Codigo WITH facturacion.Codigo, Caja WITH facturacion.Caja, ;
PrefijoFacturas WITH facturacion.Prefijo, NumIniFaturas WITH facturacion.Facdes, ;
NumFinFacturas WITH facturacion.Fechas, Exenta WITH facturacion.Exenta, ;
Gravada WITH facturacion.Gravada, Iva WITH facturacion.Tarifa, ;
Valor WITH facturacion.Valor, TotalPago WITH facturacion.Valor
*
IF salida.Codigo = 'PAG' and salida.Gravada > 0
lnAcumVentasgravadas = SUM(salida.Valor)
REPLACE AcumVentasGravadas WITH lnAcumVentasgravadas
ENDIF
*
IF salida.Codigo = 'PAG' and salida.Exenta > 0
lnAcumVentasexentas = SUM(salida.valor)
REPLACE AcumVentasExentas WITH lnAcumVentasExentas
ENDIF
*
IF salida.Codigo = 'PAG' and Tarifa = 16 and salida.gravada > 0
lnAcumVentasGravadas16 = SUM(salida.valor)
REPLACE lnAcumVentasGravadas16 WITH lnAcumVentasGravadas16
ENDIF
*
IF salida.Codigo = 'PAG' and Tarifa = 5 and salida.gravada > 0
lnAcumVentasGravadas5 = SUM(salida.valor)
REPLACE lnAcumVentasGravadas5 WITH lnAcumVentasGravadas5
ENDIF
*
IF salida.Codigo = 'DSC' and salida.AplicaDescuento > 0
lnDescuentos = SUM (salida.valor)
REPLACE lnDescuentos WITH lnDescuentos
ENDIF
*
IF salida.FormaPago = 'EF'
lcFormaPago = '1'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'CH'
lcFormaPago = '2'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'TA'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'BO'
lcFormaPago = '5'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'VA'
lcFormaPago = '6'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'OT'
lcFormaPago = '7'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.TipoPago = 'C'
lcTipoPago = 'Crédito'
REPLACE TipoPago WITH lcTipoPago
ENDIF
*
IF salida.TipoPago = 'D'
lcTipoPago = 'Débito'
REPLACE TipoPago WITH lcTipoPago
ENDIF
*
IF salida.FormaPago = 'TA' and salida.TipoPago = 'C'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'TA' and salida.TipoPago = 'D'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
SELE facturacion
ENDSCAN
ENDSCAN
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

Duda con DO WHILE

Publicado por Saul (676 intervenciones) el 08/02/2014 17:03:08
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
CREATE CURSOR Salida(Codigo C(3),Caja N(1),NumComputador C(15),PrefijoFacturas C(4),NumIniFaturas C(15),NumFinFacturas C(15),;
Exenta L,AcumVentasExentas N,Gravada L,AcumVentasGravadas N,Iva N(6),Consumo L,;
AplicaDescuento N(13),Valor N(13),FormaPago C(10),TipoPago C(10),TotalPago N(13),;
Empresa C(30),NitEmpresa N(20),FechaDesde D,FechaHasta D,AcumVentasGravadas16 N,AcumVentasGravadas5 N,Descuentos N)
 
USE facturacion
INDEX ON ALLTRIM(STR(POS)+ALLTRIM(DTOS(Fecha))) TO facturacion
SELE facturacion
GO TOP
SCAN
IF THISFORM.ldfecha.value > THISFORM.txtfechahasta.value
LOOP
ENDIF
IF EMPTY(codcliente)
LOOP
ENDIF
* Aca entraran todos los registros que cumplan condiciones
*
lncaja = facturacion.caja
*
SCAN WHILE lnfactura = facturacion.factura
*
SELECT salida
APPEND BLANK
REPLACE Codigo WITH facturacion.Codigo, Caja WITH facturacion.Caja, ;
PrefijoFacturas WITH facturacion.Prefijo, NumIniFaturas WITH facturacion.Facdes, ;
NumFinFacturas WITH facturacion.Fechas, Exenta WITH facturacion.Exenta, ;
Gravada WITH facturacion.Gravada, Iva WITH facturacion.Tarifa, ;
Valor WITH facturacion.Valor, TotalPago WITH facturacion.Valor
*
IF salida.Codigo = 'PAG' and salida.Gravada > 0
lnAcumVentasgravadas = SUM(salida.Valor)
REPLACE AcumVentasGravadas WITH lnAcumVentasgravadas
ENDIF
*
IF salida.Codigo = 'PAG' and salida.Exenta > 0
lnAcumVentasexentas = SUM(salida.valor)
REPLACE AcumVentasExentas WITH lnAcumVentasExentas
ENDIF
*
IF salida.Codigo = 'PAG' and Tarifa = 16 and salida.gravada > 0
lnAcumVentasGravadas16 = SUM(salida.valor)
REPLACE lnAcumVentasGravadas16 WITH lnAcumVentasGravadas16
ENDIF
*
IF salida.Codigo = 'PAG' and Tarifa = 5 and salida.gravada > 0
lnAcumVentasGravadas5 = SUM(salida.valor)
REPLACE lnAcumVentasGravadas5 WITH lnAcumVentasGravadas5
ENDIF
*
IF salida.Codigo = 'DSC' and salida.AplicaDescuento > 0
lnDescuentos = SUM (salida.valor)
REPLACE lnDescuentos WITH lnDescuentos
ENDIF
*
IF salida.FormaPago = 'EF'
lcFormaPago = '1'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'CH'
lcFormaPago = '2'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'TA'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'BO'
lcFormaPago = '5'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'VA'
lcFormaPago = '6'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'OT'
lcFormaPago = '7'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.TipoPago = 'C'
lcTipoPago = 'Crédito'
REPLACE TipoPago WITH lcTipoPago
ENDIF
*
IF salida.TipoPago = 'D'
lcTipoPago = 'Débito'
REPLACE TipoPago WITH lcTipoPago
ENDIF
*
IF salida.FormaPago = 'TA' and salida.TipoPago = 'C'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
*
IF salida.FormaPago = 'TA' and salida.TipoPago = 'D'
lcFormaPago = '3'
REPLACE FormaPago WITH lcFormaPago
ENDIF
SELE facturacion
ENDSCAN
ENDSCAN
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

Duda con DO WHILE

Publicado por Juan Miguel solis.juanmiguel@gmail.com (79 intervenciones) el 06/08/2014 09:31:06
Hola Andrea

Esto que pones te funciona???

Por el código me imagino que tienes una tabla llamada FACTURACION de donde lees los datos y quieres llenar un cursor llamado SALIDA, me imagino que para luego sacar un informe o presentarlo por pantalla, es esto lo que quieres ?

Lo que no se es porque haces el INDEX de la tabla FACTURACION (INDEX ON ALLTRIM(STR(POS)+ALLTRIM(DTOS(Fecha))) TO facturacion), lo mas normal es que ya lo tuvieras creado, y si es solo para leerlo, entonce mejor seria un cursor temporal y leer dicho cursor temporal, hay podrias meter las condiciones y luego solo seria leerlo.

La instrucción "!EMPTY (CodCliente)", no la entiendo, porque en realidad no es ningún IF, o sea siempre tirara hacia adelante este o no este vacio "CodCliente"

Por lo que veo solo pides una fecha en un textbox pro pantalla ea si ?? o sea siempre sera desde el principio hasta la fecha que pidas ???

Tampoco veo como piensas leer todos los registros, no tienes un "skip" para avanzar dentro de la lectura, por lo cual me imagino que el programa se enbuclara y se quedara parado...

Y la ultima pregunta para poder echarte una mano es en que versión de VFP trabajas ??? 5, 6, 7, 8, 9 ??

Un saludo
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