FoxPro/Visual FoxPro - Generar Fechas

   
Vista:

Generar Fechas

Publicado por zuko bezuko7@hotmail.com (9 intervenciones) el 28/01/2013 16:14:24
Por favor si alguien me puede ayudar, tengo que generar varios ordenes de pago para cada cliente, y tengo un campo fecha que tiene que ir cambiando en cada orden de pago, el dia es fijo lo q cambiaria seria el mes y el anho.
Stoy probando en un formulario separado, pero no me funciona

En el init del formulario tengo
thisform.text1.Value = {} en text1 ingreso la fecha

En el procedimiento Lostfocus de text1 tengo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dia=day(thisform.text1.Value)
mes=month(thisform.text1.Value)
anho=year(thisform.text1.Value)
fecha=ALLTRIM(str(dia))+"/"+ALLTRIM(str(mes))+"/"+ALLTRIM(str(anho))
thisform.text6.Value = fecha    Aqui muestro la fecha para probar y el dia me trae 9 indistintamente al dia  q ingrese
c, seria la cantidad de orden que debo generar
FOR c=1 TO 11
	IF mes <12 then
		mes=mes+1
	ELSE
		anho=anho+1
		mes=1
	endif
	fecha=ALLTRIM(str(dia))+"/"+ALLTRIM(str(mes))+"/"+ALLTRIM(str(anho));
	+CHR(13)
	*thisform.edit1.Value=fecha  Y aqui quiero mostrar las fechas en un List para probar, pero me da error
NEXT
thisform.Refresh

Espero ayuda, gracias
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

Generar Fechas

Publicado por es_binario (757 intervenciones) el 28/01/2013 21:21:02
Yo tengo una rutina y no me da problema... para comenzar debes quitar tu init thisform.text1.Value = {}
y en el init pero del contenedor de la fecha le debes poner esto

1
This.Value = DATE()


en mi caso es Txtfechaventa.

Bueno yo lo guardo en un cursor...

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
FOR a = 1 TO pagos_a
	*// TIPO DE PAGO
	DO CASE
		CASE thisform.optiongroup1.Value = 1
			fecha = fecha + 7
		CASE thisform.optiongroup1.Value = 2
			*// dia 2 y dia 16
			fecha = fecha + 15
		CASE thisform.optiongroup1.Value = 3
			*// Suma 1 para meses
			fecha = GOMONTH(nva_fecha, a)
		CASE thisform.optiongroup1.Value = 4
			*// Suma 1 para meses
			fecha = fecha + 14
	ENDCASE
 
	*// dia de pago
	DO CASE
		CASE DOW(fecha) = 1
			el_dia = "DOM"
		CASE DOW(fecha) = 2
			el_dia = "LUN"
		CASE DOW(fecha) = 3
			el_dia = "MAR"
		CASE DOW(fecha) = 4
			el_dia = "MIE"
		CASE DOW(fecha) = 5
			el_dia = "JUE"
		CASE DOW(fecha) = 6
			el_dia = "VIE"
		CASE DOW(fecha) = 7
			el_dia = "SAB"
	ENDCASE
 
	INSERT INTO pagos_cur (pag, pago, fechaa, dia_semana) VALUES (a,Thisform.Txtpagos.Value, fecha, el_dia)
ENDFOR


lo que ocurre que en mi programa yo utilizo las 4 formas de pago...

lo unico que a mi mi cliente me requiriro que siempre se manejara el dia primero de cada mes y un maximo de 6 dias para pagar es decir el pago es a tiempo si paga entre el dia 1 al 6

esta es la imagen de como se ve el cursor...

1
http://www.mediafire.com/view/?3vdtumqfmrk5qk3


asi calculo la fecha nueva

1
2
3
4
5
6
7
8
9
CREATE CURSOR pagos_cur (pag i, pago b(8), fechaa d, dia_semana c(3))
fecha = thisform.txtFecha.Value
	*// si el dia es igual a 1 no hay problema
	LOCAL nva_fecha
	IF DAY(fecha) <> 1
		nva_fecha = fecha - DAY(fecha) + 1
	ELSE
		nva_fecha = fecha
	ENDIF


es viejito mi programa ya va a cumplir 5 a;os pero funciona a la perfeccion. espero te sirba 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

Generar Fechas

Publicado por Fidel (558 intervenciones) el 29/01/2013 13:35:13
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
* Init del Formulario
With thisform.Text1
        .Format="D"
        .Value=date()    && o   .Value=Ctod("")
endwith
 
* Tex1  LostFocus Event
IF !EMPTY(THIS.Value)
	dia=Day(ThiS.value)
	mes=Month(this.Value)
	ano=Year(this.Value)
 
	nVeces= 11 && (Cantidad de repeticiones)
	local array gaFecha(nVeces)
	lcFecha=""
	FOR I=1 TO nVeces
		if mes<12
			mes=mes+1
		else
			ano=ano+1
			mes=1
		endif
		gaFecha[i]=Date(ano,mes,dia)
		lcFecha=lcFecha+Dtoc(gaFecha[i])+chr(13)
	next
	Thisform.Edit1.Value=lcFecha
ENDIF
* Ahí las fechas te quedan en la matriz gaFecha.
For i=1 to alen(gaFecha)
           Procedure_OrdendePago(gaFecha[i])
next
 
* También puedes utilizar la función GOMONTH()
* Text1 lostFocus Event
IF !EMPTY(THIS.Value)
	nVeces= 11 && (Cantidad de repeticiones)
	local array gaFecha(nVeces)
	lcFecha=""
	FOR I=1 TO nVeces
		gaFecha[i]=GOMONTH(this.Value,i)
		lcFecha=lcFecha+Dtoc(gaFecha[i])+chr(13)
	next
	Thisform.Edit1.Value=lcFecha
ENDIF

La recomendación sería colocar el código en un botón de Generar / Aceptar, para evitar que la salida del foco dispare el procedimiento.
1
2
3
4
5
6
7
8
9
10
IF !EMPTY(THISform.Text1.Value)
	nVeces= 11 && (Cantidad de repeticiones)
	local array gaFecha(nVeces)
	lcFecha=""
	FOR I=1 TO nVeces
		gaFecha[i]=GOMONTH(thisform.text1.Value,i)
		lcFecha=lcFecha+Dtoc(gaFecha[i])+chr(13)
	next
	Thisform.Edit1.Value=lcFecha
ENDIF
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 Edgar Zambrano

Generar Fechas

Publicado por Edgar Zambrano (72 intervenciones) el 31/01/2013 17:07:47
muy buena tu respuesta solo que no entiendo para que la variable array con solo colocarlo de esta forma funciona y así te ahorras rendimiento.

1
2
3
4
5
6
7
8
9
IF !EMPTY(THISform.Text1.Value)
	nVeces= 11 && (Cantidad de repeticiones)
	local lcFecha
	lcFecha=""
	FOR i=1 TO nVeces
		lcFecha=lcFecha+Dtoc(gomonth(thisform.text1.Value,i))+chr(13)
	next
	Thisform.Edit1.Value=lcFecha
ENDIF
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

Generar Fechas

Publicado por Fidel (558 intervenciones) el 01/02/2013 16:24:14
Hola Edgar
El tema del array es una previsión para generar luego los pagos con las fechas ya generadas.
También se puede lanzar el proceso en cada ciclo, sin generar el array.
Esto se orienta a la solución de problemas en forma separada. Suponte que este proceso fuera necesario en varios sitios. Entonces puedes generar una clase Custom con un procedimiento que haga estos cálculos y genera un Array con los resultados. En este caso defines el ARray como propiedad de la clase y la manejas desde el form como sea neceario.
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
* Suponiendo un Textbox Text1 Format="D" donde ingreso la fecha base
*                        un Spinner Spinner1 donde ingreso la cantidad de pagos
* Una clase (vcx) que tiene una clase Custom llamada MyCust, en la que creamos un método
* llamado "GetFechas" y una propiedad matriz llamada "garray"
 
* MyCust
* INIT
This.Addproperty("garray[1]",ctod(""))   && o lo defines manualmente en el diseñador.
* getfechas (método)
******************************
LPARAMETERS xdDia1,xnveces
LOCAL i
if Vartype(xnVeces)#"N".or.empty(xnVeces)
       xnVeces=1
endif
if empty(xdDia1)
       RETURN .F.
ENDIF
Dimension This.garray(xnVeces)
FOR I=1 TO xnVeces
	This.garray[i]=GOMONTH(xdDia,i)
next
 
* Pegas la Custom al Formulario. (alternativa  oCust=NewObject("MyCust","NombreBiblioteca") )
* Ahora el comando haría algo así
lGen=Thisform.MyCust1.GetFechas(thisform.Text1.value,Thisform.Spinner1.Value)
IF lGen
        For i=1 to alen(thisform.MyCust1.garray)
                GeneraPago(thisform.MyCust1.gArray[i])
        NEXT
ENDIF


El tema del Edit1 que pone Zuko, según entiendo, era solamente para verificar que el proceso está generando lo que quiere. Pero la finalidad era generar unos pagos con fecha diferida.
Saludos
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