FoxPro/Visual FoxPro - Controlar una secuencia De numeros

 
Vista:
sin imagen de perfil

Controlar una secuencia De numeros

Publicado por Christhian (3 intervenciones) el 14/03/2015 16:59:52
Muy Buenas estoy desarrollando un sistema que muestra las ventas de factura y necesito que el sistema lleve un control de secuencia en los numeros de factura es decir que no me falte ninguna factura (este control lo haria con el numero de fac)
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

Controlar una secuencia De numeros

Publicado por Fidel José (558 intervenciones) el 15/03/2015 15:31:09
Para darte una idea te paso el código siguiente.
La primer parte ("<InventoCursorFacturas>") está dedicada a inventar un cursor con números de facturas, fechas e importes. Tiene un par de segmentos que crean facturas repetidas y borran otras, para probar el funcionamiento.
En la realidad, esta parte se reemplaza por un cursor extraido del archivo de facturas.

La segunda parte ("<revision>") controla que no falten facturas y que no se repitan los números.

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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
*<InventoCursorFacturas>
	lnMult = 126.35
	ldFechaINi=DATE(2015,3,1)
	lnLastFactura=16440
	lnFacDay=15
	lnPas=0
 
 
	CREATE CURSOR curFactura ("fecha" d ,"factura" n(12,0) ,"importe" n(12,2))
	RAND(-1)
	FOR i=1 TO 100
		lnPas = lnPas + 1
		IF lnPas > lnFacDay
			ldFechaIni = ldFechaIni + 1
			lnPas = 0
		ENDIF
		lnLastFactura = lnlastFactura + 1
		lnImporte=ROUND(RAND()*lnMult , 2)
		INSERT INTO curFactura (fecha,factura,importe) ;
			VALUES (ldFechaIni, lnLastFactura , lnImporte)
	NEXT
 
	*<CrearBaches>
		SELECT curFactura
		FOR i=1 TO 6
			GO CEILING(RAND()*100)
			DELETE
		NEXT
	*</CrearBaches>
 
	*<CrearRepeticiones>
		FOR i=1 TO 6
			GO CEILING(RAND()*100)
			SCATTER TO laPase
			INSERT INTO curFActura FROM ARRAY lapase
		NEXT
	*</CrearRepeticiones>
 
	*<IndexarCursor>
		SELECT curFactura
		INDEX on factura TAG iFactura
		GO top
	*</IndexarCursor>
 
*</InventoCursorFacturas>
 
 
*<Revision>
	LOCAL ARRAY laFalta(1,3) , laRepite(1,3) , laCount(1)
	LOCAL lnFalta , lnRepite ,;
		lcString,ldlastFecha,lcFileInf,;
		ldFecha,lnLastFac
 
	SELECT curFactura
	SET ORDER TO IFACTURA   && FACTURA
	GO bott
	lnLastFac=curFactura.factura
	ldlastFEcha=curFactura.fecha
	GO top
	lnFactura = curFactura.Factura
	ldFecha = curFactura.fecha
 
	STORE 0 TO lnFalta, lnRepite ,lnCount
 
	*Archivo de Informe
	lcFileInf=ADDBS(FULLPATH(""))+"Revision_Facturas_"+DTOS(DATE())+".txt"
	* Encabezado del informe
	lcString="<RevisionFacturas>"+CHR(13);
		+REPLICATE(CHR(9),1)+"<timestamp>"+transform(DATETIME())+"</timestamp>"+CHR(13);
		+REPLICATE(CHR(9),1)+"<firstfact>"+TRANSFORM(lnFactura)+"</firstfact>"+CHR(13);
		+REPLICATE(CHR(9),1)+"<lastfact>"+TRANSFORM(lnLastFac)+"</lastfact>"+CHR(13);
		+REPLICATE(CHR(9),1)+"<firstdate>"+TRANSFORM(ldFecha)+"</firstdate>"+CHR(13);
		+REPLICATE(CHR(9),1)+"<lastdate>"+TRANSFORM(ldLastFecha)+"</lastdate>"+CHR(13)
 
	SCAN
 
		* Repeticiones
		IF ASCAN(laCount,curFactura.Factura)>0
			lnRepite = lnRepite + 1
			DIMENSION laRepite(lnREpite,3)
			laRepite[lnRepite,1]=curFactura.Factura
			laRepite[lnRepite,2]=curFactura.fecha
			laRepite[lnRepite,3]=RECNO("curFactura")
 
		ELSE
			lnCount = lnCount + 1
			DIMENSION laCount(lnCount)
			laCount[lnCount] = curFActura.factura
		ENDIF
 
		*Faltantes
 
		IF lnFactura < curFActura.factura
			FOR i=lnFactura TO curfactura.factura - 1
				lnFalta = lnFalta + 1
				DIMENSION laFalta(lnFalta,3)
				laFalta[lnFalta,1]=i
				laFalta[lnFalta,2]=ldFecha
				laFalta[lnfalta,3]=curFActura.fecha
			NEXT
 
 
		ENDIF
		lnFactura = curFactura.factura + 1
		ldFecha=curFActura.fecha
	ENDSCAN
 
	IF lnRepite>0
		lcString=m.lcString +CHR(13)+CHR(9)+ "<repetidas>"+CHR(13)
 
		FOR i=1 TO lnFalta
			lcString=m.lcString ;
				+REPLICATE(CHR(9),2)+"<factura>"+CHR(13);
				+REPLICATE(CHR(9),3)+"<numero>"+TRANSFORM(laRepite[i,1])+"</numero>"+CHR(13);
				+REPLICATE(CHR(9),3)+"<fecha>"+TRANSFORM(laRepite[i,2])+"</desde>"+CHR(13);
				+REPLICATE(CHR(9),3)+"<record>"+TRANSFORM(laRepite[i,3])+"</record>"+CHR(13);
				+REPLICATE(CHR(9),2)+"</factura>"+CHR(13)
		NEXT
		lcString=m.lcString +CHR(9)+ "</repetidas>"+CHR(13)
 
	ENDIF
 
	IF lnFalta>0
		lcString=m.lcString +CHR(13)+ CHR(9)+"<faltantes>"+CHR(13)
 
		FOR i=1 TO lnFalta
			lcString=m.lcString ;
				+REPLICATE(CHR(9),2)+"<factura>"+CHR(13);
				+REPLICATE(CHR(9),3)+"<numero>"+TRANSFORM(laFalta[i,1])+"</numero>"+CHR(13);
				+REPLICATE(CHR(9),3)+"<fecha>"+CHR(13);
				+REPLICATE(CHR(9),4)+"<desde>"+TRANSFORM(laFalta[i,2])+"</desde>"+CHR(13);
				+REPLICATE(CHR(9),4)+"<hasta>"+TRANSFORM(laFalta[i,3])+"</hasta>"+CHR(13);
				+REPLICATE(CHR(9),3)+"</fecha>"+CHR(13);
				+REPLICATE(CHR(9),2)+"</factura>"+CHR(13)
		NEXT
		lcString=m.lcString +CHR(9)+ "</faltantes>"+CHR(13)
 
	ENDIF
	lcString=m.lcString ;
		+"</RevisionFacturas>"+CHR(13)
 
 
	IF EMPTY(lnFalta) AND EMPTY(lnRepite)
		MESSAGEBOX("No hay facturas faltantes ni repetidas",0,"Revisión de Facturas")
	ELSE
		MESSAGEBOX("Vea el archivo de diferencias.",0,"Revisión de Facturas")
		STRTOFILE(lcString,lcFileInf)
		MODIFY FILE &lcFileInf NOEDIT
 
	ENDIF
 
*</Revision>
SELECT curFactura
USE
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

Controlar una secuencia De numeros

Publicado por Christhian (3 intervenciones) el 17/03/2015 15:34:47
Gracias amigo me sirvió mucho
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