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$(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 READCUST %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 PRINT 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);"TOTAL 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 PAY";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*DAY+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:GOSUB 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 IS 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 NEXT 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) GOSUB 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);: \ 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 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$=" SALES YTD #######.## LAST YEAR #######.##" MASKC$=" BAL #######.## #### INVOICES" 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 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 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=6: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 LISTING 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 R3 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: \ 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 REMARK 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$ 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 6300 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 REPORT 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 THEM 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)+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 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.COUNT% < 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; PRINT " ";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 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 CLOSED 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"; GOSUB 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"