IMD 1.15: 15/05/2007 13:29:15 fog hak 002   åååååååååå  åååååååååå  åååååååååå  A/R050 BASXA/R060 BAS A/R070 BASC A/R080 BAS% A/RTAX BASA/P000 BASA/P010 BAScA/P02A BASåA/R-INFOBASA/R-INV BASA/R020 BAS!A/R03A BAS !A/R03B BASZ"#$%&'A/R040 BASH()*+,-FOG/HAK002DISK DOC-åååå REMARK ******************************************\ * A/R050.BAS CUSTOMER FILE MAINTENANCE *\ * 6/19/79 3:15 PM *\ ****************************************** DIM M$(5),S$(2),Y(2),Z(2),G2$(5),G3(5) YES=1 WRITTEN$=åCHR$(255) %INCLUDE CURSOR S$(1)="CUSTOMER ACTIVITY REPORT":S$(2)="LIST OF CUSTOMERS" GOTO 6000 %INCLUDE SUBS1 %INCLUDE GENINFO %INCLUDE READCUST %INCLUDE WRITCUST %INCLUDE A/R-INFO 825 IF LINE.COUNT% < 55 AND PAGE.COUNT% > 0 THEN RETURN R  EMARK LINE PRINTER ROUTINE PAGE.COUNT%=PAGE.COUNT%+1 PRINT CHR$(12); PRINT TAB((A1%-LEN(G2$(1)))/2);G2$(1);TAB(A1%);"DATE "; X0=G3(1):GOSUB 680.5 PRINT PRINT TAB((A1%-LEN(X4$))/2);X4$;TAB(A1%);"PAGE";PAGE.COUNT% PRINT PRINT CHR$(10);" CODEK IF A/R0F110 SEARCH FAILS, CHECK A/R0F111 RETURN 2060 H=0 IF RECORD.COUNT < 1 THEN H=-1:L=1:RETURN READ #Y2,1;VAR$,VAR1 IF K$ < VAR$ THEN H=-1:L=1:RETURN IF K$ = VAR$ THEN L=1:RETURN READ #Y2,RECORD.COUNT;VAR$,VAR1 IF K$ > VAR$ THEN H=-1:L=";TAB(17);"NAME"; IF F1=1 THEN \ PRINT TAB(32);"LAST ACTIVITY CURRENT YEAR LAST YEAR"\ ELSE\ PRINT TAB(38);"ADDRESS";TAB(117);"PHONE NO." PRINT LINE.COUNT%=6 RETURN 2000 REMARK ********************************************\ * CURECORD.COUNT+1:RETURN IF K$ = VAR$ THEN L=RECORD.COUNT:RETURN H=RECORD.COUNT L=0 2070 M=INT((L+H)/2) READ #Y2,M;VAR$,VAR1 IF VAR$=K$ THEN L=M:RETURN IF VAR$ > K$ THEN H=M IF VAR$ < K$ THEN L=M IF H=M+1 THEN H=-1:L=M+1:RETURN GOTO 2070 STOMER FILE SEARCH ROUTINE 12/78 MAM *\ * ======================================== *\ * THIS SUBROUTINE USES THE 'B' ALGORITHM *\ * FROM KNUTH'S SORTING AND SEARCHING BOOK. *\ * THE ROUTINE FIRST SEARCHES A/R0F110.DAT*\ * AND, IF NO MARETURN 5000 IF F=1 OR F=2 OR F=3 OR F=4 THEN\ X1=331+64*F:X2=24:X3=0:X4=0:GOSUB 345:\ REMARK ENTER CUSTOMER NAME/ADDR M$(F+1)=X0$:RETURN 5020 IF F=5 THEN X1=658:GOSUB 673:D=X0:\ REMARK ENTER CUSTOMER'S LAST ACTIVITY DATE RETURN IF FTCH IS FOUND FOR THE KEY IN *\ * K$, THE ROUTINE THEN SEARCHES A/R0F111 IN*\ * ORDER TO EITHER FIND A NEWLY ADDED RECORD*\ * OR POSITION THE POINTER, L, TO THE LOCA- *\ * TION OF THE RECORD TO INSERT. *\ **************************=6 OR F=7 THEN\ X1=664+(F-5)*64:X2=11:X3=-9999999.99:X4=9999999.99:GOSUB 345:\ Y(F-5)=X0:\ REMARK ENTER CUSTOMER TOTAL FIELDS IN THIS ROUTINE RETURN X1=849:GOSUB 210 PRINT " " IF F=8 THEN\ X1=853:X2=10:X3=0:X4=9999999999:GOSUB 345:****************** Y2=1:RECORD.COUNT=AR.CUSTFILE.EXTENT 2005 IF LEN(K$)<6 THEN K$=K$+" ":GOTO 2005 GOSUB 2060 REMARK PERFORM SEARCH ON A/R0F110.DAT IF H <> -1 THEN RETURN 2010 Y2=2:RECORD.COUNT=NEW.CUSTOMER.RECORDS% GOSUB 2060 REMAR\ REMARK ENTER PHONE NUMBER P9=X0:\ X0=P9:X1=850:GOSUB 760:PRINT REMARK DISPLAY PHONE NUMBER ON CRT RETURN 5100 FOR I%=2 TO 5 X1=396+(I%-2)*64:GOSUB 210 PRINT M$(I%) NEXT I% X1=658:GOSUB 210 X0=D:GOSUB 680.5 REMARK DISPLAY   ACTIVITY DATE PRINT X1=22:GOSUB 215 PRINT USING MASKA$;Y(1) X1=22:GOSUB 215 PRINT USING MASKA$;Y(2) X0=P9:X1=850:GOSUB 760 RETURN 5200 REMARK ********** CUSTOMER FILE PRINT ROUTINE ********** IF Y9=1 AND MSTR.RECORD$=WRITTEN$L 1100 AS 19 CREATE "A/R0F111.DAT" RECL 162 AS 2 FILE.NO=3: GOSUB 3.14 REMARK RETRIEVE A/R FILE EXTENT INFORMATION CLOSE 3 Y9=4:GOSUB 700 REMARK RETRIEVE G/I FILE DATA CLOSE 4 CONSOLE X0=18:GOSUB 260 6020 X2=1:X3=0:X4=4 REMA THEN RETURN IF Y9=2 AND NEW.RECORD$=WRITTEN$ THEN RETURN GOSUB 3225 REMARK GET CUSTOMER RECORD X4$=S$(F1):A1%=76+31*SGN(F1-1) REMARK SET REPORT TITLE & COLUMN WIDTH GOSUB 825 REMARK CHECK FOR END OF FORM LINE.COUNT%=LINE.COUNT%+RK PROMPT FOR OPERATION CODE X2$="ENTER OPERATION CODE(0=EXIT;1=ADD;2=CHANGE;3=PRINT;4=YR END)" GOSUB 665 C=X0+1 IF C=1 THEN GOTO 6290 REMARK IF 'EXIT' WAS SELECTED,BRANCH IF C=3 THEN GOTO 6120 REMARK GO TO CHANGE RECORD ROUTINE IF C=1 REMARK PRINT CUSTOMER NUMBER AND NAME PRINT W1$; TAB(9); M$(2); IF F1=2 THEN\ REMARK IF CUSTOMER LIST, PRINT ADDR & PHONE PRINT TAB(35); M$(3); TAB(61); M$(4); TAB(87); M$(5); TAB(113); :\ X0=P9:GOSUB 760.5:PRINT IF F1=1 THEN\ 4 THEN GOTO 6260 REMARK BRANCH TO THE FILE PRINT ROUTINE IF C=5 THEN GOTO 6280 REMARK GO TO YEAR-END ROUTINE 6040 GOSUB 265 REMARK REFRESH CRT MASK X1=30:GOSUB 210 PRINT "ADD " X1=271:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER C REMARK IF ACTIVITY REPORT, PRINT TAB(34);:\ REMARK PRINT ACTIVITY DATE & SALES AMOUNTS X0=D:GOSUB 680.5:\ PRINT TAB(48);: PRINT USING MASKA$; Y(2);: PRINT TAB(62);:\ PRINT USING MASKA$; Y(1):\ Z(2)=Z(2)+Y(2):\ REMARK ADD TO LAST-YEAR TUSTOMER NO. IF X0$<=" " THEN GOSUB 265:GOTO 6020 REMARK RE-PROMPT OPERATION CODE IF BLANK ENTRY K$=X0$ GOSUB 2000 REMARK SEARCH A/R0F110 FOR CUSTOMER, THEN SEARCH A/R0F111 REMARK IN CASE IT ENTERED ON THE DATA INPUT FILE. IF H=OTALS Z(1)=Z(1)+Y(1) REMARK ADD TO THIS-YEAR TOTALS RETURN REMARK START OF MAIN PROGRAM 6000 MASKA$=" #######.##" MASKB$=" ##########.##" OPEN "A/R0F110.DAT" RECL 162 AS 1, "A/R0F130.DAT" AS 3,\ "G/I0F010.DAT" AS 4, "CRT" REC-1 THEN GOTO 6100 IF VAR1 > 0 THEN X2$="ALREADY ON FILE":GOSUB 615:GOTO 6040\ ELSE\ RE.USE.DELETED.RECORD=YES:FILE.ASSIGNMENT=Y2 6100 W1$=K$ 6100.1 IF LEN(W1$)<6 THEN W1$=W1$+" ":GOTO 6100.1 FOR I1%=1 TO 8 F=I1% GOSUB 5000 NEXT I1% GOTO 6  160 6110 IF RE.USE.DELETED.RECORD=YES THEN Y9=FILE.ASSIGNMENT:\ X0=L:GOSUB 3275:RE.USE.DELETED.RECORD=0:GOTO 6040 IF L > NEW.CUSTOMER.RECORDS% THEN GOTO 6115 FOR I=NEW.CUSTOMER.RECORDS% TO L STEP -1 READ #2,I;LINE X0$ PRINT USING "&";#2,IEN D=0:\ X0=L:GOSUB 3275 REMARK RE-SAVE RECORD WITH A '0' LAST ACTIVITY DATE X2$="RECORD DELETED":GOSUB 615 GOTO 6020 6220 X2$="NOT ON FILE":GOSUB 615 GOTO 6140 6260 X1=30:GOSUB 210 PRINT "PRINT " P=0 X2=1:X3=0:X4=2:X2$="ENTER REPORT +1;X0$ REMARK WRITE CUSTFILE AT I+1 NEXT I 6115 NEW.CUSTOMER.RECORDS%=NEW.CUSTOMER.RECORDS%+1 Y9=2:X0=L:GOSUB 3275 CLOSE 2 OPEN "A/R0F111.DAT" RECL 162 AS 2 REMARK THE FILE IS CLOSED & THEN RE-OPENED TO SAVE THE FCB IN \ A FILE DISASTER SITYPE (0=NONE, 1=ACTIVITY, 2=LIST) " GOSUB 665 F1=X0 IF F1=0 THEN GOTO 6020 Z(1)=0 Z(2)=0 CLOSE 1 CLOSE 2 OPEN "A/R0F110.DAT" RECL 162 AS 1, "A/R0F111.DAT" RECL 162 AS 2 LPRINTER WIDTH 131 GOSUB 6800 GOSUB 6810 LINE.COUNT%=66 Y9=0 TUATION. GOTO 6040 REMARK START OVER FOR ANOTHER NEW CUSTOMER 6120 GOSUB 265 REMARK REFRESH CRT MASK X1=30:GOSUB 210 PRINT "CHANGE " 6140 X1=271:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER CUSTOMER # IF X0$ <= " " THEN GOTO 6020 REM X0=0 6265 IF MSTR.READ% > AR.CUSTFILE.EXTENT AND NEW.READ% > NEW.CUSTOMER.RECORDS%\ THEN\ GOTO 6270 IF NEW.RECORD$ > MSTR.RECORD$\ OR\ NEW.READ% > NEW.CUSTOMER.RECORDS%\ THEN\ X0=MSTR.READ%:Y9=1:GOSUB 5200:\ MSTR.RECORD$=WRITTEN$:\ GARK PROMPT OPERATION CODE IF BLANK ENTRY K$=X0$ GOSUB 2000 IF H=-1 OR VAR1 = 0 THEN X2$="NOT ON FILE":GOSUB 615:GOTO 6120 X0=L:Y9=Y2:GOSUB 3225 REMARK GET CUSTOMER RECORD FROM FILE GOSUB 5100 6160 X2=2:X3=0:X4=99 X2$="ENTER FIELD TO CHANGOSUB 6800 IF NEW.RECORD$=WRITTEN$ THEN GOTO 6265 IF MSTR.RECORD$ > NEW.RECORD$\ OR\ MSTR.READ% > AR.CUSTFILE.EXTENT\ THEN\ X0=NEW.READ%:Y9=2:GOSUB 5200:\ NEW.RECORD$=WRITTEN$:\ GOSUB 6810 GOTO 6265 6270 PRINT NEW.READ%=0 MSTR.REAE (0=NONE, 99=DELETE)" GOSUB 665 F=X0 IF F=0 AND C=2 THEN GOTO 6110 IF F=0 THEN GOTO 6180 IF F=99 THEN GOTO 6200 GOSUB 5000 GOTO 6160 6180 X0=L GOSUB 3275 GOTO 6120 6200 X2=3:X3=0:X4=0:X2$="ENTER DELETE CODE":GOSUB 665 IF X0$="DEL" THD%=0 IF F1=1 THEN PRINT "TOTALS";TAB(45);:PRINT USING MASKB$;Z(2);Z(1) PRINT CONSOLE GOTO 6260 6280 X1=30:GOSUB 210 PRINT "YR. END" X2=1:X3=0:X4=1:X2$="DO YOU HAVE A RECENT ACTIVITY REPORT?" GOSUB 665 IF X0=0 THEN 6260 X2=1:X3=0:X4=1:X2$  ="O.K. TO DO YEAR END UPDATE?" GOSUB 665 IF X0 <> 1 THEN GOTO 6020 PRINT "WORKING - DO NOT INTERRUPT" Y9=1 FOR I%=1 TO AR.CUSTFILE.EXTENT X0=I% GOSUB 3225 6281 Y(1)=Y(2):Y(2)=0 REMARK RESET TOTALS GOSUB 3275 NEXT I% Y9=2 IF NEW.IF MASTER RECORD IS LOWER, IT SATISFIES OUTPUT NEEDS Y9=1:X0=MSTR.READ%:GOSUB 3225:\ REMARK GET THE RECORD GOSUB 6900:\ REMARK WRITE THE MASTER CUSTOMER RECORD OUT TO WORKFILE.DAT MSTR.RECORD$=WRITTEN$:\ GOSUB 6800 REMARK READ ANOTHCUSTOMER.RECORDS%=0 THEN 6285 FOR I%=1 TO NEW.CUSTOMER.RECORDS% X0=I% Y(1)=Y(2):Y(2)=0 GOSUB 3275 NEXT I% 6285 GOSUB 265 GOTO 6020 6290 REMARK END OF MAINLINE CODE, START OF MERGE ROUTINE... PRINT CURSOR.HOME$:PRINT:PRINT "WORKING... DO NOTER RECORD FROM A/R0F110.DAT IF NEW.RECORD$=WRITTEN$ THEN GOTO 6300 IF MSTR.RECORD$ > NEW.RECORD$\ OR\ MSTR.READ% > AR.CUSTFILE.EXTENT\ THEN\ Y9=2:X0=NEW.READ%:GOSUB 3225:\ REMARK GET THE RECORD GOSUB 6900:\ NEW.RECORD$=WRITTEN$:\  INTERRUPT" IF AR.CUSTFILE.EXTENT=0 THEN DELETE 1:\ CLOSE 2:A=RENAME("A/R0F110.DAT","A/R0F111.DAT"):\ OUTPUT.COUNT%=NEW.CUSTOMER.RECORDS%:GOTO 9000 CLOSE 1,2,19 OPEN "A/R0F110.DAT" RECL 162 AS 1, "A/R0F111.DAT" RECL 162 AS 2 CREATE "WORKFILE.DAGOSUB 6810 GOTO 6300 6800 IF END #1 THEN 6801 MSTR.READ%=MSTR.READ%+1 READ #1, MSTR.READ%; MSTR.RECORD$, VAR1 IF VAR1 = 0 THEN GOTO 6800 REMARK IF LAST ACTIVITY=0 THEN READ NEXT RCD RETURN 6801 MSTR.READ%=AR.CUSTFILE.EXTENT + 1 MSTR.RT" RECL 162 AS 3 IF NEW.CUSTOMER.RECORDS% >0 THEN GOTO 6299 X2=1:X3=0:X4=0 X2$="ENTER 'Y' TO REORGANIZE CUSTOMER FILE; ANY OTHER KEY TO EXIT PROGRAM" GOSUB 665 IF X0$ <> "Y" THEN GOTO 9005 6299 GOSUB 6800 REMARK GET THE FIRST MASTER RECORDECORD$=WRITTEN$ RETURN 6810 REMARK READ RECORD FROM A/R0F111.DAT IF END #2 THEN 6811 NEW.READ%=NEW.READ%+1 READ #2, NEW.READ%; NEW.RECORD$, VAR1 IF VAR1=0 THEN GOTO 6810 REMARK IF LAST ACTIVITY=0 THEN READ NEXT RCD RETURN 6811 NEW.READ%= GOSUB 6810 REMARK GET THE FIRST "NEW" RECORD 6300 IF MSTR.READ% > AR.CUSTFILE.EXTENT \ AND NEW.READ% > NEW.CUSTOMER.RECORDS% THEN GOTO 8999 IF NEW.RECORD$ > MSTR.RECORD$\ OR\ NEW.READ% > NEW.CUSTOMER.RECORDS%\ THEN \ REMARK NEW.CUSTOMER.RECORDS% + 1 NEW.RECORD$=WRITTEN$ RETURN 6900 REMARK WRITE CUSTOMER RECORD TO WORKFILE OUTPUT.COUNT%=OUTPUT.COUNT%+1 Y9=3 X0=OUTPUT.COUNT% GOSUB 3275 REMARK WRITE CUSTOMER RECORD TO WORKFILE RETURN 8999 DELETE 1    REMARK DELETE A/R0F110.DAT DELETE 2 REMARK DELETE A/R0F111.DAT CLOSE 3 REMARK CLOSE WORKFILE.DAT BEFORE RENAMING IT A=RENAME("A/R0F110.DAT","WORKFILE.DAT") REMARK WORKFILE BECOMES NEW CUSTOMER FILE 9000 AR.CUSTFILE.EXTENT=OUTPUTå.COUNT% FILE.NO=5 OPEN "A/R0F130.DAT" AS FILE.NO GOSUB 3.15 REMARK RE-WRITE NEW EXTENT INFO 9005 PRINT CLEAR.SCREEN$;"A/R CUSTOMER F/M LOADING MENU" CHAIN "A/P000" REMARK TERMINATE PROGRAM AND CHAIN TO MENU  REMARK ######################################################### REMARK # A/R TAX CODE FILE MAINTENANCE (A/R060) # REMARK # VERS. OF 10.00 AM 3/5/79 # REMARK ######################################################### DIM R$(10),R1(10),R2(1å0) %INCLUDE CURSOR GOTO 6000 %INCLUDE SUBS1 %INCLUDE A/RTAX 6000 MASKA$="/ / ##.##% #####.#" OPEN "A/R0F030.DAT" AS 1, "CRT" RECL 1100 AS 19 X0=17:GOSUB 260 REMARK DISPLAY TAX CODES CRT MASK A1=1:GOSUB 3700 REMARK RETRIåEVE TAX CODE DATA X1=384:GOSUB 210 FOR I%=2 TO 10 REMARK DISPLAY TAX CODE DATA X1=11:GOSUB 215 PRINT USING MASKA$;R$(I%),R1(I%),R2(I%) NEXT I% 6020 X1=128:X2=2:X3=0:X4=10:GOSUB 345 REMARK ALLOW CHANGES TO TAX CODES 1 THROUGH 9 IF X0=1å0 THEN 6040 REMARK END PROGRAM ON ENTRY OF TAX CODE 10 IF X0=0 THEN X2$="PRESET - UNCHANGEABLE":GOSUB 615:GOTO 6020 REMARK NO CHANGES ALLOWED TO TAX CODE 0 F=X0+1 X1=266+F*64:X2=8:X3=0:X4=0:GOSUB 345 REMARK ENTER TAX CODE DESCRIPTION R$(F)=  X0$ X1=279+F*64:X2=5:X3=0:X4=99.99:GOSUB 345 REMARK ENTER TAX RATE R1(F)=X0 X1=288+F*64:X2=7:X3=0:X4=99999.9:GOSUB 345 REMARK ENTER G/L ACCOUNT NUMBER R2(F)=X0 GOTO 6020 6040 R$(1)="SPECIAL" REMARK END PROGRAM R1(1)=0:R2(1)=0 CM$(5),R$(10),R1(10),R2(10) %INCLUDE CURSOR GOTO 6000 %INCLUDE SUBS1 %INCLUDE BINSEARC %INCLUDE A/R-INV %INCLUDE READCUST %INCLUDE A/R-INFO %INCLUDE A/RTAX DATA "INVOICE","CR MEMO","DB MEMO","NEW","INV BILLING" DATA "INV PAYMENT","PROG PAYMENT"LOSE 1 OPEN "A/R0F030.DAT" AS 1 A1=1:GOSUB 3750 REMARK RESAVE TAX CODE DATA PRINT CLEAR.SCREEN$;"A/R TAX CODE F/M LOADING MENU" CHAIN "A/P000" REMARK RELOAD MENU ,"DELETE","MODIFY" .673 Z0=X1 REMARK ENTER & DISPLAY DATE: ALLOW ZERO DATE GOSUB 210 PRINT " "; X2=6 X3=0 X4=123199 GOSUB 345 REMARK ENTER THAT DATE IF X0=0 THEN X0$="000000" IF LEN(X0$)<5 THEN X1=Z0:GOTO .673 .å6735 IF LEN(X0$) < 6 THEN X0$="0"+X0$:GOTO .6735 IF MID$(X0$,1,2)>="00" AND MID$(X0$,1,2)<="12"\ AND MID$(X0$,3,2)>="00" AND MID$(X0$,3,2) <="31" THEN .675 X2$="OUT OF RANGE":GOSUB 615:X1=Z0:GOTO .673 .675 X0=VAL(X0$) .680 GOSUB 210 .6805 X0$=STR$å(X0) .6806 IF LEN(X0$)<6 THEN X0$="0"+X0$:GOTO .6806 .681 PRINT LEFT$(X0$,2);"/";MID$(X0$,3,2);"/";RIGHT$(X0$,2); RETURN 4000 D(3)=INT((D(1)*R1(L6+1))+.5)/100 REMARK COMPUTE SALES TAX AND INVOICE TOTAL D(4)=D(3)+D(2)+D(1) X1=704:GOSUB 210  REMARK ######################################################### REMARK # A/R TRANSACTION FILE MAINTENANCE (A/R070) # REMARK # VERS. OF 3.00 PM 3/5/79 # REMARK ######################################################### DIM L4(2),D(13),Y(2), GOSUB 5440 REMARK REDISPLAY INVOICE AMOUNTS AND TOTAL 4020 D(7)=D(4)-D(6) REMARK COMPUTE INVOICE BALANCE IF L4(2)<>0 THEN D(7)=D(7)-D(8) IF L4(1)=0 THEN D(7)=0 REMARK IF BILL DATE IS ZERO, INVOICE BALANCE IS ZERO 4060 X1=320:GOSUB 2  10 I1%=5:I2%=7:GOSUB 4320 REMARK DISPLAY INVOICE PAYMENT AND BALANCE RETURN 4080 D(11)=D(8)-D(10) REMARK COMPUTE PROGRESS BALANCE IF L4(2)=0 THEN D(11)=0 REMARK ZERO PROGRESS BALANCE IF PROGRESS DUE DATE IS ZERO X1=640:GOSUB 21CTION: 1=RECORD, 2=MORE CHANGES, 3=CANCEL," X2$=X2$+" 4=VOID TRANS":GOSUB 665 RETURN 4220 FOR I%=1 TO 2 REMARK FLASH NASTY MESSAGE ON SCREEN X2$="DATE OR AMOUNT FIELD MISSING OR NEGATIVE BALANCE":GOSUB 615 NEXT I% X0=2 RETURN 430 I1%=8:I2%=11:GOSUB 4320 REMARK DISPLAY PROGRESS BILLING FIELDS RETURN REMARK CHECK FOR INCONSISTENCIES BETWEEN FIELDS 4120 IF D(7)<0 THEN 4220 REMARK NEGATIVE INVOICE BALANCE ILLEGAL IF D(11)<0 THEN 4220 REMARK NEGATIVE20 FOR I%=I1% TO I2% REMARK DISPLAY TRANSACTION FIELDS I1% THROUGH I2% X1=50:GOSUB 215 PRINT USING MASKB$;D(I%) NEXT I% RETURN 5000 GOSUB 5260 REMARK DISPLAY CUSTOMER DATA X1=265:GOSUB 210 PRINT W1$;TAB(12);M$(2);TAB(40); X1=12 PROGRESS BALANCE ILLEGAL IF L4(1)<>0 THEN 4140 REMARK IF BILL DATE IS ZERO... IF D(4)<>0 THEN 4220 REMARK INVOICE PAYMENT MUST BE ZERO IF D(5)<>0 THEN 4220 REMARK AND INVOICE BALANCE MUST BE ZERO GOTO 4160 4140 IF D(4)=0 THEN 4220 :GOSUB 215 PRINT USING MASKA$;L1 RETURN REMARK BRANCH TO ENTER VALUE FOR FIELD "F%" 5020 ON F% GOTO 5040,5060,5080,5100,5120,5140,5160,5180,5200,5220,5240,5250 5040 RETURN REMARK TRANSACTION TYPE CAN'T CHANGE 5060 X1=403:X2= REMARK IF BILL DATE IS NON-ZERO\ INVOICE AMOUNT MUST BE NON-ZERO 4160 IF L4(2)<>0 THEN 4180 REMARK IF PROGRESS DUE DATE IS ZERO... IF D(8)<>0 THEN 4220 REMARK PROGRESS BILLING AMOUNT MUST BE ZERO IF D(9)<>0 THEN 4220 REM12:X3=0:X4=0:GOSUB 345 REMARK ENTER CUSTOMER ORDER NUMBER L1$=X0$ RETURN 5080 X1=462:X2=6:X3=0:X4=999999:GOSUB 345 REMARK ENTER JOB NUMBER L2=X0 RETURN 5100 X1=526:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER JOB DESCRIPTION L2$=X0$ ARK AND PROGRESS BALANCE MUST BE ZERO GOTO 4200 4180 IF D(8)=0 THEN 4220 REMARK IF PROGRESS DUE DATE IS NON-ZERO,\ PROGRESS BILLING AMOUNT MUST BE NON-ZERO REMARK DETERMINE TRANSACTION'S FATE 4200 X2=1:X3=1:X4=4:X2$="ENTER ARETURN 5120 X1=590:GOSUB .673 REMARK ENTER BILL DATE L4(1)=X0 RETURN 5140 X1=652:X2=1:X3=0:X4=9:GOSUB 345 REMARK ENTER TAX CODE L6=X0 GOSUB 5400 REMARK DISPLAY TAX CODE DESCRIPTION AND RATE D(13)=0 IF L6>0 THEN 5420 X1=  718:X2=8:X3=-99999.9:X4=99999.9:GOSUB 345 REMARK FOR TAX CODE ZERO, ENTER G/L ACCOUNT NUMBER D(13)=X0 RETURN 5160 X1=787:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER INVOICE AMOUNT D(1)=X0 RETURN 5180 X1=851:X2=10:X3=0:X4=9999999.99: X1=15:GOSUB 215 X0=L4(1):GOSUB 680.5 PRINT X1=12:GOSUB 215 PRINT L6; GOSUB 5400 IF L6=0 THEN X1=15:GOSUB 215:PRINT USING MASKC$;D(13); \ ELSE GOSUB 5420 GOSUB 5440 GOSUB 4060 PRINT X1=53:GOSUB 215 X0=L4(2):GOSUB 680.5 PRINT GOSUB 345 REMARK ENTER SHIPPING/TRAVEL AMOUNT D(2)=X0 RETURN 5200 X1=369:X2=11:X3=-9999999.99:X4=9999999.99:GOSUB 345 REMARK ENTER INVOICE PAYMENT AMOUNT X1=363:GOSUB 210 D(6)=D(6)-D(5)+ABS(X0) D(5)=ABS(X0) IF X0>=0 OR B=2 THEN PRINT "  I1%=8:I2%=11:GOSUB 4320 RETURN 5400 X1=654:GOSUB 210 REMARK DISPLAY TAX CODE DESCRIPTION AND RATE PRINT USING MASKD$;R$(L6+1),R1(L6+1) RETURN 5420 X1=718:GOSUB 210 REMARK DISPLAY TAX CODE'S G/L ACCOUNT NUMBER PRINT USING MASKC ";:D(12)=0 \ ELSE PRINT "BY CM";:D(12)=1 RETURN 5220 X1=628:GOSUB .673 REMARK ENTER PROGRESS DUE DATE L4(2)=X0 RETURN 5240 X1=690:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER PROGRESS BILLING AMOUNT D(8)=X0 RETURN 5250 $;R2(L6+1); RETURN 5440 FOR I%=1 TO 4 REMARK DISPLAY INVOICE AMOUNT, SHIPPING, TAX, AND TOTAL PRINT X1=19:GOSUB 215 PRINT USING MASKB$;D(I%); NEXT I% RETURN REMARK START OF MAIN PROGRAM 6000 MASKA$="######" MASKB$X1=754:X2=10:X3=0:X4=9999999.99:GOSUB 345 REMARK ENTER PROGRESS PAYMENT D(10)=D(10)-D(9)+X0 REMARK ADJUST PAYMENT TOTAL D(9)=X0 RETURN 5260 X1=16:GOSUB 210 REMARK DISPLAY TRANSACTION OPERATION DESCRIPTION PRINT "FILE MAINTENANCE"=" #######.##" MASKC$=" #####.#" MASKD$="/ / ##.##%" OPEN "A/R0F020.DAT" RECL 226 AS 1,"A/R0F110.DAT" RECL 162 AS 2, \ "A/R0F120.DAT" RECL 226 AS 3,"A/R0F130.DAT" AS 4, \ "A/R0F030.DAT" AS 5,"CRT" RECL 1100 AS 19 FILE.NO=4:GOSUB 3.14 ; RETURN 5280 X1=9:GOSUB 215 REMARK DISPLAY CURRENT TRANSACTION VALUES PRINT B; RESTORE FOR I%=1 TO B READ X0$ NEXT I% PRINT X0$ X1=20:GOSUB 215 PRINT L1$ X1=15:GOSUB 215 PRINT USING MASKA$;L2 X1=15:GOSUB 215 PRINT L2$REMARK RETRIEVE A/R EXTENT INFORMATION A1=5:GOSUB 3700 REMARK RETRIEVE A/R TAX CODE INFORMATION 6020 X0=15:GOSUB 260 REMARK DISPLAY TRANSACTION ENTRY OPERATION SELECTION MASK GOSUB 5260 REMARK DISPLAY PROGRAM TITLE 6040 X2=3:X3=0:X4  =999:X2$="ENTER RECORD NO. TO CHANGE (0 TO END)" REMARK ENTER NUMBER OF TRANSACTION TO CHANGE GOSUB 665 IF X0=0 THEN 6540 REMARK END PROGRAM ON ZERO RECORD NO. IF X0>AR.TRANFILE.EXTENT THEN 6040 FILE.NO=1:REC.NO%=X0:GOSUB 3400 REMARK RETRIANGES IF X0=3 THEN X2$="LAST CHANGES IGNORED":GOSUB 615:GOTO 6020 REMARK ACTION CODE 3 = IGNORE CHANGES IF X0=4 THEN C2=C2+10: \ REMARK ACTION CODE 4 = VOID TRANSACTION X2$="LAST TRANSACTION VOIDED": \ GOSUB 615: GOTO 6360 IF D(5)=0 OR B>1 EVE TRANSACTION DATA IF C2>9 THEN X2$="TRANSACTION IS VOID":GOSUB 615:GOTO 6040 RECORD.COUNT=AR.CUSTFILE.EXTENT Y2=2 XYZ$=W1$+" " K$=LEFT$(XYZ$,6) GOSUB 1060 REMARK LOCATE CUSTOMER DATA IF H=-1 OR VAR1=0 THEN M$(2)="NOT ON CUSTOMERTHEN D(12)=0 REMARK CHECK FOR PAYMENT BY CREDIT MEMO X2$="RECORDED":GOSUB 615 6360 GOSUB 3450 REMARK UPDATE TRANSACTION FILE GOTO 6020 REMARK END PROGRAM AND RELOAD MENU 6540 PRINT CLEAR.SCREEN$;"A/R TRANSACTION FILE MAINTENAN FILE" \ ELSE Y9=2:X0=L:GOSUB 3225 REMARK RETRIEVE CUSTOMER DATA GOSUB 5000 REMARK DISPLAY CUSTOMER DATA GOSUB 5280 REMARK DISPLAY TRANSACTION DATA 6240 IF C2=5 THEN 6260 REMARK IF TRANSACTION OPERATION IS DELETE, DON'T ALLOW CHCE LOADING MENU" CHAIN"A/P000" TION FILE GOTO 6020 REMARK END PROGRAM AND RELOAD MENU 6540 PRINT CLEAR.SCREEN$;"A/R TRANSACTION FILE MAINTENANANGES X2=2:X3=0:X4=12:X2$="ENTER FIELD TO CHANGE (0=NONE)":GOSUB 665 REMARK ALLOW CHANGES TO FIELDS IF X0=0 THEN 6260 F%=X0 IF C2=4 AND F%<>12 THEN 6240 IF C2=3 AND F%<>9 THEN 6240 GOSUB 5020 REMARK ENTER VALUE FOR CHOSEN FIELD IF F%<5 åTHEN 6240 GOSUB 4000 REMARK COMPUTE SALES TAX AND INVOICE TOTAL IF F%>9 THEN GOSUB 4080 REMARK COMPUTE PROGRESS BALANCE GOTO 6240 6260 GOSUB 4120 REMARK CHECK FOR CONSISTENCY IF X0=2 THEN 6240 REMARK ACTION CODE 2 = MORE CHå  å,G2$(5),G3(5),P(6) %INCLUDE CURSOR GOTO 6000 %INCLUDE SUBS1 %INCLUDE GENINFO %INCLUDE BINSEARC %INCLUDE A/R-INFO %INCLUDE READCUST %INCLUDE A/R-INV DATA 0,3,3,6,8,11,13,16,19,21,24,26 4000 YEAR=100*(I/100-INT(I/100)) REMARK COMPUTE THE åNUMBER OF DAYS BETWEEN DATE "I" AND 00/00/00 DAY=100*((I-YEAR)/10000-INT((I-YEAR)/10000)) MONTH=(I-100*DAY-YEAR)/10000 IF MONTH=0 OR MONTH>12 THEN A4=0:RETURN RESTORE FOR IX%=1 TO MONTH READ A4 NEXT IX% A4=A4+YEAR*365+INT(YEAR/4)+1+(MONTH-1å)*28+DAY IF INT(YEAR/4)=(YEAR/4) AND MONTH<3 THEN A4=A4-1 RETURN 4080 I=I2:GOSUB 4000 REMARK COMPUTE THE NUMBER OF DAYS BETWEEN "I2" AND "J2" A=A4 I=J2:GOSUB 4000 A=A-A4 RETURN 4220 PRINT "** TOTAL DUE -->";TAB(62); REMARK PRINåT CUSTOMER BALANCE PRINT USING MASKA$;B9 PRINT CHR$(12) B9=0:LINE.COUNT%=60:PAGE.COUNT%=0 REMARK ZERO BALANCE AND RESET LINE AND PAGE COUNTERS RETURN 4500 XYZ$=W1$+" " REMARK LOCATE AND RETRIEVE CUSTOMER DATA K$=LEFT$(XYZ$,6):G REMARK ######################################################### REMARK # A/R STATEMENTS PROGRAM (A/R080) # REMARK # VERS. OF 4.00 PM 3/6/79 # REMARK ######################################################### DIM L4(2),D$(2),D(20),M$(5),Y(2)OSUB 1060 REMARK LOCATE CUSTOMER DATA IF H=-1 OR VAR1=0 THEN \ M$(2)="NO CUSTOMER INFO":\ FOR I%=2 TO 5:\ M$(I%)=" ":\ NEXT I%:\ Y(2)=0:Y(1)=0 \ ELSE Y9=2:X0=L:GOSUB 3225 REMARK RETRIEVE CUSTOMER DATA RETURN 4620 IF B<>2   THEN RETURN REMARK REVERSE SIGNS ON CREDIT MEMOS FOR I%=1 TO 11 IF D(I%)<>0 THEN D(I%)=-D(I%) NEXT I% RETURN REMARK START OF MAIN PROGRAM 6000 MASKA$=" #######.##" MASKB$="######" MASKC$="#####.#" OPEN "G/I0F010.DAT" ASVOICE IF W1$>W0$ THEN GOSUB 4220:GOTO 6480 REMARK END CUSTOMER HAS BEEN PASSED GOSUB 4620 REMARK REVERSE SIGNS, IF A CREDIT MEMO IF D(7)+D(11)=0 THEN 6140 REMARK SKIP UNBILLED ITEMS IF W6$=W1$ THEN 6240 REMARK PRINT CUSTOMER TOTAL 1, "A/R0F110.DAT" RECL 162 AS 2, \ "A/R0F120.DAT" RECL 226 AS 3,"A/R0F130.DAT" AS 4 FILE.NO=4:GOSUB 3.14 REMARK RETRIEVE A/R EXTENT INFORMATION Y9=1:GOSUB 700 REMARK RETRIEVE G/I FILE DATA RECORD.COUNT=AR.CUSTFILE.EXTENT Y2=2 6020 COS WHEN CUSTOMERS CHANGE IF PAGE.COUNT%<>0 THEN GOSUB 4220 W6$=W1$ GOSUB 4500 REMARK RETRIEVE NEXT CUSTOMER DATA 6240 IF L4(1)=0 AND L4(2)=0 THEN 6140 REMARK IF BILL DATE AND PROGRESS DUE DATE ARE ZERO, SKIP THIS INVOICE IF L4(1)=0 THEN D(NSOLE PRINT:PRINT CLEAR.SCREEN$;"A/R STATEMENTS" PRINT:PRINT:PRINT PRINT "FIRST CUSTOMER" PRINT "LAST CUSTOMER" 6040 X1=271:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER FIRST CUSTOMER IF X0$<=" " THEN 6480 X0$=X0$+" " W8$=LEFT$(X0$,6) X1)=0:D(2)=0:D(3)=0:D(4)=0 REMARK IF BILL DATE IS ZERO, PRINT INVOICE AMOUNTS AS ZERO IF L4(2)=0 THEN D(8)=0 REMARK IF PROGRESS DUE DATE IS ZERO, PRINT PROGRESS BALANCE AS ZERO IF LINE.COUNT%>17 THEN \ REMARK WHEN STATEMENT FORM FILLS UP... 1=335:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER LAST CUSTOMER X0$=X0$+" " W0$=LEFT$(X0$,6) X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665 REMARK VERIFY ENTRY IF X0=0 THEN 6020 X1=192:GOSUB 210 PRINT "PROCESSING..."; LPRINTER LINE.COUN PAGE.COUNT%=PAGE.COUNT%+1:\ REMARK ADVANCE TO NEXT FORM PRINT W1$;:\ REMARK AND REPRINT CUSTOMER DATA FOR I%=2 TO 5:\ PRINT TAB(11);M$(I%):\ NEXT I%:\ PRINT TAB(62);:\ X0=G3(1):GOSUB 680.5:\ PRINT " PAGE";PAGE.COUNT%:\ T%=60 6140 INVOICE.POINTER% = INVOICE.POINTER% + 1 IF AR.INVFILE.EXTENT=0 THEN 6480 IF INVOICE.POINTER%>AR.INVFILE.EXTENT THEN GOSUB 4220:GOTO 6480 REMARK CHECK FOR END OF FILE FILE.NO=3:REC.NO%=INVOICE.POINTER%: GOSUB 3400 REMARK RETRIEVE NEXT INPRINT:PRINT:PRINT:PRINT:PRINT:\ LINE.COUNT%=1 PRINT " ";L1$;TAB(14); REMARK PRINT THIS INVOICE PRINT USING MASKB$;L1; PRINT TAB(21); IF L4(1)>0 THEN AGE.DATE=L4(1)\ REMARK FOR AGING, USE THE BILL DATE IF IT'S NON-ZERO ELSE AGE.DATE=  L4(2) REMARK OTHERWISE, USE THE PROGRESS DUE DATE X0=AGE.DATE:GOSUB 680.5 PRINT USING MASKA$;D(4);D(7);D(11);D(7)+D(11); I2=G3(1):J2=AGE.DATE:GOSUB 4080 REMARK COMPARE AGING DATE WITH TODAY'S DATE 6360 IF A<30 THEN I=79:X$="C" \ REMARK åLESS THAN 30 DAYS SINCE INVOICE DATE IS CURRENT ELSE I=81:X$="P" REMARK MORE THAN 30 DAYS IS PAST DUE PRINT TAB(I);X$ LINE.COUNT%=LINE.COUNT%+1 B9=B9+D(7)+D(11) REMARK ACCUMULATE INVOICE TOTAL TO CUSTOMER BALANCE GOTO 6140 6480 CåONSOLE REMARK END PROGRAM AND RELOAD MENU PRINT CLEAR.SCREEN$;"A/R STATEMENTS LOADING MENU" CHAIN "A/P000"  LINE.COUNT%=LINE.COUNT%+1 B9=B9+D(7)+D(11) REMARK ACCUMULATE INVOICE TOTAL TO CUSTOMER BALANCE GOTO 6140 6480 Cåå%NOLIST 3700 READ #A1;R$(1),R$(2),R$(3),R$(4),R$(5),R$(6),R$(7),R$(8),R$(9),\ R$(10),R1(1),R1(2),R1(3),R1(4),R1(5),R1(6),R1(7),R1(8),R1(9),R1(10),\ R2(1),R2(2),R2(3),R2(4),R2(5),R2(6),R2(7),R2(8),R2(9),R2(10) RETURN 3750 PRINT #A1;R$(1),R$(2),R$(å3),R$(4),R$(5),R$(6),R$(7),R$(8),R$(9),\ R$(10),R1(1),R1(2),R1(3),R1(4),R1(5),R1(6),R1(7),R1(8),R1(9),R1(10),\ R2(1),R2(2),R2(3),R2(4),R2(5),R2(6),R2(7),R2(8),R2(9),R2(10) RETURN %LIST   %CHAIN 100,8300,500,1000 REMARK ########################################################## REMARK # PROGRAM SELECTION MENU (A/P000) 5:00 PM 6/18/79 # REMARK ########################################################## DIM P1$(21) %INCLUDE%NOLIST 3700 READ #A1;R$(1),R$(2),R$(3),R$(4),R$(5),R$(6),R$(7),R$(8),R$(9),\ R$(10),R1(1),R1(2),R1(3),R1(4),R1(5),R1(6),R1 CURSOR GOTO 6000 %INCLUDE SUBS1 5100 DATA "A/P010","A/P02A","A/P120","A/P030","A/P040",\ "A/P050","A/P060","A/P070","A/P090","A/P080" DATA "A/R010","A/R020","A/R070","A/R03A","A/R040",\ "A/R080","A/R050","A/R060","A/P110" 6000 PASSWORD$="PASS" IF COMMAND$<>PASSWORD$ THEN \ PRINT CLEAR.SCREEN$;" INVALID PASSWORD":STOP OPEN "CRT" RECL 1100 AS 19 X0=10:GOSUB 260 RESTORE 6100 FOR I%=1 TO 19:READ P1$(I%):NEXT I% X2=2:X3=1:X4=20:X2$="CHOOSE PROGRAM BY NUMBER":GOSUB 665 PRINT CURSOR.HOME$ PRINT:PRINT IF X0=20 THEN \ PRINT CLEAR.SCREEN$;"A/P & A/R MENU EXITING TO CP/M":\ STOP PRINT "-->LOADING PROGRAM ";X0 CHAIN P1$(X0)   å,A3$(10),P(6),Y(2) %INCLUDE CURSOR DATA "INVOICE"," "," ","CR MEMO","DB MEMO","NEW","DELETE",\ "MODIFY" RESTORE FOR I%=1 TO 8: READ A3$(I%): NEXT I% MASKA$=" ######.##" MASKB$="######" MASKC$="######.# #######.## " MASKD$="##) ###å### #######.##" DEF FNR(Z9)=(INT(ABS(Z9)*100+.5)/100)*SGN(Z9) REMARK ROUND TO NEAREST CENT DEF FND(Z9)=FNR(Z9)*SGN(D2) REMARK USED IN G/L & JOB POSTING AMOUNT VERIFICATIONS GOTO 6000 %INCLUDE SUBS1 %INCLUDE BINSEARC %INCLUDE READINV å %INCLUDE WRITEINV %INCLUDE READVEND %INCLUDE A/P-INFO 10.60 RETURN REMARK THIS SPACE FOR G/L BINARY SEARCH ROUTINE .314 RETURN REMARK THIS SPACE FOR G/L EXTENT INFORMATION READ ROUTINE 5000 PRINT CLEAR.SCREEN$;"A/P TRANSACTION ENTRYå" RETURN 5010 IF F=0 OR F>9 THEN GOTO 5040 REMARK BRANCH TO ENTER DATA IN FIELD "F" ON F GOTO 5040,5050,5060,5070,5080,5090,5100,5110,5120 5040 X1=462:X2=8:X3=0:X4=0:GOSUB 345 REMARK ENTER PURCHASE ORDER NO. W2$=X0$ RETURN 5050 REMARK ********************************************** REMARK * ACCOUNTS PAYABLE TRANSACTION ENTRY PRGM * REMARK * (A/P010.BAS) VERS OF 4 PM 1/30/78 * REMARK ********************************************** DIM C(27),D(27),W$(5),M$(5) X1=526:X2=2:X3=0:X4=0:GOSUB 345 REMARK ENTER BUYER W3$=X0$ RETURN 5060 X1=590:X2=6:X3=0:X4=999999:GOSUB 345 REMARK ENTER CHECK REGISTER NO. D(25)=X0 RETURN 5070 X1=654:GOSUB 673 REMARK ENTER INVOICE DATE PRINT D(23)=X0 RE  TURN 5080 X1=718:GOSUB 673 REMARK ENTER AGE DATE PRINT D(24)=X0 RETURN 5090 IF W1%=4 THEN 5150 REMARK ENTER INVOICE OR DEBIT MEMO AMOUNT X1=430:X2=9:X3=0:X4=999999.99:GOSUB 345 C(23)=X0 X1=429:GOSUB 210 PRINT USING MASKA$;C( DON'T DISPLAY IF NEW TRANSACTION X1=493:GOSUB 210 PRINT USING MASKA$;C(27) FOR A1%=24 TO 26 PRINT LEFT$(X9$,45); REMARK PRINT NON-DESTRUCTIVE SPACES PRINT USING MASKA$;C(A1%) NEXT A1% 5215 X1=749:GOSUB 210 PRINT USING MASKA$;C(23)+C(2423) GOSUB 5140 RETURN 5100 X1=498:X2=5:X3=0:X4=100:GOSUB 345 REMARK ENTER DISCOUNT RATE X1=493:GOSUB 210 C(27)=X0 PRINT USING MASKA$;C(27) GOSUB 5140 RETURN 5110 X1=622:X2=9:X3=0:X4=999999.99:GOSUB 345 REMARK ENTER FREIGHT A)+C(25)+C(26) N1=1 RETURN REMARK DISPLAY CREDIT MEMO TRANSACTIONS 5220 X0=13:GOSUB 260 REMARK GET CRT MASK #13 GOSUB 5375 GOSUB 5250 IF N=1 THEN RETURN X1=558:GOSUB 210 PRINT USING MASKA$;C(24) X1=622:GOSUB 210 PRINT USIMOUNT C(25)=FNR(X0) X1=621:GOSUB 210 PRINT USING MASKA$;C(25) GOSUB 5140 RETURN 5120 X1=686:X2=9:X3=0:X4=999999.99:GOSUB 345 REMARK ENTER TAX AMOUNT C(26)=FNR(X0) X1=685:GOSUB 210 PRINT USING MASKA$;C(26) GOSUB 5140 RETURN NG MASKA$;C(25) 5230 X1=686:GOSUB 210 PRINT USING MASKA$;C(23)+C(24) N1=1 RETURN 5250 X1=266:GOSUB 210 REMARK DISPLAY VENDOR DATA PRINT W1$ X1=7:GOSUB 215 PRINT M$(2) X1=15:GOSUB 215 PRINT USING MASKB$;W0 IF N=1 THEN PRINT:RET5140 C(24)=-1*FNR((C(23)*C(27))/100) REMARK RECALCULATE AND DISPLAY DISCOUNT AMOUNT X1=557:GOSUB 210 PRINT USING MASKA$;C(24) GOTO 5215 5150 X1=494:X2=9:X3=-1*C(24):X4=999999.99:GOSUB 345 REMARK ENTER CREDIT MEMO AMOUNT C(23)=FNR(X0) X1=URN REMARK DON'T DISPLAY UNENTERED VALUES X1=15:GOSUB 215 PRINT W2$ IF W1%=4 THEN X1=494 \ ELSE X1=429 GOSUB 210 PRINT USING MASKA$;C(23) X1=527:GOSUB 210 PRINT W3$ X1=15:GOSUB 215 PRINT USING MASKB$;D(25) X1=15:GOSUB 215 X0=D(2494:GOSUB 210 PRINT USING MASKA$;C(23) GOTO 5230 REMARK DISPLAY TRANSACTION MASK AND VALUES 5200 IF W1%=4 THEN 5220 REMARK CREDIT MEMO TRANSACTIONS AT LINE 5220 X0=2:GOSUB 260 GOSUB 5375 GOSUB 5250 IF N=1 THEN RETURN REMARK3):GOSUB 680.5:PRINT X1=15:GOSUB 215 X0=D(24):GOSUB 680.5:PRINT RETURN 5375 X1=40:GOSUB 210 REMARK DISPLAY TYPE AND OPERATION DESCRIPTIONS PRINT A3$(W2%+5);" ";A3$(W1%),"" RETURN REMARK THIS ROUTINE CONTROLS THE SEQUENTIAL E  NTRY OF \ G/L AND JOB POSTING AMOUNTS FOR INVOICE CREATION. 5400 FOR I%=G TO G1 GOSUB 5410 IF D(I%)=0 THEN RETURN NEXT I% RETURN 5410 IF I%>11 THEN 5450 X1=(I%-1)*64+326:X2=7:X3=0:X4=99999.9:GOSUB 345 REMARK ENTER G/L NUMBER D\ REMARK CALCULATE TOTAL ELSE D0=C(23)+C(24)+C(25)+C(26) IF FND(D1)<>D2 THEN 5465 REMARK CHECK G/L AND JOB TOTALS AND DISTRIBUTION IF D1+D2<>FNR(D0) + FND(D0) THEN 5465 PRINT CURSOR.HOME$; PRINT:PRINT:PRINT PRINT TAB(64); IF N1<=1 TH(I%)=X0 IF X0=0 THEN 5445 GOTO 5440 REMARK BYPASS THIS SECTION UNLESS G/L PROGRAMS INSTALLED 5420 REMARK INSERT G/L POSTING INQUIRY ROUTINES HERE... Y2=5 K1=X0 GOSUB 10.60 IF H <> -1 THEN RETURN X2$="INVALID G/L ACCOUNT NO.":GOEN RETURN N1=0 GOTO 5460 5465 IF N1=1 THEN \ REMARK ROUTINE TO CORRECT OUT-OF-BALANCE DISTRIBUTION N1=2:\ GOSUB 5520:\ F=0 5470 IF D1<>D0 THEN 5480 X0=39:X0$="JOB":X2=D0-D2:GOSUB 5490 REMARK USE SUBROUTINES TO CORRECT JOB TOTALSSUB 615 GOTO 5410 5440 X1=(I%-1)*64+338:X2=10:X3=-999999.99:X4=999999.99:GOSUB 345 REMARK ENTER DISTRIBUTION AMOUNT X0=FNR(X0) 5445 D1=D1+X0-C(I%) REMARK ACCUMULATE G/L AMOUNT TO TOTAL \ AND DISPLAY ACCOUNT AND AMOUNT C(I%)=X0 X1 IF D2 <> FND(D0) THEN 5470 PRINT CURSOR.HOME$; PRINT:PRINT:PRINT PRINT TAB(64) GOTO 5460 5480 X0=6:X0$="G/L":X2=D0-D1:GOSUB 5490 REMARK USE SUBROUTINES TO CORRECT G/L TOTALS IF D1<>D0 THEN 5480 GOTO 5460 5490 IF X2=0 THEN RETURN RE=(I%-1)*64+325:GOSUB 210 PRINT USING MASKC$;D(I%),C(I%) RETURN 5450 X1=(I%-12)*64+358:X2=6:X3=0:X4=999999:GOSUB 345 REMARK ENTER JOB NUMBER D(I%)=X0 IF X0<>0 THEN \ REMARK ENTER DISTRIBUTION AMOUNT X1=(I%-12)*64+371:X2=10:X3=-999999.MARK THIS SUBROUTINE DISPLAYS \ G/L OR JOB POSTING DISCREPANCY AMOUNTS X1=192:GOSUB 210 PRINT TAB(X0);X0$;" DIST OFF"; PRINT USING MASKA$;X2;TAB(64) N1=2 GOSUB 5950 RETURN 5520 IF N1+F=5 THEN RETURN REMARK REDISPLAY G/L AND 99:X4=999999.99:GOSUB 345:\ X0=FNR(X0) D2=D2+X0-C(I%) REMARK ACCUMULATE JOB AMOUNT TO TOTAL C(I%)=X0 X1=(I%-12)*64+350:GOSUB 210 PRINT USING MASKD$;I%,D(I%),C(I%) REMARK DISPLAY ACCOUNT AND AMOUNT RETURN 5460 IF W1%=4 THEN D0=C(23)JOB DISTRIBUTION MASK AND TOTALS X0=3:GOSUB 260 GOSUB 5375 X1=320:GOSUB 210 FOR I%=1 TO 11 X1=6:GOSUB 215 IF D(I%)=0 THEN X1=26:GOSUB 215\ ELSE\ PRINT USING MASKC$;D(I%),C(I%); IF D(I%+11)>0 THEN PRINT USING MASKD$; I%+11,D(I%+11),C(I%+1  1)\ ELSE PRINT NEXT I% IF F=3 THEN 5950 RETURN 5550 X0=W2% X0%=L FILE.NO=2:GOSUB 3000 REMARK GET INVOICE RECORD FROM A/P0F120 D1=C(1)+C(2)+C(3)+C(4)+C(5)+C(6)+C(7)+C(8)+C(9)+C(10)+C(11) D2=C(12)+C(13)+C(14)+C(15)+C(16)+C(17)+C(18)+ GOSUB 5900 RETURN 5900 X2=1:X3=0:X4=F1:X2$="ENTER FIELD TO CHANGE(0=NONE)":GOSUB 665 REMARK ALLOW CHANGES TO FIELDS ON THE INVOICE SCREEN F=X0 IF F=0 THEN RETURN GOSUB 5010 GOTO 5900 5950 X2=2:X3=0:X4=22:X2$="ENTER FIELD TO CHANGE(0=NONE)":C(19)+C(20)+C(21)+C(22) W2%=X0 IF W1%=4 THEN F1=6 \ ELSE F1=9 RETURN 5600 TRANSACTION.RCD.COUNT%=TRANSACTION.RCD.COUNT%+1 REMARK SAVE TRANSACTION ON TRANSACTION FILE FILE.NO=3 X0%=TRANSACTION.RCD.COUNT% GOSUB 3050 REMARK WRITE TRGOSUB 665 REMARK ALLOW CHANGES TO G/L AND JOB DISTRIBUTION FIELDS IF X0=0 THEN RETURN I%=X0 GOSUB 5410 IF N1=2 THEN RETURN GOTO 5950 REMARK START OF MAIN PROGRAM 6000 OPEN "A/P0F110.DAT" RECL 162 AS 1 REMARK OPEN VENDOR FILE ANSACTION RCD TO A/P0F020 REMARK THIS FILE MUST BE CLOSED AND RE-OPENED IN \ ORDER TO APPEND TO IT AND MAINTAIN \ PROPER FILE INFORMATION ON THE FCB. CLOSE 3,4 OPEN "A/P0F020.DAT" RECL 580 AS 3, "A/P0F130.DAT" AS 4 OPEN "A/P0F120.DAT" RECL 580 AS 2 REMARK OPEN INVOICE FILE OPEN "A/P0F020.DAT" RECL 580 AS 3 REMARK OPEN TRANSACTION FILE OPEN "A/P0F130.DAT" AS 4 REMARK OPEN A/P INFORMATION FILE OPEN "CRT" RECL 1100 AS 19 X0=4 GOSUB 3310 REMARK X2$="RECORDED":GOSUB 615 SORT%=0 X0=4: GOSUB 3350 IF TRANSACTION.RCD.COUNT% < MAX.TRANSACTION.RCDS% THEN RETURN\ ELSE\ REMARK ABEND THE PROGRAM, CLOSE THE FILE, CHAIN THE MENU PRINT CLEAR.SCREEN$;"TRANSACTION FILE FULL - RUN A/P UPDATE GET A/P GENERAL INFORMATION MAX.TRANSACTION.RCDS%=200 REMARK SET MAXIMUM FILE LENGTH FOR TRANSACTION FILE GOTO 6100 REMARK SKIP OPENING G/L FILE FOR NOW OPEN "G/L0F110.DAT" RECL 157 AS 5 OPEN "G/L0F130.DAT" AS 6 FILE.NO%=6:GOSUB .314 ":\ PRINT "KEY TO EXIT":INPUT ""; LINE X0$:\ GOTO 6400 5700 X2$="TRANSACTION CANCELLED" REMARK IGNORE LAST ENTERED TRANSACTION GOSUB 615 RETURN 5800 GOSUB 5200 REMARK REDISPLAY TRANSACTION MASK AND VALUES. ALLOW CHANGES  REMARK RETRIEVE G/L EXTENT INFORMATION 6100 GOSUB 5000 REMARK DISPLAY PROGRAM TITLE X2=1:X3=0:X4=5:X2$="OPERATION 0=EXIT; 1=NEW INV; 2=DEL; 3=MOD;" REMARK REQUEST OPERATION CODE AND BRANCH TO APPROPRIATE AREA X2$=X2$+" 4=CREDIT; 5=DEBIT" G  OSUB 665 W1%=X0 W2%=W1% IF X0=0 THEN 6400 IF X0=2 OR X0=3 THEN GOTO 6120 W2%=1 IF W1%=4 THEN F1=6 \ ELSE F1=9 6120 F=0 6160 GOSUB 5000 REMARK DISPLAY PROGRAM TITLE GOSUB 5375 REMARK DISPLAY TYPE & OPERATION DESCRIPTIONS IF VOICE.EXTENT GOSUB 1060 IF H <>-1 THEN 6260 IF W2%=1 THEN 6300 REMARK INVOICE NOT ON FILE - OKAY IF NEW INVOICE TRANSACTION X2$="NOT ON FILE":GOSUB 615 GOTO 6240 6260 X0=L IF W2%=2 THEN GOTO 6330 REMARK BRANCH TO DELETE ROUTINE IF F>0 THEN 6220 X1=256:GOSUB 210 PRINT "VENDOR" X1=266:X2=6:X3=0:X4=0:GOSUB 345 REMARK REQUEST VENDOR NO. IF X0$ <=" " THEN 6100 IF W1$=X0$ THEN 6220 W1$=X0$ RECORD.COUNT=AP.VENDFILE.EXTENT Y2=1 XYZ$=W1$+" " K$=LEFT$(XYZ$,6):GOSUW2%=3 THEN GOTO 6310 REMARK BRANCH TO MODIFY ROUTINE X2$="ALREADY ON FILE":GOSUB 615 REMARK NEW INVOICE MUST NOT BE ON FILE GOTO 6240 6300 N=1 REMARK NEW INVOICE OR DEBIT MEMO ENTRY GOSUB 5200 REMARK DISPLAY MASK AND VALUESB 1060 REMARK SEARCH FOR VENDOR RCD IF H=-1 OR VAR1=0 THEN \ X2$="NOT ON FILE":\ GOSUB 615:\ W1$=" ":\ GOTO 6160 X0=L:Y9=1:GOSUB 3200 REMARK GET VENDOR RECORD 6220 X1=256:GOSUB 210 REMARK DISPLAY VENDOR DATA PRINT "VENDOR  FOR F=1 TO F1 GOSUB 5010 REMARK ENTER FIELD VALUES NEXT F GOSUB 5900 REMARK ALLOW CHANGES TO ENTRIES GOTO 6350 REMARK MODIFY EXISTING INVOICE RECORD 6310 GOSUB 5550 REMARK RETRIEVE INVOICE GOSUB 5200 REMARK D ";W1$ X1=384:GOSUB 210 FOR K%=2 TO 5 X1=21:GOSUB 215 PRINT M$(K%) NEXT K% FOR I%=1 TO 27 REMARK ZERO TRANSACTION RECORD VARIABLES D(I%)=0 C(I%)=0 NEXT I% D1=0 D2=0 N=0 W$="" 6240 GOSUB 5375 X1=320:GOSUB 210 PRINT "INISPLAY INVOICE FIELD VALUES GOSUB 5900 REMARK ALLOW CHANGES GOTO 6380 REMARK DELETE EXISTING INVOICE RECORD 6330 GOSUB 5550 REMARK RETRIEVE INVOICE GOSUB 5200 REMARK DISPLAY INVOICE FIELD VALUES X2=3:X3=0:X4=0:X2$="ENTEVOICE # " X1=330:X2=6:X3=0:X4=999999:GOSUB 345 REMARK REQUEST INVOICE NUMBER IF X0=0 THEN 6120 W0=X0 XYZ$=W1$+" " REMARK LET'S GET THE INVOICE # CHECKED. ZYX$="000000"+X0$ K$=LEFT$(XYZ$,6)+RIGHT$(ZYX$,6) Y2=2 RECORD.COUNT=AP.INR DELETE CODE":GOSUB 665 IF X0$="DEL" THEN GOSUB 5600 GOSUB 5000 GOTO 6220 6350 X0=3:GOSUB 260 REMARK G/L AND JOB DISTRIBUTION ENTRY GOSUB 5375 G=1:G1=11:GOSUB 5400 REMARK ENTER G/L DISTRIBUTION G=12:G1=22:GOSUB 5400 REMARK E  NTER JOB DISTRIBUTION GOSUB 5950 REMARK ALLOW CHANGES N1=0 6380 GOSUB 5460 REMARK CALCULATE INVOICE TOTAL X0=4:GOSUB 260 REMARK DISPLAY ACTION MASK GOSUB 5375 REMARK DISPLAY TYPE AND OPERATION X1=140:X2=1:X3=1:X4=4:GOSUB å345 REMARK ENTER ACTION CODE F=X0 N=F IF F=1 THEN GOSUB 5600:GOTO 6160 REMARK WRITE THE TRANSACTION RCD IF F=2 THEN GOSUB 5800:GOTO 6380 REMARK DISPLAY TRANSACTION DATA AND \ GO BACK TO ACTION CODE MASK IF F=3 THEN GOSUåB 5520:N1=1:GOTO 6380 REMARK DISPLAY G/L DATA AND GO BACK TO ACTION CODE MASK IF F=4 THEN GOSUB 5700:GOTO 6160 REMARK CANCEL TRANSACTION AND GO BACK TO VENDOR NUMBER ENTRY GOTO 6380 REMARK DEFAULT FALL-THROUGH 6400 PRINT CLEAR.SCREEN$;å"A/P TRANSACTION ENTRY LOADING MENU" REMARK EXIT PROGRAM ROUTINE CHAIN "A/P000" CANCEL TRANSACTION AND GO BACK TO VENDOR NUMBER ENTRY GOTO 6380 REMARK DEFAULT FALL-THROUGH 6400 PRINT CLEAR.SCREEN$;ååå   REMARK ************************************************************* REMARK * ACCOUNTS PAYABLE TRANSACTION SORT (A/P02A) * REMARK * VERS. OF 2.00 PM 6/12/79 * REMARK * ======================================================= * REMARKHEN 8000 IF END #1 THEN 7000 REMARK SET END-OF-FILE BRANCH REMARK ********** READ DATA RECORDS AND STRIP OFF KEY ELEMENTS FOR USE IN THE SORT ********** 6050 READ #1; VAR$,VAR1 RECORD.COUNT%=RECORD.COUNT% + 1 DATA$(RECORD.COUNT * THIS PROGRAM USES THE SHELL-METZNER SORTING ALGORITHM * REMARK * TO SORT A TRANSACTION FILE IN DECREASING INCREMENTS AND * REMARK * WRITE THE SORTED RECORDS OUT TO A WORKFILE. * REMARK * ONCE THE WORKFILE IS COMPLETELY WRITTEN, IT REP%)=VAR$ PRINT CURSOR.HOME$:PRINT:PRINT "RECORD #";RECORD.COUNT% X0$=ZERO$+STR$(VAR1) X0$=RIGHT$(X0$,6) REMARK CONVERT INVOICE # TO ALPHANUMERIC FOR I%=1 TO 6 STEP 2 DATA$(RECORD.COUNT%)=DATA$(RECORD.COUNT%)+CHR$(VAL(MID$(X0$,I%,2))) NEXTLACES THE * REMARK * FILE USED AS INPUT. * REMARK ************************************************************* ZERO$="000000" DIM DATA$(1000),C(27),D(27),P(5) %INCLUDE CURSOR GOTO 6000 %INCLUDE READINV %INCLUDE WRITEINV %INCLUDE A I% REMARK ROUTINE TO PACK INVOICE NUMBER X0$=ZERO$+STR$(RECORD.COUNT%) X0$=RIGHT$(X0$,4) X0%=VAL(LEFT$(X0$,2)) X1%=VAL(RIGHT$(X0$,2)) DATA$(RECORD.COUNT%)=DATA$(RECORD.COUNT%)+CHR$(X0%)+CHR$(X1%) GOTO 6050 REMARK GET THE NEXT RECO/P-INFO 6000 CONSOLE PRINT CLEAR.SCREEN$;"A/P TRANSACTION SORT/PRINT" PRINT "KEY RETURN TO BEGIN; ENTER 'END' TO EXIT" INPUT LINE A$ IF A$="END" THEN \ PRINT CLEAR.SCREEN$;"A/P SORT/PRINT LOADING MENU":\ CHAIN "A/P000" PRINT CLEAR.RD 7000 CLOSE 1 OPEN INPUT.FILE$ RECL RECLENGTH AS 1 PRINT "NUMBER OF RECORDS IN FILE =";RECORD.COUNT% M%=RECORD.COUNT% 7010 M%=M%/2 REMARK DIVIDE THE SORT INTERVAL IN HALF IF M%=0 THEN GOTO 7150 REMARK IF SORT INTERVAL IS EXHAUSTED,\SCREEN$;"SORT PHASE" PRINT "WORKING...DO NOT INTERRUPT" PRINT INPUT.FILE$="A/P0F020.DAT" OUTPUT.FILE$="WORKFILE.DAT" RECLENGTH=580 OPEN INPUT.FILE$ RECL RECLENGTH AS 1 OPEN "A/P0F130.DAT" AS 5 X0=5:GOSUB 3310 IF TRANSACTION.RCD.COUNT%=0 T RE-WRITE THE ORDERED FILE. K%=RECORD.COUNT%-M% J%=1 7040 I%=J% 7050 L%=I% + M% IF DATA$(I%) <= DATA$(L%) THEN GOTO 7120 TEMP$=DATA$(I%) DATA$(I%)=DATA$(L%) DATA$(L%)=TEMP$ I%=I% - M% IF I% > 0 THEN GOTO 7050 7120 J%=J%+1   IF J% > K% THEN GOTO 7010 ELSE GOTO 7040 7150 PRINT CLEAR.SCREEN$; PRINT "SORT PHASE ENDED" PRINT "WRITING SORTED RECORDS TO WORKFILE" PRINT "WORKING... DO NOT INTERRUPT" CREATE OUTPUT.FILE$ RECL RECLENGTH AS 2 FOR OUTPUT.COUNT%=1 TO RECORD.COUNåT% X0$=RIGHT$(DATA$(OUTPUT.COUNT%),2) X0%=ASC(LEFT$(X0$,1)) POINTER%=X0% * 100 X0%=ASC(RIGHT$(X0$,1)) POINTER%=POINTER% + X0% FILE.NO=1:X0%=POINTER%:GOSUB 3000 FILE.NO=2:X0%=OUTPUT.COUNT%:GOSUB 3050 NEXT OUTPUT.COUNT% DELETE 1 CLOSE 2 %NOLIST 3.14 READ #FILE.NO;AR.TRANFILE.EXTENT,AR.CUSTFILE.EXTENT,AR.INVFILE.EXTENT RETURN 3.15 PRINT #FILE.NO;AR.TRANFILE.EXTENT,AR.CUSTFILE.EXTENT,AR.INVFILE.EXTENT RETURN %LIST  A%=RENAME(INPUT.FILE$,OUTPUT.FILE$) CLOSE 5 OPEN "A/P0F130.DAT" AS 5 SORT%=1 X0=5:GOSUB 3350 8000 CHAIN "A/P02B" % + X0% FILE.NO=1:X0%=POINTER%:GOSUB 3000 FILE.NO=2:X0%=OUTPUT.COUNT%:GOSUB 3050 NEXT OUTPUT.COUNT% DELETE 1 CLOSE 2 åå  %NOLIST 3.14 READ #FILE.NO;AR.TRANFILE.EXTENT,AR.CUSTFILE.EXTENT,AR.INVFILE.EXTENT RETURN 3.15 PRINT #FILE.NO;AR.TRANF6),D(7),D(8),D(9),D(10),D(11),D(12),D(13) RETURN %LIST å%NOLIST 3400 READ #FILE.NO,REC.NO%;W1$,L1,L1$,L2,L2$,L4(1),L4(2),B,C2,L6,D(1),\ D(2),D(3),D(4),D(5),D(6),D(7),D(8),D(9),D(10),D(11),D(12),D(13) RETURN 3450 PRINT #FILE.NO,REC.NO%;W1$,L1,L1$,L2,L2$,L4(1),L4(2),B,C2,L6,D(1),\ D(2),D(3),D(4),D(5),D(å  å100 THEN PRINT "R# CUST INV # CUST ORDER #";:\ PRINT" JOB DSCRPT BILLED TAX"; PRINT TAB(59);"INV AMT";TAB(72);"SHIP";TAB(81);"TAXES INV PAY"; PRINT" PROG DATE PROG BILL PROG PAY T O" PRINT LINE.COUNT%=6 RETURN REMARKå START OF MAIN PROGRAM 6000 MASKA$=" ######" MASKB$=" #####.#" MASKC$="#######.##" MASKD$=" #" MASKE$="###" OPEN "A/R0F130.DAT" AS 1 FILE.NO=1: GOSUB 3.14 REMARK RETREIVE A/R EXTENT INFORMATION OPEN "G/I0F010.DAT" AS 2 Y9=2:GOSUB 700 REMARK ######################################################### REMARK # ACCOUNTS RECEIVABLE TRANSACTION PRINT (A/R020) # REMARK # VERS. OF 12.30 PM 3/4/79 # REMARK ######################################################### DIM A(6),G(7,9), REMARK RETRIEVE GENERAL INFORMATION FILE DATA OPEN "A/R0F020.DAT" RECL 226 AS 5 REMARK OPEN A/R TRANSACTION FILE IF AR.TRANFILE.EXTENT=0 THEN \ PRINT CLEAR.SCREEN$;:\ X2$="NO TRANSACTIONS ON FILE":\ GOSUB 615:\ GOTO 6240 6010 FORL4(2),D$(2),D(20),G2$(5),G3(5) %INCLUDE CURSOR GOTO 6000 %INCLUDE A/R-INFO %INCLUDE SUBS1 %INCLUDE GENINFO %INCLUDE A/R-INV DATA "NEW","INV BILLING","INV PAYMENT","PROG PAYMENT","DELETE" DATA"MODIFY" 825 IF LINE.COUNT%<55 AND PAGE.COUNT%> I%=1 TO 6 REMARK ZERO TOTALS A(I%)=0 NEXT I% FOR I%=1 TO 7 FOR J%=1 TO 9 G(I%,J%)=0 NEXT J%,I% CONSOLE PRINT CLEAR.SCREEN$;"A/R TRANSACTION PRINT" PRINT:PRINT:PRINT:PRINT"START RECORD NUMBER" PRINT"END RECORD NUMBER" PAGE.COUNT0 THEN RETURN REMARK LINE PRINTER ROUTINE PAGE.COUNT%=PAGE.COUNT%+1 PRINT CHR$(12);TAB((A1-LEN(G2$(1)))/2);G2$(1);TAB(A1);"DATE "; X0=G3(1):GOSUB 680.5 PRINT PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";PAGE.COUNT% PRINT IF LINE.COUNT%<>%=0:LINE.COUNT%=0 6020 X1=281:X2=3:X3=0:X4=AR.TRANFILE.EXTENT:GOSUB 345 REMARK ENTER START RECORD NO. IF X0=0 THEN 6240 F0=X0 F1=X0-1 X1=345:X2=3:X3=F0:X4=999:GOSUB 345 REMARK ENTER END RECORD NO. F=X0 IF F>AR.TRANFILE.EXTENT THEN F=AR.TRA  NFILE.EXTENT X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665 REMARK VERIFY ENTRY IF X0=0 THEN 6020 LPRINTER FOR F1%=F0 TO F REMARK START MAIN PRINT LOOP FILE.NO=5:REC.NO%=F1%:GOSUB 3400 REMARK RETRIEVE NEXT TRANSACTION C2=C2-INT(C2:A1=115:GOSUB 825 RESTORE FOR I%=1 TO 6 PRINT PRINT USING MASKA$;A(I%); READ X0$ PRINT " ";X0$;" TRANSACTIONS";TAB(56); FOR J%=1 TO 3 PRINT USING MASKC$;G(I%,J%); G(7,J%)=G(7,J%)+G(I%,J%) NEXT J% PRINT USING MASKC$;G(I%,5); G(7,5)/10)*10 REMARK STRIP TENS DIGIT (IF ANY) OFF THE OPERATION CODE A(C2)=A(C2)+1 X4$="A/R TRANSACTIONS":A1=115:GOSUB 825 FOR I%=1 TO 9 G(C2,I%)=G(C2,I%)+D(I%) REMARK ACCUMULATE TOTALS NEXT I% REMARK PRINT TRANSACTION PRINT USIN=G(7,5)+G(I%,5) PRINT TAB(107); PRINT USING MASKC$;G(I%,8);G(I%,9) G(7,8)=G(7,8)+G(I%,8) G(7,9)=G(7,9)+G(I%,9) NEXT I% PRINT PRINT TAB(15);"TOTALS";TAB(56); FOR I%=1 TO 3 PRINT USING MASKC$;G(7,I%); NEXT I% PRINT USING MASKC$;G(7,5); G MASKE$;F1%; PRINT TAB(5);W1$;TAB(11); PRINT USING MASKA$;L1; PRINT TAB(19);L1$;TAB(31); PRINT USING MASKA$;L2; PRINT TAB(39);L2$;TAB(46); IF L4(1)<>0 THEN X0=L4(1):GOSUB 680.5 PRINT TAB(54); PRINT USING MASKD$;L6; FOR I%=1TO 3 PRINT U PRINT TAB(107); PRINT USING MASKC$;G(7,8);G(7,9) PRINT PRINT "START RECORD #",F0 PRINT "END RECORD #",F PRINT "TOTAL IN FILE",AR.TRANFILE.EXTENT GOTO 6010 6240 PRINT CLEAR.SCREEN$;"A/R TRANSACTION PRINT LOADING MENU" REMARK END PROGSING MASKC$;D(I%); NEXT I% PRINT USING MASKC$;D(5); IF D(12)<>0 THEN PRINT "CM" PRINT TAB(99); IF L4(2)<>0 THEN X0=L4(2):GOSUB 680.5 PRINT TAB(107); PRINT USING MASKC$;D(8);D(9); PRINT USING MASKD$;B;C2 LINE.COUNT%=LINE.COUNT%+1 IF D(13RAM AND RELOAD MENU CHAIN"A/P000" L IN FILE",AR.TRANFILE.EXTENT GOTO 6010 6240 PRINT CLEAR.SCREEN$;"A/R TRANSACTION PRINT LOADING MENU" REMARK END PROG)<>0 THEN \ PRINT " G/L # ";:\ PRINT USING MASKB$;D(13):\ LINE.COUNT%=LINE.COUNT%+1 NEXT F1% IF F0=F THEN 6010 REMARK IF ONLY ONE TRANSACTION, DON'T PRINT TOTALS LINE.COUNT%=100 REMARK PRINT TOTALS X4$="A/R TRANSACTIONS"å  ååå REMARK ************************************************************* REMARK * ACCOUNTS RECEIVABLE UPDATE SORT (A/R03A) * REMARK * VERS. OF 10.45 PM 5/13/79 * REMARK * ======================================================= * REMAåRK * THIS PROGRAM USES THE SHELL-METZNER SORTING ALGORITHM * REMARK * TO SORT A TRANSACTION FILE IN DECREASING INCREMENTS AND * REMARK * WRITE THE SORTED RECORDS OUT TO A WORKFILE. * REMARK * ONCE THE WORKFILE IS COMPLETELY WRITTEN, IT RåEPLACES THE * REMARK * FILE USED AS INPUT. * REMARK ************************************************************* ZERO$="000000" DIM DATA$(1000),L4(2),D(13) %INCLUDE CURSOR GOTO 6000 %INCLUDE A/R-INV %INCLUDE A/R-INFO 6000 åCONSOLE PRINT CLEAR.SCREEN$;"A/R UPDATE" PRINT "KEY RETURN TO BEGIN; ENTER 'END' TO EXIT" INPUT LINE A$ IF A$="END" THEN \ PRINT CLEAR.SCREEN$;"A/R UPDATE LOADING MENU":\ CHAIN "A/P000" PRINT CLEAR.SCREEN$;"SORT PHASE" PRINT "WORKING...DO   NOT INTERRUPT" PRINT INPUT.FILE$="A/R0F020.DAT" OUTPUT.FILE$="WORKFILE.DAT" RECLENGTH=226 OPEN INPUT.FILE$ RECL RECLENGTH AS 1 OPEN "A/R0F130.DAT" AS 5 FILE.NO=5:GOSUB 3.14 IF AR.TRANFILE.EXTENT=0 THEN 8000 IF END #1 THEN 7000 REMARK%=RECORD.COUNT%-M% J%=1 7040 I%=J% 7050 L%=I% + M% IF DATA$(I%) <= DATA$(L%) THEN GOTO 7120 TEMP$=DATA$(I%) DATA$(I%)=DATA$(L%) DATA$(L%)=TEMP$ I%=I% - M% IF I% > 0 THEN GOTO 7050 7120 J%=J%+1 IF J% > K% THEN GOTO 7010 ELSE GOTO 7040 K SET END-OF-FILE BRANCH REMARK ********** READ DATA RECORDS AND STRIP OFF KEY ELEMENTS FOR USE IN THE SORT ********** 6050 READ #1; VAR$,VAR1 RECORD.COUNT%=RECORD.COUNT% + 1 DATA$(RECORD.COUNT%)=VAR$ PRINT CURSOR.HOME$:PRINT:PRINT  7150 PRINT CLEAR.SCREEN$; PRINT "SORT PHASE ENDED" PRINT "WRITING SORTED RECORDS TO WORKFILE" PRINT "WORKING... DO NOT INTERRUPT" CREATE OUTPUT.FILE$ RECL RECLENGTH AS 2 FOR OUTPUT.COUNT%=1 TO RECORD.COUNT% X0$=RIGHT$(DATA$(OUTPUT.COUNT%),2) "RECORD #";RECORD.COUNT% X0$=ZERO$+STR$(VAR1) X0$=RIGHT$(X0$,6) REMARK CONVERT INVOICE # TO ALPHANUMERIC FOR I%=1 TO 6 STEP 2 DATA$(RECORD.COUNT%)=DATA$(RECORD.COUNT%)+CHR$(VAL(MID$(X0$,I%,2))) NEXT I% REMARK ROUTINE TO PACK INVOICE X0%=ASC(LEFT$(X0$,1)) POINTER%=X0% * 100 X0%=ASC(RIGHT$(X0$,1)) POINTER%=POINTER% + X0% FILE.NO=1:REC.NO%=POINTER%:GOSUB 3400 FILE.NO=2:REC.NO%=OUTPUT.COUNT%:GOSUB 3450 NEXT OUTPUT.COUNT% DELETE 1 CLOSE 2 A%=RENAME(INPUT.FILE$,OUTPUT.FIL NUMBER X0$=ZERO$+STR$(RECORD.COUNT%) X0$=RIGHT$(X0$,4) X0%=VAL(LEFT$(X0$,2)) X1%=VAL(RIGHT$(X0$,2)) DATA$(RECORD.COUNT%)=DATA$(RECORD.COUNT%)+CHR$(X0%)+CHR$(X1%) GOTO 6050 REMARK GET THE NEXT RECORD 7000 CLOSE 1 OPEN INPUT.FILE$ RECL E$) 8000 CHAIN "A/R03B" B 3400 FILE.NO=2:REC.NO%=OUTPUT.COUNT%:GOSUB 3450 NEXT OUTPUT.COUNT% DELETE 1 CLOSE 2 A%=RENAME(INPUT.FILE$,OUTPUT.FILRECLENGTH AS 1 PRINT "NUMBER OF RECORDS IN FILE =";RECORD.COUNT% M%=RECORD.COUNT% 7010 M%=M%/2 REMARK DIVIDE THE SORT INTERVAL IN HALF IF M%=0 THEN GOTO 7150 REMARK IF SORT INTERVAL IS EXHAUSTED,\ RE-WRITE THE ORDERED FILE. å  åPRINT CHR$(12);TAB((A1-LEN(G2$(1)))/2);G2$(1);TAB(A1);"DATE "; X0=G3(1):GOSUB 680.5 PRINT PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";PAGE.COUNT% PRINT IF LINE.COUNT%<>100 THEN \ PRINT "REC CUST INV #";TAB(24);"CASH ACCT RCVB SALES";:\ å PRINT " INC DEFER INC SHIPPING";TAB(78);"TAXES INV";:\ PRINT " AMT TAX TYPE OP" \ ELSE \ PRINT TAB(34);"INV AMT";TAB(48);"SHIP";TAB(58);"TAXES INV";:\ PRINT " TOTAL";TAB(78);"INV PAY";TAB(89);"PR BILL PROG PAY" PRINT LINE.COUNT REMARK ######################################################### REMARK # ACCOUNTS RECEIVABLE UPDATE (A/R03B) # REMARK # VERS. OF 1.15 PM 6/28/79 # REMARK ######################################################### %INCLUDE CURSOR DIM G(6%=6 RETURN 4000 PRINT USING MASKB$;P1; REMARK PRINT POSTING TOTALS PRINT " ";X0$;TAB(27); IF I1<>0 THEN PRINT USING MASKA$;I1; PRINT TAB(38); PRINT USING MASKA$;P5 4040 IF P1*P5=0 THEN RETURN REMARK UPDATE TRANSACTION TO G/L POST),F(10,2),S(6,8),C.(7),D(13),G2$(5),G3(5),L4(2) DIM M$(5),Y(2),R1(10),R2(10),R$(10) GOTO 6000 DATA "NEW","INV BILLING","INV PAYMENT","PROG PAYMENT","DELETE","MODIFY" %INCLUDE SUBS1 %INCLUDE BINSEARC %INCLUDE GENINFO %INCLUDE A/RTAX %INCLUDE A/R-ING FILE P4=L1 RETURN REMARK SKIP UNLESS G/L IMPLEMENTED EXTERNAL.POSTING.EXTENT%=EXTERNAL.POSTING.EXTENT%+1 IF EXTERNAL.POSTING.EXTENT% + DIRECT.POSTING.EXTENT% \ >= MAX.POSTING.RECORDS THEN GL.FILE.FULL = 1 FILE.NO%=8:RECORD.NO%=EXTERINFO %INCLUDE A/R-INV %INCLUDE READCUST %INCLUDE WRITCUST .314 RETURN REMARK THESE LINE NUMBERS FOR G/L SUBROUTINES .315 RETURN 3650 RETURN 825 IF LINE.COUNT%<55 THEN RETURN REMARK LINE PRINTER ROUTINE PAGE.COUNT%=PAGE.COUNT%+1 NAL.POSTING.EXTENT%:GOSUB 3650 RETURN 4140 FOR I%=1 TO 11 REMARK REVERSE SIGN OF INVOICE AMOUNTS IF D(I%)<>0 THEN D(I%)=-D(I%) NEXT I% RETURN REMARK SAVE TRANSACTION RECORD ON WORKFILE 4160 IF C=5 THEN \ REMARK ZER  O ALL NUMERIC FIELDS ON DELETE-FLAGGED INVOICES FOR I%=1 TO 13:\ D(I%)=0:\ NEXT I% IF H2$<>" " THEN RETURN REMARK DO NOT SAVE TRANSACTION IF IT CAUSED AN ERROR IF B=2 THEN GOSUB 4140 REMARK RE-REVERSE THE SIGNS ON A CREDIT MEMO GOS REMARK RETRIEVE A/R TAX CODE INFORMATION I1$=" " REMARK INITIALIZE VARIABLES H2$=" " INVOICE.POINTER%=1 P2=2 P3=(INT(G3(1)/100))/100 LINE.COUNT%=60 LPRINTER 6060 FOR I%=1 TO 7 REMARK ZERO TRANSACTION TOTALS C.(I%)=0 NEXUB 6900 REMARK SAVE THE TRANSACTION TO THE WORKFILE IF C>1 THEN INVOICE.POINTER%=INVOICE.POINTER%+1 RETURN 4260 IF CUSTOMER.POINTER%=0 OR Y(2)=Y1 THEN RETURN W$=W1$ W1$=I1$ Y9=2:X0=CUSTOMER.POINTER%:GOSUB 3275 REMARK RESAVE THE CUST I% IF R% THEN \ C2=C2+10:\ FILE.NO=4:REC.NO%=R%:GOSUB 3450 IF INV.FILE.FULL THEN GOTO 6840 IF GL.FILE.FULL THEN GOTO 6850 R%=R%+1 REMARK INCREMENT TRANSACTION FILE COUNTER IF R%>AR.TRANFILE.EXTENT THEN 6580 REMARK BRANCH AT END TOMER RECORD W1$=W$ RETURN 6000 MASKA$=" #######.##" REMARK START OF MAINLINE CODE MASKB$=" #####.#" MASKC$=" ######" MASKD$="###" PRINT CLEAR.SCREEN$;"A/R UPDATE" PRINT "WORKING... DO NOT INTERRUPT" OPEN "G/I0F010.DAT" AS 1,"AOF TRANSACTION FILE FILE.NO=4:REC.NO%=R%:GOSUB 3400 REMARK RETRIEVE NEXT TRANSACTION DATA IF B=2 THEN GOSUB 4140 C=C2 IF C>9 THEN 6060 REMARK SKIP "USED" TRANSACTIONS Y2=3 RECORD.COUNT=AR.INVFILE.EXTENT XYZ$=W1$+" ":ZYX$="000000/R0F110.DAT" RECL 162 AS 2,\ "A/R0F120.DAT" RECL 226 AS 3,"A/R0F020.DAT" RECL 226 AS 4,\ "A/R0F030.DAT" AS 5, "A/R0F130.DAT" AS 6 CREATE "WORKFILE.DAT" RECL 226 AS 7 6010 MAX.INVOICE.RECORDS = 200 MAX.POSTING.RECORDS = 1000 GOTO 6040 REMAR"+STR$(L1) NEW.KEY$=LEFT$(XYZ$,6)+RIGHT$(ZYX$,6) IF NEW.KEY$=TRAN.KEY$ THEN H2$="DOUBLE TRANSACTION":GOTO 6360 TRAN.KEY$=NEW.KEY$ IF INV.KEY$="ZZZZZZZZZZZZ" THEN 6100 REMARK IF LAST INVOICE RECORD HAS BEEN READ, BRANCH K$=TRAN.KEY$ GOSUB 106K SKIP OPENING THE G/L FILES OPEN "G/L0F020.DAT" RECL 36 AS 8,"G/L0F130.DAT" AS 9 FILE.NO%=9:GOSUB .314 6040 Y9=1:GOSUB 700 REMARK RETRIEVE G/I FILE DATA FILE.NO=6:GOSUB 3.14 REMARK RETRIEVE A/R INFORMATION FILE DATA A1=5:GOSUB 3700 0 REMARK LOCATE NEXT INVOICE RECORD IF INVOICE.POINTER% > AR.INVFILE.EXTENT THEN \ INV.KEY$="ZZZZZZZZZZZZ":GOTO 6100 IF INVOICE.POINTER%=L THEN 6070 REMARK IF NEXT INVOICE HAS NOT CHANGED, BRANCH FOR I%=INVOICE.POINTER% TO L-1 FILE.NO=3  :REC.NO%=I%:GOSUB 3400 REMARK COPY UNCHANGED INVOICE TO WORKFILE INVOICE.POINTER%=INVOICE.POINTER%+1 IF B<>-1 THEN GOSUB 6900 NEXT I% IF INV.FILE.FULL THEN GOTO 6840 IF L>AR.INVFILE.EXTENT THEN INV.KEY$="ZZZZZZZZZZZZ":GOTO 6080 6070 FILE.NO= S(C,I%)=S(C,I%)+D(I%) NEXT I% IF L4(2)<>0 THEN C.(2)=C.(2)-D(8):C.(4)=C.(4)-D(8) REMARK ADJUST A/R AND DEFERRED INCOME TOTALS IF D(13)<>0 THEN P1=ABS(D(13)):P5=SGN(D(13))*D(1):GOSUB 4040 REMARK POST AMOUNT D(1) TO ACCOUNT D(13) IF D(13)<0 THEN 3:REC.NO%=INVOICE.POINTER%:GOSUB 3400 REMARK READ NEXT INVOICE FROM INVOICE FILE IF B=2 THEN GOSUB 4140 XYZ$=W1$+" ":ZYX$="000000"+STR$(L1) INV.KEY$=LEFT$(XYZ$,6)+RIGHT$(ZYX$,6) IF B=-1 AND INV.KEY$=TRAN.KEY$ THEN 6060 6080 FILE.NO=4:REC.NOF(1,1)=F(1,1)-D(1) IF D(13)<=0 THEN F(1,2)=F(1,2)-D(1) 6200 IF D(5)<>0 THEN \ REMARK ADJUST CASH AND A/R TOTALS WITH NON-ZERO PAYMENTS C.(1)=C.(1)+D(5):\ C.(2)=C.(2)-D(5):\ S(C,5)=S(C,5)+D(5) IF C=3 THEN 6360 REMARK END OF INVOICE P%=R%:GOSUB 3400 REMARK RE-LOAD TRANSACTION DATA IF B=2 THEN GOSUB 4140 6100 IF C=1 AND TRAN.KEY$=INV.KEY$ THEN H2$="DUPLICATE":GOTO 6360 REMARK CHECK FOR ERRORS IF C>1 AND TRAN.KEY$<>INV.KEY$ THEN H2$="NOT ON INV FILE":GOTO 6360 S(C,8)=S(C,8)+1 AYMENT OPERATION 6240 IF L4(2)=0 THEN 6300 REMARK IF PROGRESS DUE DATE IS NON-ZERO... S(C,6)=S(C,6)+D(8) REMARK ADJUST TOTALS BY PROGRESS BILLING AMOUNT C.(2)=C.(2)+D(8) C.(4)=C.(4)+D(8) 6260 IF D(9)<>0 THEN \ REMARK IF PROGRESS PAYM ON C GOTO 6140,6320,6200,6260,6120,6320 REMARK BRANCH ON OPERATION CODE 6120 D(5)=D(6) REMARK OPERATION IS DELETE D(9)=D(10) GOSUB 4140 REMARK REVERSE SIGNS TO SUBTRACT VALUES FROM TOTALS REMARK FOR TRANSACTIONS WITH NONENT AMOUNT IS NON-ZERO... C.(1)=C.(1)+D(9):\ REMARK ADJUST CASH AND A/R TOTALS C.(2)=C.(2)-D(9):\ S(C,7)=S(C,7)+D(9) IF C=4 THEN 6360 REMARK END OF PROGRESS PAYMENT OPERATION 6300 IF F7=1 THEN GOTO 6340 \ ELSE GOTO 6360 REM-ZERO BILL DATES 6140 IF L4(1)=0 THEN 6240 REMARK ADD INVOICE AMOUNTS, ETC. TO TOTALS C.(5)=C.(5)+D(2) F(L6+1,1)=F(L6+1,1)+D(3) C.(6)=C.(6)+D(3) C.(3)=C.(3)+D(4) C.(2)=C.(2)+D(4) F(L6+1,2)=F(L6+1,2)+D(1) C.(7)=C.(7)+D(1) FOR I%=1 TO 4ARK START MODIFY OPERATION 6320 FILE.NO=3:REC.NO%=INVOICE.POINTER%:GOSUB 3400 REMARK RETRIEVE OLD INVOICE IF B=2 THEN GOSUB 4140 IF C2=5 THEN 6340 GOSUB 4140 REMARK REVERSE SIGNS F7=1 GOTO 6140 REMARK BACK INVOICE AMOUNTS OUT OF TO!  TALS 6340 F7=0 REMARK MODIFY OPERATION, PART TWO FILE.NO=4:REC.NO%=R%:GOSUB 3400 REMARK RETRIEVE MODIFY TRANSACTION DATA IF B=2 THEN GOSUB 4140 GOTO 6140 REMARK ADD TRANSACTION AMOUNTS TO TOTALS 6360 GOSUB 4160 REMARK SAVE TRW1$," NOT IN CUSTOMER FILE":\ CUSTOMER.POINTER%=0:\ LINE.COUNT%=LINE.COUNT%+1:\ GOTO 6060 Y9=2:X0=L:GOSUB 3225 REMARK AND RETRIEVE THE NEW CUSTOMER DATA CUSTOMER.POINTER%=L I1$=W1$ Y1=Y(2) 6500 Y(2)=Y(2)+C.(3)+C.(4) REMARK ADD NANSACTION ON WORKFILE FOR I%=1 TO 4 REMARK ACCUMULATE TRANSACTION TOTALS TO GRAND TOTALS G(I%)=G(I%)+C.(I%) NEXT I% IF L6=0 THEN G(6)=G(6)+C.(5):\ ELSE G(5)=G(5)+C.(5) X4$="A/R UPDATE":A1=115:GOSUB 825 REMARK PRINT TRANSACTION TOTALS EW AMOUNTS TO CUSTOMER BILLING TOTAL IF L4(1)>D THEN D=L4(1) GOTO 6060 6580 LPRINTER REMARK END PROGRAM AND PRINT TOTALS GOSUB 4260 REMARK RESAVE LAST CUSTOMER RECORD IF INVOICE.POINTER% >= AR.INVFILE.EXTENT THEN 6620 REMARK COPY  PRINT USING MASKD$;R%; PRINT TAB(5);W1$; PRINT USING MASKC$;L1; FOR I%=1 TO 7 PRINT USING MASKA$;C.(I%); NEXT I% PRINT " ";L6;" ";B;" ";C; IF D(12)<>0 THEN PRINT " (CR) "; PRINT TAB(112);H2$ H2$=" " LINE.COUNT%=LINE.COUNT%+1 IF D(THE REST OF THE INVOICE FILE TO THE WORKFILE FOR I%=INVOICE.POINTER% TO AR.INVFILE.EXTENT FILE.NO=3:REC.NO%=I%:GOSUB 3400 INVOICE.POINTER%=INVOICE.POINTER%+1 IF B<>-1 THEN GOSUB 6900 NEXT I% 6620 LINE.COUNT%=100 X4$="A/R UPDATE":A1=115:GOSUB 813)<>0 THEN \ REMARK PRINT G/L NUMBER, IF ANY, ON A SEPARATE LINE PRINT " G/L #";:\ PRINT USING MASKB$;D(13):\ LINE.COUNT%=LINE.COUNT%+1 IF C.(3)+C.(4)=0 THEN 6060 IF I1$=" " THEN 6460 IF I1$=W1$ THEN 6500 REMARK WHEN CUSTOMERS C25 REMARK PRINT TOTALS RESTORE FOR I%=1 TO 6 READ A$ PRINT USING MASKC$;S(I%,8); PRINT TAB(8);" "; PRINT A$;" TRANS";TAB(30); FOR J%=1 TO 7 PRINT USING MASKA$;S(I%,J%); NEXT J% PRINT NEXT I% PRINT:PRINT:PRINT TAB(9);"GENERAL LEDHANGE... GOSUB 4260 REMARK UPDATE THE OLD CUSTOMER RECORD 6460 XYZ$=W1$+" " Y2=2 K$=LEFT$(XYZ$,6) RECORD.COUNT=AR.CUSTFILE.EXTENT GOSUB 1060 REMARK LOCATE THE NEW CUSTOMER RECORD IF H=-1 OR VAR1=0 THEN \ I1$=" ":\ PRINT GER POSTING TOTALS":PRINT PRINT " ACCT # NAME";TAB(43);"AMOUNT" L1=0 P1=2:I1=0:P5=G(1):X0$="CASH":GOSUB 4000 P1=5:I1=0:P5=G(2):X0$="ACCT. RECEIVABLE":GOSUB 4000 P1=2029:I1=0:P5=F(2,1)+F(3,1)+F(4,1)+F(5,1)+F(6,1)+F(7,1)+F(8,1)+F(9,1) P5=P5+F(10"  ,1):X0$="SALES TAX PAYABLE":GOSUB 4000 P1=2230:I1=0:P5=G(4):X0$="DEFERRED INCOME":GOSUB 4000 P1=2611:I1=0:P5=-G(5):X0$="SHIPPING":GOSUB 4000 P1=3325:I1=0:P5=-G(6):X0$="TRAVEL, ETC.":GOSUB 4000 PRINT:PRINT:PRINT " ACCT # SALES ACCOUNTS";TAB(35);"TAGOTO 6580 ELSE GOTO 6841 6850 CONSOLE REMARK G/L FILE OVERFLOW DETECTED PRINT "G/L FILE FULL. PRESS 'RETURN' TO PRINT TOTALS" 6851 IF CONSTAT% THEN PRINT:GOTO 6580 ELSE GOTO 6851 6900 OUTPUT.COUNT%=OUTPUT.COUNT%+1 REMARK SUBROUTINEX AMOUNT" FOR I%=2 TO 10 P1=R2(I%):I1=F(I%,1):P5=F(I%,2):X0$=R$(I%):GOSUB 4000 NEXT I% PRINT:PRINT:PRINT TAB(30);"DECREASE INCREASE" P1=0:I1=F(1,1):P5=F(1,2):X0$=R$(1):GOSUB 4000 PRINT GOTO 6800 REMARK BYPASS SAVING NEW G/L EXTENT TO ADD A RECORD TO THE WORKFILE IF OUTPUT.COUNT% + AR.INVFILE.EXTENT - INVOICE.POINTER% >= \ MAX.INVOICE.RECORDS - 1 THEN INV.FILE.FULL = 1 FILE.NO=7 REC.NO%=OUTPUT.COUNT% GOSUB 3450 RETURN  INFORMATION CLOSE 9 OPEN "G/L0F130.DAT" AS 9 FILE.NO%=9:GOSUB .315 6800 IF INV.FILE.FULL OR GL.FILE.FULL THEN GOTO 6810 REMARK IF UPDATE CONCLUDED SUCCESSFULLY... DELETE 4 REMARK DELETE THE OLD TRANSACTION FILE CREATE "A/R0F020.DAT" RECåL 226 AS 4 REMARK CREATE AN EMPTY TRANSACTION FILE AR.TRANFILE.EXTENT=0 6810 CLOSE 6 OPEN "A/R0F130.DAT" AS 6 AR.INVFILE.EXTENT=OUTPUT.COUNT% FILE.NO=6:GOSUB 3.15 REMARK RESET THE A/R EXTENT INFORMATION CLOSE 7 DELETE 3 A=RENAME("A/Rå0F120.DAT","WORKFILE.DAT") 6820 CONSOLE PRINT CLEAR.SCREEN$;"A/R UPDATE LOADING MENU" CHAIN "A/P000" 6840 CONSOLE REMARK INVOICE FILE OVERFLOW DETECTED PRINT "INVOICE FILE FULL. PRESS 'RETURN' TO PRINT TOTALS" 6841 IF CONSTAT% THEN PRINT:å#   REMARK ############################################# REMARK # ACCOUNTS RECEIVABLE LEDGER PROGRAM # REMARK # (A/R040) VERS OF 3 PM 6/19/79 # REMARK ############################################# DIM A(7),B.(9),C(9),M$(AY";TAB(102);"PROG BILL";:\ PRINT " PROG PAY PROG DUE" PRINT LINE.COUNT%=6 RETURN 4000 YEAR=100*((I/100)-INT(I/100)) REMARK COMPUTE # OF DAYS BETWEEN DATE "I" AND 00/00/00 DAY=100*((I-YEAR)/10000-INT((I-YEAR)/10000)) MONTH=(I-(100*5),Y(2),L4(2),G3(5),D(13),G2$(5) DATA "A/R OPEN ITEMS","A/R AGING ANALYSIS","A/R CLOSED ITEMS" DATA "A/R UNBILLED ITEMS",0,3,3,6,8,11,13,16,19,21,24,26 %INCLUDE CURSOR GOTO 6000 %INCLUDE SUBS1 %INCLUDE BINSEARC %INCLUDE A/R-INFO %INCLUDE READCUSDAY+YEAR))/10000 IF MONTH=0 OR MONTH>12 THEN A4=0:RETURN RESTORE FOR I%=1 TO MONTH + 4 READ A4 NEXT I% A4=A4+YEAR*365+INT(YEAR/4)+1+(MONTH-1)*28+DAY IF INT(YEAR/4)<>(YEAR/4) THEN RETURN IF MONTH<=2 THEN A4=A4-1 RETURN 4080 I=I2:GOSUBT %INCLUDE GENINFO %INCLUDE A/R-INV 825 IF LINE.COUNT%<55 AND PAGE.COUNT%>0 THEN RETURN REMARK LINE PRINTER ROUTINE PAGE.COUNT%=PAGE.COUNT%+1 PRINT CHR$(12); PRINT TAB((A1-LEN(G2$(1)))/2);G2$(1);TAB(A1);"DATE "; X0=G3(1):GOSUB 680.5 PR 4000 REMARK COMPUTE THE NUMBER OF DAYS BETWEEN DATES I2 & J2 A.=A4 I=J2:GOSUB 4000 A.=A.-A4 RETURN REMARK PRINT CUSTOMER TOTALS, AND ADD THEM TO GRAND TOTALS 4220 IF B.(8)=0 THEN RETURN REMARK BUT NOT IF CUSTOMER BALANCE IINT PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";PAGE.COUNT% PRINT IF R3=2 AND S=2 THEN \ PRINT " CUST # CUSTOMER";TAB(35);"PHONE"; \ ELSE \ PRINT " INV # T CUST ORDER # JOB # DESC BILL DATE"; 838 IF R3=2 THEN \ PRINT TAB(46);"TOTS ZERO IF R3<>2 THEN \ PRINT " TOTAL";: \ PRINT USING MASKC$;B.(8),B.(9); PRINT TAB(44); PRINT USING MASKA$;B.(1),B.(2),B.(3),B.(4),B.(5); PRINT " "; PRINT USING MASKA$;B.(6),B.(7) FOR I5%=1 TO 9 C(I5%)=C(I5%)+B.(I5%) B.(I5%)=0 NEAL BAL";TAB(59);"CURRENT";TAB(71);: \ PRINT "30 DAY";TAB(82);"60 DAY";TAB(93);"90 DAY";TAB(102);: \ PRINT "PROG CURR PR 10-DAY PROG DUE" \ ELSE \ PRINT TAB(48);"INV AMT";TAB(62);"SHIP";TAB(72);"TAXES";: \ PRINT TAB(83);"TOTAL";TAB(92);"INV PXT I5% X0$="----" FOR I%=1 TO 5:X0$=X0$+X0$:NEXT I% PRINT X0$ LINE.COUNT%=LINE.COUNT%+2 RETURN 4500 Y2=2 REMARK LOCATE, RETRIEVE, AND PRINT CUSTOMER DATA RECORD.COUNT = AR.CUSTFILE.EXTENT XYZ$=W1$+" " K$=LEFT$(XYZ$,6) GOS$  UB 1060 REMARK LOCATE CUSTOMER DATA IF H=-1 OR VAR1=0 THEN \ M$(2)="NO CUSTOMER INFO": \ Y(1)=0:Y(2)=0 \ ELSE \ Y9=2:X0=L:GOSUB 3225 REMARK RETRIEVE CUSTOMER DATA PRINT "CUST ";W1$;" ";M$(2); IF R3=2 THEN \ PRINT TAB(43);: \X1=270:X2=1:X3=0:X4=4:GOSUB 345 REMARK ENTER REPORT FORMAT IF X0=0 THEN 6480 R3=X0 S=1 IF R3>2 THEN 6080 X1=334:X2=1:X3=1:X4=3:GOSUB 345 REMARK ENTER REPORT TYPE S=X0 IF S=3 THEN \ REMARK CUSTOMER RANGE REPORT TYPE X1=538:X2= X0=P9:GOSUB 760.5: \ PRINT TAB(58);: \ PRINT USING MASKB$;Y(2),Y(1): \ LINE.COUNT%=LINE.COUNT%+1:RETURN IF R3<2 THEN PRINT USING MASKB$;Y(2),Y(1); PRINT LINE.COUNT%=LINE.COUNT%+1 RETURN 4620 IF B<>2 THEN RETURN REMARK REVERS6:X3=0:X4=0:GOSUB 345:\ REMARK ENTER FIRST CUSTOMER X0$=X0$+" ":\ W8$=LEFT$(X0$,6):\ X1=602:X2=6:X3=0:X4=0:GOSUB 345:\ REMARK ENTER LAST CUSTOMER X0$=X0$+" ":\ W0$=LEFT$(X0$,6) 6080 IF R3=3 THEN \ REMARK CLOSED ITEM LISTE SIGNS ON CREDIT MEMOS FOR I%=1 TO 11 IF D(I%)<>0 THEN D(I%)=-D(I%) NEXT I% RETURN REMARK START OF MAIN PROGRAM 6000 MASKA$=" #######.##" MASKB$=" SALES YTD #######.## LAST YEAR #######.##" MASKC$=" BAL #######.## #### ING X1=418:X2=1:X3=0:X4=1:GOSUB 345: \ REMARK ENTER WHETHER TO DELETE CLOSED ITEMS R=X0 X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665 REMARK VERIFY ENTRY IF X0=0 THEN 6020 X1=192:GOSUB 210 PRINT "PROCESSING..."; RESTORE FOR I%=1 TO R3INVOICES" MASKD$="######" MASKE$="#####.#" OPEN "G/I0F010.DAT" AS 1,"A/R0F110.DAT" RECL 162 AS 2, \ "A/R0F120.DAT" RECL 226 AS 3, "A/R0F130.DAT" AS 4, \ "CRT" RECL 1100 AS 19 Y9=1:GOSUB 700 REMARK RETRIEVE G/I FILE DATA FILE.NO=4:GOSUB  READ X4$ NEXT I% LPRINTER LINE.COUNT%=60 IF S=3 THEN \ REMARK FOR REPORT TYPE CUSTOMER RANGE, LOCATE FIRST INVOICE Y2=3: \ RECORD.COUNT=AR.INVFILE.EXTENT: \ XYZ$=W8$+" ":\ K$=LEFT$(XYZ$,6)+"000000":\ GOSUB 1060: \ 3.14 REMARK RETRIEVE A/R FILE EXTENTS IF END #3 THEN 6475 REMARK IF NO INVOICES ON FILE, END PROGRAM 6020 X0=16:GOSUB 260 REMARK DISPLAY CRT MASK CONSOLE R=0:S=0:PAGE.COUNT%=0 FOR I%=1 TO 9:C(I%)=0:NEXT I% REMARK ZERO TOTALS START.RECORD.NO=L \ ELSE \ START.RECORD.NO=1 IF START.RECORD.NO > AR.INVFILE.EXTENT THEN \ X2$="FIRST CUSTOMER NUMBER TOO HIGH": \ GOSUB 615: \ GOTO 6020 FOR RECORD.INDEX=START.RECORD.NO TO AR.INVFILE.EXTENT REMARK START PRINT LOOP %   FILE.NO=3:REC.NO%=RECORD.INDEX:GOSUB 3400 REMARK READ NEXT INVOICE OFF OF FILE IF S=3 AND W1$>W0$ THEN 6430 REMARK FOR CUSTOMER RANGE, BRANCH IF PAST LAST CUSTOMER GOSUB 4620 REMARK REVERSE SIGNS, IF CREDIT MEMO IF R3=3 THEN 6380 REEM TO TOTALS A(2)=D(2) A(3)=D(3) A(4)=D(4) A(5)=D(6) A(6)=D(8) A(7)=D(10) FOR I%=1 TO 7 B.(I%)=B.(I%)+A(I%) NEXT I% GOTO 6330 6320 A(2)=0:A(3)=0:A(4)=0:A(5)=0:A(6)=0:A(7)=0 REMARK ASSIGN VALUES TO PRINT FOR AGING ANALYSIS A(1)=D(7)MARK BRANCH FOR CLOSED ITEMS LISTINGS IF R3=4 THEN 6400 REMARK BRANCH FOR UNBILLED REPORT REMARK OPEN ITEMS AND AGING ANALYSIS ROUTINES IF D(7)+D(11)=0 THEN 6430 REMARK SKIP CLOSED ITEMS IF PAGE.COUNT%=0 THEN W6$=W1$ IF W6$<>W1+D(11) B.(1)=B.(1)+A(1) IF D(7)=0 THEN 6326 REMARK UNLESS INVOICE BALANCE IS ZERO, AGE INVOICE I2=G3(1):J2=L4(1):GOSUB 4080 IF A.<1 THEN A.=1 6322 I=INT(A./30)+2 IF I>5 THEN I=5 A(I)=D(7) B.(I)=B.(I)+D(7) 6326 IF D(11)=0 THEN 6330 $ THEN GOSUB 4220:GOSUB 4500:W6$=W1$ REMARK WHEN CUSTOMERS CHANGE, PRINT LAST CUSTOMER TOTALS,\ AND NEW CUSTOMER DATA IF L4(1)=0 THEN D(1)=0:D(2)=0:D(3)=0:D(4)=0 REMARK IF BILL DATE IS ZERO, FORCE INVOICE AMOUNT TO ZERO IF L4(2)<>0 THEN  REMARK UNLESS PROGRESS BALANCE IS ZERO, AGE IT I2=G3(1):J2=L4(2):GOSUB 4080 IF A.<10 THEN I=6 \ ELSE I=7 A(I)=D(11) B.(I)=B.(I)+D(11) 6330 B.(8)=B.(8)+D(7)+D(11) B.(9)=B.(9)+1 A1=115:GOSUB 825 REMARK START PRINT ROUTINE IF LINE.COU6300 D(8)=0 REMARK IF PROGRESS DUE DATE IS ZERO,\ FORCE PROGRESS BILLING AMT TO ZERO IF L4(1)=0 THEN 6430 REMARK IF BOTH ARE ZERO, SKIP THIS INVOICE GOTO 6300 6280 IF W6$=W1$ THEN 6300 REMARK CLOSED ITEM AND UNBILLED REPONT% < 7 THEN GOSUB 4500 REMARK PRINT CURRENT CUSTOMER AT THE TOP OF A NEW PAGE IF S=2 THEN 6430 REMARK EXCEPT FOR SUMMARY ONLY REPORT, PRINT INVOICE DETAILS PRINT USING MASKD$;L1; PRINT B;L1$; PRINT TAB(22); PRINT USING MASKD$;L2; PRINTRT FORMATS W6$=W1$ IF PAGE.COUNT%<>0 THEN GOSUB 4500 REMARK PRINT NEW CUSTOMER DATA WHEN CUSTOMERS CHANGE 6300 IF R3=2 THEN 6320 REMARK FOR ALL FORMATS EXCEPT AGING ANALYSIS... A(1)=D(1) REMARK ASSIGN VALUES TO PRINT, AND ACCUMULATE TH " ";L2$; IF L4(1)<>0 THEN PRINT TAB(36);:X0=L4(1):GOSUB 680.5 PRINT TAB(44); PRINT USING MASKA$;A(1),A(2),A(3),A(4),A(5); IF B=2 OR D(12)<>0 THEN PRINT "C"; PRINT TAB(100); PRINT USING MASKA$;A(6),A(7); IF L4(2)<>0 THEN PRINT TAB(123);:X0=L4&  (2):GOSUB 680.5 PRINT LINE.COUNT%=LINE.COUNT%+1 IF D(13)<>0 THEN \ PRINT TAB(10);"G/L #";: \ PRINT USING MASKE$;D(13): \ LINE.COUNT%=LINE.COUNT%+1 IF R=1 THEN GOTO 6420\ REMARK IF DELETE OPTION SELECTED, BRANCH ELSE GOTO 6430 OSUB 4220 REMARK PRINT GRAND TOTALS GOTO 6020 6475 X2$="ZERO INVOICES ON FILE":GOSUB 615 6480 PRINT CLEAR.SCREEN$;"A/R LEDGER LOADING MENU" REMARK END PROGRAM AND RELOAD MENU CHAIN"A/P000"  REMARK CLOSED ITEM LISTING CHOSEN 6380 IF C2=5 THEN 6280 REMARK UNLESS DELETE FLAGGED... IF L4(1)=0 THEN 6430 REMARK SKIP UNBILLED ITEMS IF D(7)+D(11)=0 THEN GOTO 6280 \ REMARK AND OPEN ITEMS ELSE GOTO 6430 REMARKå UNBILLED ITEM LISTING CHOSEN 6400 IF L4(1)=0 THEN 6280 REMARK SKIP INVOICES WITH NON-ZERO BILL DATES IF L4(2)=0 THEN 6430 IF D(8)=0 THEN 6280 REMARK UNLESS THEY HAVE A POSTIVE PROGRESS BALANCE DUE GOTO 6430 REMARK DELETE CLOåSED ITEMS 6420 B=-1 FILE.NO=3:REC.NO%=RECORD.INDEX:GOSUB 3450 6430 NEXT RECORD.INDEX REMARK END OF MAIN PRINT LOOP IF R3>2 THEN \ REMARK ZERO TOTALS ON CLOSED ITEM AND UNBILLED FORMATS FOR I%=1 TO 9: \ B.(I%)=0: \ NEXT I%: \ å GOTO 6020 REMARK AND DO NOT PRINT GRAND TOTALS GOSUB 4220 REMARK PRINT LAST CUSTOMER TOTALS ON\ OPEN ITEM AND AGING ANALYSIS FORMATS FOR I%=1TO 9 B.(I%)=C(I%) NEXT I% PRINT " GRAND" IF R3=2 THEN PRINT " TOTAL"; Gå'   DISK.DOC -FOG/HAK.002 First Osborne Group (FOG) Hackers Disk Files on this disk and continuing on -FOG/HAK.001 and .003 are from the Osborne/McGraw-Hill accounts receivable/payable system previoåusly found on -FOG.008, .010, .012, and .013 and also available on -SIGM.01A. Refer to ABSTRACT.043 and CATALOG.043 for further information. Jim Woolley FOG Disk Librarian October, 1982 ååååååå