DO WHILE .T. STORE 'PURGE OLD FILES' TO TOP1 DO TOP STORE ' ' TO LLP SET EXCLUSIVE ON @ 8,0 SAY 'ALL FILES MARKED WITH D WILL BE DELETED EXCEPT INVOICES' @ 10,0 SAY 'ALL FILES MARKED WITH P WILL BE PURGED INTO INVPURGE EXCEPT ' @ 11,0 SAY 'UNPAID INVOICES, WO NOT COMPLETED OR NOT INVOICED AND QUOTES FOR' @ 12,0 SAY 'AUTO INVOICE QUOTES,INVOICES WITH STATE TAX NOT PAID.' STORE ' ' TO MSELL @ 14,0 SAY 'PRESS C TO CONTINUE - ' GET MSELL PICTURE '!' @ 16,50 SAY 'PRINTER MUST BE ON !!' READ IF CL = 1 PRESSED = LASTKEY() IF PRESSED = 27 RETURN ENDIF ENDIF IF MSELL <> 'C' LOOP ENDIF SET PRINT ON SET PRINTER TO TEMP @ 4,0 CLEAR ? 'BACKING UP ALL FILES .' COPY FILE INVOICE.DBF TO INVOICE.BAK COPY FILE INVPURGE.DBF TO INVPURGE.BAK COPY FILE INVMAIN.DBF TO INVMAIN.BAK COPY FILE INVMAINP.DBF TO INVMAINP.BAK STORE ' ' TO LLQ ? 'DELETING FILES MARKED FOR DELETION ... SEARCHING' SELECT 1 USE CUSTOMER INDEX CUSTNUM,NAME SET ORDER TO 1 SELECT 2 USE INVOICE SELECT 4 USE INVMAIN SELECT 2 DO WHILE .NOT. EOF() IF PURGE <> 'D' .OR. INUMBER <> 0 SKIP LOOP ENDIF DELETE STORE INUMBER TO I1 STORE QNUMBER TO Q1 STORE SNUMBER TO S1 ? 'FILE DELETED ',' REC#',STR(RECNO(),8,0),' I#',I1,' Q#',Q1,' S#',S1 SELECT 4 GOTO TOP DO WHILE .NOT. EOF() IF INUMBER = I1 .AND. QNUMBER = Q1 .AND. SNUMBER = S1 DELETE ENDIF SKIP ENDDO SELECT 2 SKIP ENDDO CLOSE DATA ? 'PACKING FILES' USE INVOICE PACK COUNT FOR INUMBER <> 99959 TO REC1 USE INVMAIN PACK COUNT FOR INUMBER <> 99959 TO REC2 *USE INVPURGE *REPLACE ALL PURGE WITH ' ' *COUNT FOR INUMBER <> 99959 TO REC3 *USE INVMAINP *REPLACE ALL PURGE WITH ' ' *COUNT FOR INUMBER <> 99959 TO REC4 *STORE REC1+REC3 TO REC1 *STORE REC2+REC4 TO REC2 ? 'CHECKING PURGE FOR R' USE INVOICE REPLACE ALL PURGE WITH ' ' FOR PURGE = 'R' ? 'COUNTING FOR PURGE = P' COUNT FOR PURGE = 'P' TO STATP ? STATP ? 'COUNTING FOR PURGE = D AND INUMBER = 0' COUNT FOR PURGE = 'P' .AND. INUMBER = 0 TO STATD ? STATD ? 'REINDEXING FILES' CLOSE DATA SELECT 2 USE INVOICE SELECT 4 USE INVMAIN INDEX INVMAIN,QUOMAIN,SCHMAIN REINDEX SELECT 5 USE INVPURGE ? 'CHECKING MARKED FILES' *CHECK ALL FILES MARKED WITH P TO SEE IF THEY ARE O.K. TO PURGE SELECT 2 LOCATE FOR PURGE = 'P' DO WHILE .NOT. EOF() SELECT 2 ? 'RECORD # -', STR(RECNO(),5,0), ' ', STR(INUMBER,5,0), ' ', STR(QNUMBER,5,0) , ' ' , STR(SNUMBER,5,0) *? 'CHECKING CHEKSUM' STORE ' ' TO MMM DO CHECKSUM SELECT 2 IF CHECKSUM <> MMM ? 'CHECKSUM BAD' CONTINUE LOOP ELSE * ? 'O.K.' ENDIF IF SNUMBER <> 0 SELECT 4 SET ORDER TO 3 SKIP 0 SELECT 2 STORE SNUMBER TO LLL STORE 'SNUMBER' TO LRR ENDIF IF QNUMBER <> 0 SELECT 4 SET ORDER TO 2 SKIP 0 SELECT 2 STORE QNUMBER TO LLL STORE 'QNUMBER' TO LRR ENDIF IF INUMBER <> 0 SELECT 4 SET ORDER TO 1 SKIP 0 SELECT 2 STORE INUMBER TO LLL STORE 'INUMBER' TO LRR ENDIF SELECT 2 *CHECKING TO SEE IF INVOICE IS PAID STORE TOTCOST+TAX TO TOTAMT IF INUMBER <> 0 .AND. STR(TOTAMT,10,2) <> STR(AMTPAID,10,2) *TRY SETTING TOTALS DO SETTOT IF INUMBER <> 0 .AND. STR(TOTAMT,10,2) <> STR(AMTPAID,10,2) ? 'INUMBER -',STR(INUMBER,5,0),' WITH TOTAMT <> TO AMTPAID REJECTED FROM MERGE !!' ? STR(TOTCOST,10,2),' + ',STR(TAX,10,2),' SHOULD = ',STR(AMTPAID,10,2) REPLACE PURGE WITH ' ' SKIP LOOP ENDIF ENDIF *CHECKING TO SEE IF WO IS COMPLETE IF SNUMBER <> 0 .AND. DTOC(COMPLETED) = ' / / ' ? 'SNUMBER -',STR(SNUMBER,5,0),' NOT COMPLETED REJECTED FROM MERGE !!' REPLACE PURGE WITH ' ' SKIP LOOP ENDIF **+*CHECKING TO SEE IF QUOTE IS A REPEATED QUOTE (NEXTDUE <> ' / / ' IF QNUMBER <> 0 .AND. DTOC(NEXTDUE) <> ' / / ' ? 'QNUMBER -',STR(QNUMBER,5,0),' IS A REPEATED QUOTE (NEXTDUE <> / / ) REJECTED FROM MERGE !!' REPLACE PURGE WITH ' ' SKIP LOOP ENDIF SELECT 2 REPLACE PURGE WITH 'R' STORE VAL(SUBSTR(CHECKSUM,1,8)) TO LLT,LLR SELECT 4 SKIP 0 SEEK LLL IF EOF() ? 'EOF() NO FILES FOUND IN INVMAIN.DBF',' ',LRR,'=',STR(LLL,8,0) ENDIF DO WHILE &LRR = LLL REPLACE PURGE WITH 'R' STORE LLT-1 TO LLT SKIP ENDDO SELECT 2 IF LLT <> 0 ? 'MAJOR ERROR, INVALID LINE COUNT IN INVMAIN WHILE REPLACING PURGE WITH R' ? 'CHECKSUM',CHECKSUM,' ','LLT',STR(LLT,8,0),STR(LLR,8,0),STR(LLL,8,0),LRR STORE 'Y' TO ERROR ELSE ? 'PURGE O.K. ' ENDIF SELECT 2 STORE INUMBER TO I1 STORE QNUMBER TO Q1 STORE SNUMBER TO S1 SELECT 5 LOCATE FOR INUMBER = I1 .AND. QNUMBER = Q1 .AND. SNUMBER = S1 IF .NOT. EOF() ? 'DUPLICATE FILE ' + 'INVOICE REC# - ' + STR(UU,8,0) + 'INVPURGE REC# - ' + STR(RECNO(),8,0) STORE 'Y' TO ERROR ENDIF SELECT 2 CONTINUE ENDDO USE INVPURGE APPEND FROM INVOICE FOR PURGE = 'R' USE INVMAINP APPEND FROM INVMAIN FOR PURGE = 'R' USE INVOICE DELETE FOR PURGE = 'R' USE INVMAIN DELETE FOR PURGE = 'R' USE INVOICE COUNT FOR QNUMBER <> 99959 TO MREC1 REPLACE ALL PURGE WITH ' ' FOR PURGE <> 'W' USE INVMAIN COUNT FOR QNUMBER <> 99959 TO MREC2 REPLACE ALL PURGE WITH ' ' USE INVPURGE REPLACE ALL PURGE WITH ' ' COUNT FOR INUMBER <> 99959 TO MREC3 USE INVMAINP REPLACE ALL PURGE WITH ' ' COUNT FOR INUMBER <> 99959 TO MREC4 STORE REC1+REC3 TO REC1 STORE MREC1+MREC3 TO MREC1 STORE REC2+REC4 TO REC2 STORE MREC2+MREC4 TO MREC2 IF REC1 <> MREC1 ? 'FILE LENGTH COMPARE ERROR IN INVOICE - INVPURGE' STORE 'Y' TO ERROR ENDIF IF REC2 <> MREC2 ? 'FILE LENGTH COMPARE ERROR IN INVMAIN - INVMAINP' STORE 'Y' TO ERROR ENDIF IF ERROR = 'Y' ? 'RESTORING ALL INV FILES .' * COPY FILE INVOICE.BAK TO INVOICE.DBF * ? 'RESTORING ALL INV FILES ..' * COPY FILE INVPURGE.BAK TO INVPURGE.DBF * ? 'RESTORING ALL INV FILES ...' * COPY FILE INVMAIN.BAK TO INVMAIN.DBF * ? 'RESTORING ALL INV FILES ....' * COPY FILE INVMAINP.BAK TO INVMAINP.DBF ELSE ? 'ALL FILE PURGE O.K.' ? 'PACKING FILES' CLOSE DATA USE INVOICE PACK USE INVMAIN PACK CLOSE DATA USE INVOICE INDEX INUMM,QNUMM,SNUMM REINDEX USE INVMAIN INDEX INVMAIN,QUOMAIN,SCHMAIN REINDEX ENDIF SET PRINT OFF SET PRINTER TO WAIT ENDDO