FoxPro/Visual FoxPro - Nombres de Campos por programación

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Nombres de Campos por programación

Publicado por Carlos ACS (12 intervenciones) el 15/05/2018 17:36:19
Hola Amigos Expertos...
mi consulta es: como puedo hacer para nombrar determinados campos, de un cursor, de acuerdo al mes actual, es decir si estamos en Mayo 2018, el primer campo debe ser llamado MAYO2018, el siguiente campo JUNIO2018, el tercero JULIO2018... y así sucesivamente hasta llegar a MAYO2019?
Cualquier Ayuda, estaré Muy Agradecido...
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

Nombres de Campos por programación

Publicado por Fidel José (657 intervenciones) el 16/05/2018 00:20:42
No sé si esto es lo que buscas

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
PROCEDURE CREATE_MONTH_CURSOR
*------------------------------
* tdFecha 			Fecha del mes de inicio
* tnPeriodos		Cantidad de Períodos
* tcNameCursor		Nombre del cursor a crear
* tcString_Prev		Campos a la izquierda
* tcString_post		Campos a la derecha
*		formato		"<concepto,c,40><rev,L><total,n,12,2>"
*					"<total,n,12,2>
* Ejemplo ------------------------------------------------------------
*	ldFecha = date()
*	lnPeriodos = 12
*	lcString_prev = "<concepto,c,40><rev,l>"
* 	lcString_post = "<total,n,12,2>
*	lcCursor = Create_Month_Cursor(m.ldFecha,m.lnPeriodos,,m.lcString_prev,m.lcString_Post)
*	select (m.lcCursor)
* -----------------------------------------
LPARAMETERS tdFecha,tnPeriodos,tcNameCursor,tcString_prev,tcString_post
 
TRY
	LOCAL LOEX AS EXCEPTION
 
	LOCAL ldFirst,i,;
		lnLinPrev,;
		lnLinPost,;
		lnFields,;
		lnLines_add
 
	LOCAL ARRAY laFields(1,4)
 
	lnLinPrev = 0
	lnLinPost = 0
	lnFields = 0
 
	IF VARTYPE(m.tdFecha)#"D" OR EMPTY(m.tdFecha)
		tdFecha = DATE()
	ENDIF
	IF VARTYPE(m.tnPeriodos)#"N" OR EMPTY(m.tnPeriodos)
		tnPeriodos = 12
	ENDIF
	IF VARTYPE(m.tcNameCursor)#"C" OR EMPTY(m.tcNameCursor)
		tcNameCursor = "cmc"+SYS(2015)
	ENDIF
	IF VARTYPE(m.tcString_prev)#"C"
		tcString_Prev = ""
	ENDIF
	IF VARTYPE(m.tcString_post)#"C"
		tcString_Post = ""
	ENDIF
 
	IF !EMPTY(m.tcString_prev)
		lnLinPrev = ALINES(lalines,UPPER(m.tcString_prev),16,">")
		lnFields = m.lnFields + m.lnLinPrev
		DIMENSION laFields(m.lnFields,4)
		FOR i = 1 TO m.lnLinPrev
			lnCount = ALINES(laValues,CHRTRAN(laLines[i],"<>",""),1+4,CHR(44))
			laFields[i,1] = laValues[1]
			laFields[i,2] = laValues[2]
			laFields[i,3] = IIF(m.lnCount>2,VAL(laValues[3]),0)
			laFields[i,4] = IIF(m.lnCount>3,VAL(laValues[4]),0)
		NEXT
	ENDIF
	IF !EMPTY(m.tcString_Post)
		lnLinPost = ALINES(lalines,UPPER(m.tcString_post),16,">")
	ENDIF
 
	ldFirst = DATE(YEAR(m.tdFecha),MONTH(m.tdFecha),1)
	lnFields = m.lnFields + m.tnPeriodos
	DIMENSION laFields(m.lnFields,4)
	FOR i = 1 TO m.tnPeriodos
		laFields[m.i + m.lnLinPrev,1] = LEFT(CMONTH(m.ldFirst),3)+TRANSFORM(YEAR(m.ldFirst))
		laFields[m.i + m.lnLinPrev,2] = "N"
		laFields[m.i + m.lnLinPrev,3] = 12
		laFields[m.i + m.lnLinPrev,4] = 2
 
		ldFirst = GOMONTH(m.ldfirst,1)
	NEXT
	IF !EMPTY(m.tcString_post)
		lnLinPost = ALINES(lalines,UPPER(m.tcString_post),16,">")
		lnLines_add = m.lnFields
		lnFields = m.lnFields + m.lnLinPost
		DIMENSION laFields(m.lnFields,4)
		FOR i = 1 TO m.lnLinPost
			lnCount = ALINES(laValues,CHRTRAN(laLines[i],"<>",""),1+4,CHR(44))
			laFields[i + m.lnLines_add,1] = laValues[1]
			laFields[i + m.lnLines_add,2] = laValues[2]
			laFields[i + m.lnLines_add,3] = IIF(m.lnCount>2,VAL(laValues[3]),0)
			laFields[i + m.lnLines_add,4] = IIF(m.lnCount>3,VAL(laValues[4]),0)
		NEXT
	ENDIF
 
	CREATE CURSOR (m.tcNameCursor) FROM ARRAY laFields
CATCH TO LOEX
	LOEX.USERVALUE = PROGRAM()
	* SHOWERROR(LOEX)        && rutina que muestra el error
	tcNameCursor = null
FINALLY
 
ENDTRY
RETURN m.tcNameCursor
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 Abel
Val: 642
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Nombres de Campos por programación

Publicado por Abel (286 intervenciones) el 16/05/2018 15:04:23
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
Local nMes, dDia1, dDia2, dMes1, dMes2, nDify, cMeses, nCant, nX, nY, cCampo, cNom
&&/ * Aquí defines el rango de fechas.
dDia1    = Date()
dDia2    = Date()+365
cCampo = ""
cStruc    = "c(30)" 	&& Estrucutra de campos: ej. c(30) Caracteres=30.
dMes1   = Month(dDia1)
dMes2   = Month(dDia2)
nDify      = Year(dDia2)-Year(dDia1)
cMeses = "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Setiembre,Octube,Noviembre,Diciembre"
&&/ * Contar cantidad de meses
If nDify>0
    nCant = ((dMes2+(12*nDify))-dMes1)+1
Else
    nCant = (dMes2-dMes1)+1
Endif
&&/ * Leer y mostrar meses y años
nMes = dMes1
For nX=Year(dDia1) To Year(dDia2)
    nConteo = Iif(nX=Year(dDia2),dMes2,12)
    For nY=nMes To nConteo
        cMes = Getwordnum(cMeses,nMes,",")
        nMes = nMes+1
        nMes = Iif(nMes=13,1,nMes)
        cNom = cMes+Transform(nX)
        ? cNom         && MUESTRA MES A MES.
        cCampo = cCampo+Iif(Empty(cCampo),"",",")+cNom+" "+cStruc
    Next
Next
cCampo = "("+cCampo+")"
 
Select Select(1)
Create Cursor MiTabla &cCampo
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
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

Nombres de Campos por programación

Publicado por Eduardo Ureña Solano (114 intervenciones) el 16/05/2018 16:20:26
Es muy simple. Yo lo haría más o menos así, por supuesto que en su caso ud debe valorar en qué mes empezar y en qué mes terminar. No es tan complicado:

CREATE CURSOR Periodo (dato c(1))

FOR I=1 TO 12
Sufijo="MES"+ALLTRIM(STR(I))
ALTER TABLE Periodo ADD COLUMN &Sufijo n(12,2)
NEXT I

Saludos

Eduardo
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: 8
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Nombres de Campos por programación

Publicado por Carlos ACS (12 intervenciones) el 17/05/2018 02:00:46
Muchas Gracias por su Gran Ayuda... logre hacerlo; estoy Muy Agradecido.
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