FoxPro/Visual FoxPro - Crear variables por programación? VFP9

 
Vista:
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 21/02/2016 16:08:47
Buenos dias para todos

La consulta que hago es la siguiente:
Puedo crear variables por medio de programa en vfp? Tengo algo así como dato1, dato2, dato3.... y así sucesivamente.
Necesito crear la variable de la forma datoN y que N se vaya incrementando de acuerdo a la cantidad de datos que se reciban.
Si se puede y tienen un mini-ejemplo, se los agradecería.

Mil Gracias.
[email protected]

P.D.: Gracias por toda la ayuda que nos brindan a los novatos como yo.
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
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

Crear variables por programación? VFP9

Publicado por Fidel José (657 intervenciones) el 21/02/2016 17:39:40
Me parece que lo más fácil es crear un Array

Por ejemplo, para crear un array basado en parámetros que se envían a una función:
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
LOCAL loArr as Object,;
	lnItems,;
	i,;
	lcString
LOCAL ARRAY laArray(1)
 
lcString = ""
loArr = get_array(25,30,12,40,5,28,60,,90)
LOCAL ARRAY laArray(loArr.Count)
FOR i = 1 TO loArr.Count
	laArray[i] = loArr.pArray[i]
	lcString = m.lcString ;
		+ "Item "+PADL(TRANSFORM(i),4," ")+" ";
		+ "Value "+PADL(TRANSFORM(laArray[i]),10," ") ;
		+ CHR(13)
NEXT
loArr = null
 
MESSAGEBOX(m.lcString)
 
 
 
 
PROCEDURE get_array
*--------------------------------------
LPARAMETERS tn1,tn2,tn3,tn4,tn5,tn6,tn7,tn8,tn9,;
	tn10,tn11,tn12,tn13,tn14,tn15,tn16,tn17,tn18,tn19,;
	tn20,tn21,tn22,tn23,tn24,tn25,tn26
 
 
LOCAL i,loObj as Object
loObj = NEWOBJECT("Empty")
lcProp = CHR(34)+'pArray'+CHR(91)+TRANSFORM(PCOUNT())+CHR(93)+CHR(34)
ADDPROPERTY(loObj,'pArray'+CHR(91)+TRANSFORM(PCOUNT())+CHR(93),0)
ADDPROPERTY(loObj,"Count",PCOUNT())
 
FOR i = 1 TO PCOUNT()
	loObj.pArray[i] = EVL(EVALUATE("tn"+TRANSFORM(i)),0)
NEXT
 
RETURN loObj

Por ejemplo, para crear un array de un lista de valores separados por ","
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
* Con el flag 1+4 se desprecian los elementos vacíos
lcString = ""
lcListValue = "20,42,,36.12,270.19,77.05,20,48,36,82,90"
lnLines = ALINES(laArray , lcListValue , 1+4 , "," )
FOR i = 1 TO lnLines
	laArray[i] = VAL(laArray[i])
	lcString = m.lcString ;
		+ "Item "+PADL(TRANSFORM(i),4," ")+" ";
		+ "Value "+PADL(TRANSFORM(laArray[i]),10," ") ;
		+ CHR(13)
 
NEXT
MESSAGEBOX(m.lcString)
 
* Para Admitir valores vacíos como cero
lcString = ""
lcListValue = "20,42,,36.12,270.19,77.05,20,48,36,82,90"
lnLines = ALINES(laArray , lcListValue , 1 , "," )
FOR i = 1 TO lnLines
	laArray[i] = VAL(laArray[i])
	lcString = m.lcString ;
		+ "Item "+PADL(TRANSFORM(i),4," ")+" ";
		+ "Value "+PADL(TRANSFORM(laArray[i]),10," ") ;
		+ CHR(13)
NEXT
 
MESSAGEBOX(m.lcString)

En el siguiente ejemplo se crea un cursor a partir de un array, que a su vez, se crea a partir de una lista.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
lcList = "Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic"
LOCAL ARRAY laCur(1,4)
laCur[1,1]="Concepto"
laCur[1,2]="C"
laCur[1,3]=40
laCur[1,4]=0
 
ln = ALEN(laCur,1)
FOR i = 1 TO GETWORDCOUNT(lcList,",")
	ln = ln + 1
	DIMENSION laCur(ln,4)
	laCur[ln,1]=GETWORDNUM(lcList, i ,",")
	laCur[ln,2]="N"
	laCur[ln,3]=12
	laCur[ln,4]=2
NEXT
 
CREATE CURSOR misMeses FROM ARRAY laCur
SELECT mismeses
BROWSE
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
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 21/02/2016 20:58:23
Muchas gracias Fidel José por tu ayuda.
Haré los respectivos ensayos y te comento como me fué.
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 Eduardo Ureña
Val: 114
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Crear variables por programación? VFP9

Publicado por Eduardo Ureña (114 intervenciones) el 22/02/2016 15:58:26
El array es una buena opción, pero también se puede utilizar algo como esto, principalmente cuando no conocemos lo que serviría como el índice de la matriz.

Imaginemos que tenes una tabla con un campo alfa numérico llamado "año" pero no estan todos los años sino aquellos que tienen info. Tenemos un campo numerico llamado "dato" que es el que guardaríamos en la variable de memoria creada.

Use tabla in 0 shared

1
2
3
4
5
Do while ! Eof()
Xl=Año
Variable&Xl=dato
Skip
enddo

Se crearían variables como Variable2010, variable2012 y otras.

Es una alternativa útil también.
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
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 22/02/2016 16:48:11
Muchas gracias Eduardo... etre más opciones tenga, mucho mejor.

Lo aplicaré también y te cuento.
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

Crear variables por programación? VFP9

Publicado por Fidel José (657 intervenciones) el 22/02/2016 23:28:01
En el ejemplo siguiente se demuestra que lo puesto por Eduardo Ureña es muy insuficiente:
1) Da por supuesto que existe una sola información por año, por lo que los valores son únicos.
2) No hay ninguna posibilidad de clasificar la información obtenida, ni tampoco un control de variables creadas.
3) Si el recorrido es de un archivo de gran tamaño, el tiempo empleado por la macrosustitución se volverá notorio.

En este ejemplo, tengo una tabla llamada "MOVIM" con al menos dos campos: FECHA (D) y Total (N,12,2)
En el primer rulo se crea un array por año y en el segundo, un array por cada mes detectado.
El array es siempre de dos dimensiones, en la primer columna el valor fecha y en la segunda, la acumulación correspondiente al campo Total de la tabla Movim.

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
LOCAL laYears(1,2)
LOCAL ln,lnAscan,;
	lcString,;
	lntotal,;
	i,;
	lcFileInfo,;
	lnAno1,;
	lnAno2,;
	lcRayado,;
	lcPeriMens
 
lcRayado = REPLICATE("-",27)
 
lcFileInfo = "sumaAnual.txt"
ln = 0
lnAno1 = 2010
lnAno2 = 2015
 
*<InfoAnual>
SELECT movim
SCAN FOR BETWEEN(YEAR(fecha),m.lnAno1,m.lnAno2)
	lnAscan = ASCAN(laYears,YEAR(fecha),1,0,1,7)
	IF m.lnAScan = 0
		ln = m.ln+1
		DIMENSION laYears(m.ln,2)
		laYears[m.ln,1] = YEAR(fecha)
		laYears[m.ln,2] = movim.total
	ELSE
		laYears[m.lnAscan + 1 ] = laYears[m.lnAscan + 1] + movim.Total
	ENDIF
ENDSCAN
 
ASORT(laYears)
lcString = "Información por Año"+CHR(13) ;
	+"Entre "+TRANSFORM(m.lnAno1)+" y "+TRANSFORM(m.lnAno2)+CHR(13);
	+ m.lcRayado + CHR(13)
lntotal = 0
FOR i = 1 TO m.ln
	lcString = m.lcString ;
		+TRANSFORM(laYears[m.i,1],"9999") + SPACE(4);
		+TRANSFORM(laYears[m.i,2],"999,999,999.99") + CHR(13)
	lnTotal = lnTotal + laYears[m.i,2]
NEXT
lcString = m.lcstring ;
	+ m.lcRayado + CHR(13);
	+ PADR("Total",8," ")+TRANSFORM(m.lnTotal,"999,999,999.99") + CHR(13);
	+ m.lcRayado + CHR(13)
STRTOFILE(m.lcString,lcFileInfo,0)
MODIFY FILE &lcFileInfo NOEDIT
*</InfoAnual>
 
*<InfoMensual>
ln= 0
DIMENSION laYears(1,2)
 
SELECT movim
SCAN FOR BETWEEN(YEAR(fecha),m.lnAno1,m.lnAno2)
	lcPeriMens = LEFT(DTOS(fecha),6)
 
	lnAscan = ASCAN(laYears,m.lcPeriMens,1,0,0,7)
	IF m.lnAScan = 0
		ln = m.ln+1
		DIMENSION laYears(m.ln,2)
		laYears[m.ln,1] = m.lcPeriMens
		laYears[m.ln,2] = movim.total
	ELSE
		laYears[m.lnAscan + 1 ] = laYears[m.lnAscan + 1] + movim.Total
	ENDIF
ENDSCAN
 
ASORT(laYears)
lcString = "Información por Período Mensual"+CHR(13) ;
	+"Entre "+TRANSFORM(m.lnAno1)+" y "+TRANSFORM(m.lnAno2)+CHR(13);
	+ m.lcRayado + CHR(13)
lntotal = 0
FOR i = 1 TO m.ln
	lcString = m.lcString ;
		+laYears[m.i,1] + SPACE(6);
		+TRANSFORM(laYears[m.i,2],"999,999,999.99") + CHR(13)
	lnTotal = lnTotal + laYears[m.i,2]
NEXT
 
 
 
lcString = m.lcstring ;
	+ m.lcRayado + CHR(13);
	+ PADR("Total",10," ")+TRANSFORM(m.lnTotal,"9,999,999,999.99") + CHR(13);
	+ m.lcRayado + CHR(13)
STRTOFILE(m.lcString,lcFileInfo,0)
MODIFY FILE &lcFileInfo NOEDIT
 
*</InfoMensual>
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 Eduardo Ureña Solano
Val: 114
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Crear variables por programación? VFP9

Publicado por Eduardo Ureña Solano (114 intervenciones) el 22/02/2016 23:31:50
Colega. Sólo es un ejemplo y es para mostrar la alternativa al uso de matrices.

Pretende una respuesta sencilla a lo que German pregunta.

Saludos
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
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 23/02/2016 14:37:14
Buenos dias Foro.
A Eduardo y Fidel José, muchas gracias por la gran ayuda.
Ambos aportes me serán muy útiles y me parecen muy intresantes, pero quisiera saber, cual de ellos me es más preciso para
aplicar y ahorrarme un millón de líneas en el siguiente código:
(Es para aplicar liquidaciones por días, meses y años según la tarifa:

1
2
3
4
5
6
7
8
9
10
11
12
13
nTarifa1_ = ROUND(tarifa1/IVA_,2)
nTdias1_ = IIF(tip1="D",lcRet1,IIF(lcRet1>0,Rta,0))  && lcRet1
nBruto1_ = IIF(tip1="D",ROUND(nTarifa1_*nTdias1_,2),ROUND(nTarifa1_*lcRet1,2))
nIva1_ = ROUND(nBruto1_*tIVA,2)
nPago1_ = ROUND(valor1+nIva1_,2)
dFcTrf1_ = f_fin1
 
nTarifa2_ = ROUND(tarifa2/IVA_,2)
nTdias2_ = IIF(tip2="D",lcRet2,IIF(lcRet2>0,Rta,0))  && lcRet2
nBruto2_ = IIF(tip2="D",ROUND(nTarifa2_*nTdias2_,2),ROUND(nTarifa2_*lcRet2,2)) && ROUND(nTarifa2_*nTdias2_,2)
nIva2_ = ROUND(nBruto2_*tIVA,2)
nPago2_ = ROUND(valor2+nIva2_,2)
dFcTrf2_ = f_fin2

y así sucesivamente....

1
2
3
4
nTdias_ = nTdias1_+nTdias2_+nTdias3_+nTdias4_+.....nTdiasN
nBruto_ = nBruto1_+nBruto2_+nBruto3_+nBruto4_+.....nBrutoN
nIva_ =      nIva1_+nIva2_+nIva3_+nIva4_+.....nIvaN
nTotal_ =   nPago1_+nPago2_+nPago3_+nPago4_+......nPagoN

Espero se entienda alguito de este lío... jejejeje
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

Crear variables por programación? VFP9

Publicado por Fidel José (657 intervenciones) el 23/02/2016 16:40:03
No alcanzo a comprender, en el código que envías, cuales son las dependencias.
En ese formulerío hay valores que no se determinan y otros que ofrecen dudas sobre el sentido que tengan.
También es un poco confuso utilizar "lcRet" como denominación cuando aparentemente podría ser una fecha o un número.
Y utilizar IVA_, nIva, y otras variedades escuetas para el que lee un código ajeno es una tortura.

nTarifa1_ = ROUND(tarifa1/IVA_,2)
De dónde sale tarifa1 y este IVA_ es (1 + lnAlicuota_Iva ) ?
Me parece que si aclaras un poco el tema es posible diseñar un solo método, que devuelva un objeto empty, cuyas propiedes se coleccionen en un cursor. Pero debes aclarar algo sobre la fuente de datos.
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
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 23/02/2016 19:00:20
Bueno.... TarifaN_ sale de una tabla Tarifas, las cuales se van dando año a año.
IVA_ es el 16% acá en colombia, tip1 o tipN es día o mes,
nTdias_, nBruto_, nIva_ y nTotal_ son las variables que van a recibir el total de las operaciones por cada año.

nTarifaN_ = ROUND(tarifa1/IVA_,2)
nTdiasN_ = IIF(tipN="D",lcRetN,IIF(lcRetN>0,Rta,0))
nBrutoN_ = IIF(tipN="D",ROUND(nTarifaN_*nTdiasN_,2),ROUND(nTarifaN_*lcRetN,2))
nIvaN_ = ROUND(nBrutoN_*tIVA,2)
nPagoN_ = ROUND(valor1+nIvaN_,2)
dFcTrfN_ = f_finN

Algo asi es lo que necesito, donde la N se vaya incrementando de acuerdo a los años que se van causando.

(Hasta yo ando enrredado...)

Mil gracias Don Fidel.
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

Crear variables por programación? VFP9

Publicado por Fidel José (657 intervenciones) el 24/02/2016 01:13:09
Germán
Sería mejor si empezamos por el principio:
1) Qué datos tienes. Puedes poner la estructura de la tabla?
2) Concretamente qué necesitas determinar con esos datos?

Puedes utilizar la siguiente rutina para extraer los campos de la tabla. Envía la salida a un archivo de texto plano y al clipboard de windows, por lo que, una vez ejecutada, lo puedes pegar directamente.

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
PROCEDURE Tabla_Struct
LPARAMETERS tcTabla
lnFields = AFIELDS(laFields,tcTabla)
lcString = "<Tabla name="+CHR(34)+tcTabla+CHR(34)+">"+CHR(13);
	+ CHR(9)+"<field_count>"+TRANSFORM(lnFields)+"</field_count>"+CHR(13);
	+ CHR(9)+"<field_list>"+CHR(13)
FOR i=1 TO lnFields
	lcString = m.lcString ;
	+ REPLICATE(CHR(9),2) ;
	+ "<field name="+CHR(34)+laFields[i,1]+CHR(34);
	+ "<type>"+laFields[i,2]+"</type>";
	+ "<lenght>"+TRANSFORM(laFields[i,3])+"</length>";
	+ "<dec>"+ TRANSFORM(laFields[i,4])+"</dec>"+"</field>" + CHR(13)
NEXT
lcString = m.lcString ;
	+CHR(9)+"</field_list>"+CHR(13)
 
lnTags = ATAGINFO(laTags,"",tcTabla)
IF lnTags > 0
	lcString = m.lcstring ;
		+CHR(9)+"<tag_count>"+TRANSFORM(lnTags)+"</tag_count>"+CHR(13);
		+CHR(9)+"<tag_list>" + CHR(13)
	FOR i=1 TO lnTags
		lcString = m.lcString ;
		+ REPLICATE(CHR(9),2) ;
		+ "<tag name="+CHR(34)+laTags[i,1]+CHR(34);
			+"<key>"+laTags[i,3]+"</key>"+"</tag>"+CHR(13)
	NEXT
	lcString = m.lcString ;
		+CHR(9)+"</tag_list>"+CHR(13)
ENDIF
lcString = m.lcString ;
	+"</Tabla>" + CHR(13)
 
STRTOFILE(m.lcsTring,"struct_"+tcTabla+".txt")
 
_cliptext = lcSTring
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
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 26/02/2016 15:05:43
Buenos dias Don Fidel... perdoneme la demora en contestar. Estaba fuera de la ciudad.
aca le envío la estructura del archivo VEHICULOS.DBF

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
<Tabla name="vehiculos">
	<field_count>33</field_count>
	<field_list>
		<field name="FACT"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="ST"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FICHO"<type>I</type><lenght>4</length><dec>0</dec></field>
		<field name="PLACA"<type>C</type><lenght>7</length><dec>0</dec></field>
		<field name="FING"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="ULTAB"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="FRING"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="FABN_ANT"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="ABONADO"<type>N</type><lenght>14</length><dec>2</dec></field>
		<field name="FULTPG"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="FSAL"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="PROPI"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="DIRECCION"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="DOCUM"<type>N</type><lenght>13</length><dec>0</dec></field>
		<field name="DV"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="TELEFONO"<type>N</type><lenght>10</length><dec>0</dec></field>
		<field name="COND"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="COD_CLI"<type>C</type><lenght>6</length><dec>0</dec></field>
		<field name="DEMANDA"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="JUZGADO"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="RADI"<type>C</type><lenght>15</length><dec>0</dec></field>
		<field name="COMIS"<type>C</type><lenght>25</length><dec>0</dec></field>
		<field name="SECUES"<type>C</type><lenght>30</length><dec>0</dec></field>
		<field name="MARCA"<type>C</type><lenght>15</length><dec>0</dec></field>
		<field name="LINEA"<type>C</type><lenght>25</length><dec>0</dec></field>
		<field name="MODELO"<type>N</type><lenght>4</length><dec>0</dec></field>
		<field name="FOTO"<type>C</type><lenght>45</length><dec>0</dec></field>
		<field name="GUARDAS"<type>C</type><lenght>6</length><dec>0</dec></field>
		<field name="INSPEC"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="FT_INV"<type>C</type><lenght>20</length><dec>0</dec></field>
		<field name="RECIBIDO"<type>N</type><lenght>13</length><dec>0</dec></field>
		<field name="SOTANO"<type>L</type><lenght>1</length><dec>0</dec></field>
		<field name="GASTOS"<type>N</type><lenght>1</length><dec>0</dec></field>
	</field_list>
	<tag_count>13</tag_count>
	<tag_list>
		<tag name="GUARDAS"<key>GUARDAS</key></tag>
		<tag name="SECUES"<key>SECUES</key></tag>
		<tag name="DEMANDA"<key>DEMANDA</key></tag>
		<tag name="FING"<key>FING</key></tag>
		<tag name="PLACA"<key>PLACA</key></tag>
		<tag name="ST"<key>ST</key></tag>
		<tag name="FACT"<key>FACT</key></tag>
		<tag name="RECIBIDO"<key>RECIBIDO</key></tag>
		<tag name="SOTANO"<key>SOTANO</key></tag>
		<tag name="FULTPG"<key>FULTPG</key></tag>
		<tag name="FACT_PLAC"<key>ALLTRIM(STR(FACT))+ALLTRIM(PLACA)</key></tag>
		<tag name="FICHO"<key>FICHO</key></tag>
		<tag name="FICHO_PLAC"<key>STR(FICHO)+ALLTRIM(PLACA)</key></tag>
	</tag_list>
</Tabla>

Y la que necesito arreglar adicionando campos a medida que se necesiten: PAGOS.DBF

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<Tabla name="pagos">
	<field_count>107</field_count>
	<field_list>
		<field name="FACT"<type>I</type><lenght>4</length><dec>0</dec></field>
		<field name="FICHO"<type>N</type><lenght>5</length><dec>0</dec></field>
		<field name="PLACA"<type>C</type><lenght>6</length><dec>0</dec></field>
		<field name="FING"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="FEMITE"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="FPAGO"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="ABN_ANT"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS"<type>N</type><lenght>5</length><dec>0</dec></field>
		<field name="IVA"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="BRUTO"<type>N</type><lenght>14</length><dec>2</dec></field>
		<field name="PAGO"<type>N</type><lenght>14</length><dec>2</dec></field>
		<field name="DESCUENTO"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="ACUMULADO"<type>N</type><lenght>14</length><dec>2</dec></field>
		<field name="TARIFA1"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM1"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE1"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS1"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO1"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA1"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO1"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA2"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM2"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE2"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS2"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO2"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA2"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO2"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA3"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM3"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE3"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS3"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO3"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA3"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO3"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA4"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM4"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE4"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS4"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO4"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA4"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO4"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA5"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM5"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE5"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS5"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO5"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA5"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO5"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA6"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM6"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE6"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS6"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO6"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA6"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO6"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA7"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM7"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE7"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS7"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO7"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA7"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO7"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA8"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM8"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE8"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS8"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO8"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA8"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO8"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA9"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM9"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE9"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS9"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO9"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA9"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO9"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA10"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM10"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE10"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS10"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO10"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA10"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO10"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA11"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM11"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE11"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS11"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO11"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA11"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO11"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TARIFA12"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="DOM12"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="FECCORTE12"<type>D</type><lenght>8</length><dec>0</dec></field>
		<field name="TDIAS12"<type>N</type><lenght>6</length><dec>0</dec></field>
		<field name="BRUTO12"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="IVA12"<type>N</type><lenght>10</length><dec>2</dec></field>
		<field name="PAGO12"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="PAGADOR"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="DOCUM"<type>N</type><lenght>13</length><dec>0</dec></field>
		<field name="DV"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="DIR_CLI"<type>C</type><lenght>40</length><dec>0</dec></field>
		<field name="TEL_CLI"<type>N</type><lenght>10</length><dec>0</dec></field>
		<field name="ST"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="EC"<type>C</type><lenght>1</length><dec>0</dec></field>
		<field name="RTE"<type>N</type><lenght>1</length><dec>0</dec></field>
		<field name="VLR_CANCEL"<type>N</type><lenght>12</length><dec>2</dec></field>
		<field name="TF"<type>N</type><lenght>1</length><dec>0</dec></field>
	</field_list>
	<tag_count>10</tag_count>
	<tag_list>
		<tag name="PLACA"<key>PLACA</key></tag>
		<tag name="FICHO"<key>FICHO</key></tag>
		<tag name="FACT"<key>FACT</key></tag>
		<tag name="FICHO_PLAC"<key>STR(FICHO)+ALLTRIM(PLACA)</key></tag>
		<tag name="FACT_PLACA"<key>ALLTRIM(STR(FACT)+PLACA)</key></tag>
		<tag name="WIZARD_1"<key>DTOS(FPAGO)+STR(FACT)</key></tag>
		<tag name="WIZARD_2"<key>STR(FACT)+STR(FACT)</key></tag>
		<tag name="EC"<key>EC</key></tag>
		<tag name="WIZARD_3"<key>STR(FACT)+DTOS(FING)</key></tag>
		<tag name="RTE"<key>RTE</key></tag>
	</tag_list>
</Tabla>

Mil gracias.
P.D.: Hasta yo tengo el cerebro enrredado!!!!
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

Crear variables por programación? VFP9

Publicado por Fidel José (657 intervenciones) el 26/02/2016 16:33:27
Germán.
Me da la impresión de que tienes un error en la estructuración de datos.
No podrás agreagar indefinidamente campos a una tabla y lo que tienes en pago es inmanejable.

Acá tenes una estructura de campos qe se repite
1
2
3
4
5
6
7
<field name="TARIFA2"<type>N</type><lenght>10</length><dec>2</dec></field>
<field name="DOM2"<type>C</type><lenght>1</length><dec>0</dec></field>
<field name="FECCORTE2"<type>D</type><lenght>8</length><dec>0</dec></field>
<field name="TDIAS2"<type>N</type><lenght>6</length><dec>0</dec></field>
<field name="BRUTO2"<type>N</type><lenght>12</length><dec>2</dec></field>
<field name="IVA2"<type>N</type><lenght>10</length><dec>2</dec></field>
<field name="PAGO2"<type>N</type><lenght>12</length><dec>2</dec></field>
lo que hace pensar, que en realidad se necesita una tabla secundaria que tenga esa estructura más el o los campos clave (placa, número de trámite (fact ?, ficho ? ) y sin los sufijos numéricos. O sea, en lugar de pensar en forma horizontal, cuando se trbaja con tablas, lo mejor es tratar la información en forma vertical y recurrir a los medios de recuperación de informarción. O sea, al revés de lo que uno suele hacer con planillas Excel o similares, hay que aprovechar la potencia relacional para simplificar.

En Visual Fox con DBF tenés una variedad de opciones para armar conjuntos de información con datos guardados.
SELECT SQL

INDEXSEEK()
SCATTER / GATHER con INSERT INTO

En cambio, ni siquiera pienses en SET FILTER porque es un comando tan cómodo como detestable.

Combinación de ambas.
Cuanto menor desarrollo horizontal (campos) tengan las tablas, más eficiente será la recuperación de información, más manejables los índices, más rápida cualquier operatoria sobre las tablas.

También veo que tienes demasiados índices compuestos (ej. DTOS(FPAGO)+STR(FACT) ) que no te van a ayudar si recuperas información con SELECT SQL. Con respecto a los índices de tablas, hay que crear todos los necesarios pero ni uno más.
Y en general, serán más fáciles de mantener los índices simples (index on DTOS(FPAGO), INDEX ON FACT.
Los índices deben pensarse solamente para recuperar información y no para mostrarla. Para mostrar información hay que extraer lo qe se quiere mostrar en un cursor o tabla temporal y crear ahí la ordenación para el informe, reporte o control grid.

No sé que estás haciendo. Parece un sistema de multas o algo así. Tal vez tengas que estudiar nuevamente las dependencias, porque de la estructura que muestras no surge nada.
1) Cuáles son los eventos a registrar ?
2) Qué información se espera obtener ?
3) A partir de qué datos se puede elaborar dicha información ?
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
sin imagen de perfil

Crear variables por programación? VFP9

Publicado por Germán (7 intervenciones) el 27/02/2016 21:36:42
Buenas tardes Don Fidel...

Según veo, para mejorar el programa, debo redefinir la estructura de la base de datos como lo indicas. Es lo más lógico.
Me meteré en camisa de fuerza luego de esto....

El programa es para un parqueadero tipo fiscal, donde solo se tienen vehículos envargados.

Mil Gracias por tu gran 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