REMARK #################################################### REMARK # ACCOUNTS PAYABLE LEDGER PROGRAM # REMARK # (A/P070) VERS OF 10.00 AM 6/20/79 # REMARK #################################################### %INCLUDE CURSOR A4$="----" FOR I%=1 TO 4:A4$=A4$+A4$:NEXT I% DEF FNA(Z)=100*((Z/100)-INT(Z/100)) REMARK ZERO OUT TENS AND ONES DIGITS MASKA$=" ######" MASKB$="#####.#" MASKC$=" #######.##" MASKD$=" #######.##" MASKE$="###" DIM W(4),W1.(4),A1(5),W2.(4),A2(6),M$(5),Y(2),C(27),D(27),G3(5),\ G2$(5),P(5) GOTO 6000 DATA 0,3,3,6,8,1,13,16,19,21,24,26 %INCLUDE SUBS1 %INCLUDE BINSEARC %INCLUDE GENINFO %INCLUDE READVEND %INCLUDE READINV %INCLUDE WRITEINV %INCLUDE A/P-INFO 825 IF LINE.COUNT%<55 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 TOTAL.FLAG%<>2 THEN \ PRINT " VENDOR INV # DESCR. BUY INV DATE PAY DATE";: \ PRINT" CK REG (G/L #)"; PRINT TAB(69);"AMOUNT DISCOUNT";TAB(92);"OTHER NET DUE "; GOSUB 5660 REMARK PRINT AGING HEADINGS PRINT LINE.COUNT%=6 RETURN 5020 PRINT A6$;TAB(8);L5$;TAB(21); REMARK PRINT ONE TOTAL LINE PRINT USING MASKA$;I3 RETURN 5040 YEAR = FNA(I) 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 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 5140 X4$=L4$:A1=115:GOSUB 825 REMARK PRINT ONE DETAIL LINE IF W9>1 AND LINE.COUNT%<7 THEN \ PRINT M$(2);" - CONTINUED": \ LINE.COUNT%=LINE.COUNT%+1 PRINT TAB(3);W1$;TAB(9); PRINT USING MASKA$;W0; PRINT TAB(17);W2$;TAB(27);W3$;TAB(31); X0=D(23):GOSUB 680.5 PRINT " "; X0=D(24):GOSUB 680.5 D1=C(2)+C(3)+C(4)+C(5)+C(6)+C(7)+C(8)+C(9)+C(10)+C(11) PRINT USING MASKA$;D(25); IF D1=0 THEN PRINT " ";:PRINT USING MASKB$;D(1); PRINT TAB(64); PRINT USING MASKD$;C(23);C(24);C(25);C0; LINE.COUNT%=LINE.COUNT%+1 IF C3<>0 THEN PRINT TAB(C3);"X"; REMARK AGING PRINT TAB(126); IF W1%=1 THEN X0$="INV" IF W1%=4 THEN X0$="CR" IF W1%=5 THEN X0$="DB" PRINT X0$ RETURN 5400 X4$=L4$:A1=115:GOSUB 825 REMARK LOCATE, RETRIEVE AND PRINT VENDOR DATA Y2=2 RECORD.COUNT = AP.VENDFILE.EXTENT XYZ$=W1$+" " K$=LEFT$(XYZ$,6) GOSUB 1060 IF H=-1 OR VAR1=0 THEN \ M$(2)="NO VENDOR INFORMATION": \ Y(1)=0:Y(2)=0 \ ELSE \ Y9=2:X0=L:GOSUB 3200 PRINT M$(2);TAB(40);"(YEAR TO DATE"; PRINT USING MASKC$;Y(2); PRINT ") (LAST YEAR"; PRINT USING MASKC$;Y(1); PRINT ")" LINE.COUNT%=LINE.COUNT%+1 RETURN 5460 IF W9=0 THEN RETURN REMARK PRINT AND ZERO OVERALL REPORT TOTALS IF W9>1 OR S=1 THEN \ PRINT " TOTAL";TAB(25);: \ PRINT USING MASKE$;W9;: \ PRINT " INVOICES";: \ PRINT TAB(64);: \ PRINT USING MASKD$;W(1);W(2);W(3);W(4): \ PRINT: \ LINE.COUNT%=LINE.COUNT%+2 W9=0:W(1)=0:W(2)=0:W(3)=0:W(4)=0 RETURN 5540 IF D1=0 THEN RETURN REMARK PRINT MULTIPLE GENERAL LEDGER NUMBERS PRINT TAB(7);"G/L"; FOR I1%=1 TO 11 IF C(I1%)<>0 THEN PRINT " ";:PRINT USING MASKB$;D(I1%); NEXT I1% PRINT PRINT TAB(7);"AMT"; FOR I1%=1 TO 11 IF C(I1%)<>0 THEN PRINT USING MASKD$;C(I1%); NEXT I1% PRINT LINE.COUNT%=LINE.COUNT%+2 RETURN 5620 IF A9=0 THEN RETURN REMARK PRINT AND ZERO ACCOUNT TOTALS PRINT "--ACCOUNT TOTALS---";LEFT$(A4$,44); PRINT USING MASKD$;W2.(1);W2.(2);W2.(3);W2.(4); PRINT LEFT$(A4$,23) PRINT A9=0:W2.(1)=0:W2.(2)=0:W2.(3)=0:W2.(4)=0 LINE.COUNT%=LINE.COUNT%+2 RETURN 5660 PRINT USING MASKE$;P(1);P(2);P(3);P(4); REMARK PRINT COLUMN HEADINGS FOR AGING PRINT" >" RETURN 6000 OPEN "G/I0F010.DAT" AS 1, "A/P0F110.DAT" RECL 162 AS 2, \ REMARK MAIN PROGRAM STARTS HERE "A/P0F120.DAT" RECL 580 AS 3, "A/P0F130.DAT" AS 4, \ "CRT" RECL 1100 AS 19 Y9=1:GOSUB 700 REMARK RETREIVE G/I FILE DATA I=G3(1):GOSUB 5040 REMARK COMPUTE # OF DAYS BETWEEN TODAY & 00/00/00 D3=A4 X0=4:GOSUB 3310 REMARK RETREIVE A/P GENERAL INFORMATION 6040 FOR I%=1 TO 4 REMARK CLEAR TOTAL AND INVOICE FILE VARIABLES A1(I%)=0:A2(I%)=0:W(I%)=0:W1.(I%)=0:W2.(I%)=0 NEXT I% DELETE.COUNT%=0:INVOICE.RECORD.NO=0:TOTAL.FLAG%=0 A1(5)=0:A2(5)=0:A2(6)=0 L5$=" INVOICES" L4$="A/P LEDGER OPEN ITEM LISTING" CONSOLE X0=7:GOSUB 260 W8=0:W9=0:R1=0:R=0:S=0:PAGE.COUNT%=0:OPEN.COUNT%=0:CLOSED.COUNT%=0 LINE.COUNT%=62 X1=270:X2=1:X3=0:X4=2:GOSUB 345 REMARK ENTER REPORT FORMAT ON X0+1 GOTO 6060,6120,6080 6060 CONSOLE REMARK END PROGRAM ROUTINE PRINT CLEAR.SCREEN$;"A/P LEDGER LOADING MENU" CHAIN "A/P000" 6080 R=1 REMARK CLOSED ITEM LISTING CHOSEN L4$="A/P LEDGER CLOSED ITEM LISTING" X1=355:X2=1:X3=0:X4=1:GOSUB 345 REMARK ENTER WHETHER TO DELETE CLOSED ITEMS R1=X0 6120 X1=398:X2=1:X3=1:X4=3:GOSUB 345 REMARK ENTER REPORT TYPE ON X0 GOTO 6180,6160,6140 6140 S=3 REMARK ONE-VENDOR-ONLY TYPE CHOSEN X1=410:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER VENDOR NUMBER XYZ$=X0$+" " W7$=LEFT$(XYZ$,6) GOTO 6180 6160 S=1 6180 X1=534:GOSUB 673 REMARK ENTER START DATE I=X0:GOSUB 5040 REMARK FIND # OF DAYS BETWEEN START DATE AND 00/00/00 B0=X0 B=A4 X1=598:GOSUB 673 REMARK ENTER END DATE I=X0:GOSUB 5040 REMARK FIND # OF DAYS BETWEEN END DATE AND 00/00/00 E0=X0 E=A4 X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665 IF X0=0 THEN 6040 LPRINTER IF S=3 THEN \ REMARK IF TYPE IS ONE-VENDOR-ONLY FIND THAT VENDOR Y2=3: \ RECORD.COUNT=AP.INVOICE.EXTENT: \ K$=W7$+"000000":\ GOSUB 1060: \ INVOICE.RECORD.NO=L-1 \ ELSE\ INVOICE.RECORD.NO=0 IF INVOICE.RECORD.NO<0 OR INVOICE.RECORD.NO>AP.INVOICE.EXTENT-1 THEN\ X2$="VENDOR NUMBER OUT OF RANGE": \ GOSUB 615: \ GOTO 6040 6260 INVOICE.RECORD.NO = INVOICE.RECORD.NO + 1 IF INVOICE.RECORD.NO > AP.INVOICE.EXTENT THEN 6680 FILE.NO=3:X0%=INVOICE.RECORD.NO:GOSUB 3000 REMARK GET INVOICE RECORD IF S=3 AND W1$<>W7$ THEN 6680 REMARK IF TYPE IS ONE-VENDOR, BRANCH WHEN PAST THAT VENDOR IF W2%=2 THEN DELETE.COUNT% = DELETE.COUNT% + 1: GOTO 6300 IF D(25)<>0 THEN CLOSED.COUNT%=CLOSED.COUNT%+1:GOTO 6300 IF W1%<>4 THEN OPEN.COUNT%=OPEN.COUNT%+1:GOTO 6300 IF C(23)+C(24)=0 THEN CLOSED.COUNT%=CLOSED.COUNT%+1\ ELSE OPEN.COUNT%=OPEN.COUNT%+1 6300 I=D(24):GOSUB 5040 IF A4E THEN 6260 REMARK CHECK INVOICE DATE AGAINST START & END DATES IF W2%>9 THEN W2%=W2%-10 REMARK STRIP OFF TENS DIGIT, IF ANY, FROM OPERATION CODE IF R=1 THEN 6400 REMARK IF CLOSED ITEM LISTING, BRANCH REMARK OPEN ITEM LISTING ROUTINES IF W2%=2 THEN \ REMARK SKIP DELETE-FLAGGED INVOICES ON OPEN ITEM LISTING GOTO 6260 IF W6$=W1$ THEN 6480 IF PAGE.COUNT%=0 THEN 6380 GOSUB 5460 IF LEFT$(W1$,2)<>LEFT$(W6$,2) THEN GOSUB 5620 6380 W6$=W1$ REMARK SET CURRENT VENDOR S3=1 GOTO 6480 REMARK CLOSED ITEM LISTING ROUTINES 6400 IF W2%=2 THEN \ REMARK ZERO INVOICE AMOUNTS ON DELETE-FLAGGED INVOICES C(23)=0:C(24)=0:C(25)=0:C(26)=0:GOTO 6540 IF D(25)=0 THEN 6260 REMARK SKIP OPEN ITEMS IF W1%<>4 THEN 6540 REMARK IF NOT A CREDIT MEMO, BRANCH C1=C(25) C2=D(25) IF C(23)+C(24)<=0 THEN W2%=2:GOTO 6460 IF C(25)=0 THEN 6260 D(25)=0:C(25)=0:W2%=0 GOSUB 3050 REMARK RESAVE CREDIT MEMO 6460 C(23)=-C1 D(25)=C2 GOTO 6500 REMARK RESUME OPEN ITEM LISTING ROUTINES 6480 IF W1%<>4 THEN 6520 REMARK IF NOT A CREDIT MEMO, BRANCH IF C(23)+C(24)=0 THEN 6260 REMARK SKIP TOTALLY USED CREDIT MEMOS C(23)=-C(23)-C(24) D(25)=0 6500 C(24)=0:C(25)=0:C(26)=0 GOTO 6540 6520 IF D(25)<>0 THEN 6260 REMARK SKIP CLOSED ITEMS 6540 C(25)=C(25)+C(26) REMARK ACCUMULATE TOTALS FOR I%=1 TO 3 W(I%)=W(I%)+C(22+I%) W1.(I%)=W1.(I%)+C(22+I%) W2.(I%)=W2.(I%)+C(22+I%) NEXT I% W8=W8+1 IF S<>3 THEN A9=1 IF R=0 THEN W9=W9+1 C0=C(23)+C(24)+C(25) W(4)=W(4)+C0 W1.(4)=W1.(4)+C0 W2.(4)=W2.(4)+C0 C3=0 IF R=1 THEN 6640 REMARK IF CLOSED ITEM LISTING, SKIP AGING A=D3-A4 REMARK AGE OPEN ITEMS I%=1 6580 IF A < P(I%) THEN 6600 I%=I%+1 IF I% < 5 THEN 6580 6600 A1(I%) = A1(I%)+C0 C3 = I%*3 + 108 IF W1%<>4 THEN A2(I%)=A2(I%)+C(24) IF S3=1 THEN GOSUB 5400:S3=0 6640 IF S=1 THEN 6260 REMARK IF REPORT TYPE IS SUMMARY, GET NEXT INVOICE GOSUB 5140 GOSUB 5540 IF R1=0 THEN 6260 REMARK IF NOT DELETING CLOSED ITEMS, GET NEXT INVOICE IF W2%=2 OR W1%<>4 THEN\ W1%=-1:\ FILE.NO=3:X0%=INVOICE.RECORD.NO:GOSUB 3050 GOTO 6260 6680 IF R=0 THEN GOSUB 5460:GOSUB 5620 REMARK - * * * TOTALS SECTION * * * - TOTAL.FLAG%=2 LINE.COUNT%=66 X4$=L4$:A1=115:GOSUB 825 PRINT:PRINT TAB(30);"TOTALS"; PRINT TAB(45); PRINT USING MASKA$;W8; PRINT " INVOICES";TAB(64); FOR I%=1 TO 4 PRINT USING MASKD$;W1.(I%); NEXT I% PRINT:PRINT:PRINT:PRINT IF R=1 THEN 6780 REMARK SKIP AGING SUMMARY FOR CLOSED ITEMS PRINT TAB(44);"AGING";TAB(71);"AMOUNT DISCOUNT" REMARK AGING SUMMARY PRINT FOR I%=1 TO 5 PRINT TAB(40); IF I<5 THEN \ PRINT "UNDER";: \ PRINT USING MASKE$;P(I%); \ ELSE \ PRINT "OVER ";: \ PRINT USING MASKE$;P(I%-1); PRINT " DAYS"; PRINT TAB(65); PRINT USING MASKC$;A1(I%);A2(I%) PRINT NEXT I% PRINT:PRINT:PRINT TAB(53);"TOTAL"; PRINT TAB(65); FOR I%=2 TO 5 A1(1)=A1(1)+A1(I%) A2(1)=A2(1)+A2(I%) NEXT I% PRINT USING MASKC$;A1(1);A2(1) 6780 PRINT:PRINT PRINT "THIS REPORT INCLUDES INVOICES"; IF S=3 THEN PRINT" FOR VENDOR # ";W7$; PRINT" FROM "; X0=B0:GOSUB 680.5 PRINT " TO "; X0=E0:GOSUB 680.5 PRINT:PRINT A6$="OPEN":I3=OPEN.COUNT%:GOSUB 5020 A6$="CLOSED":I3=CLOSED.COUNT%:GOSUB 5020 A6$="DELETED":I3=DELETE.COUNT%:GOSUB 5020 IF S=3 THEN I3=OPEN.COUNT%+CLOSED.COUNT%+DELETE.COUNT%\ ELSE I3=AP.INVOICE.EXTENT A6$="TOTAL":GOSUB 5020 GOTO 6040