*<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