REMARK +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REMARK + GENERAL LEDGER REPORTS PROGRAM (GL040) + REMARK + VERS. OF 5.00 PM 2/23/79 + REMARK +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DIM G2$(5),G3(5),D(7),G(3,10),S.(7),H.(2,3),H1(3) DATA "TRIAL","SPECIAL","MONTHLY","QUARTERLY"," REPORT" DATA " INCOME STATEMENT"," BALANCE SHEET" DEF FNZ(Z9)=Z9+(1-ABS(SGN(Z9))) * 1E20 %INCLUDE CURSOR GOTO 6000 %INCLUDE SUBS1 %INCLUDE BINSERCH %INCLUDE GENINFO %INCLUDE ACCTFILE %INCLUDE G/L-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 R1<>0 THEN PRINT TAB(45);"PREVIOUS QUARTER ";R1 PRINT:PRINT" ACCOUNT NAME"; ON R GOTO 833,834,835,836 833 IF S=2 THEN 834 REMARK TRIAL REPORT HEADINGS PRINT TAB(59);"THIS MONTH PCT"; IF G7>3 THEN PRINT TAB(105);"QUARTER PCT" GOTO 840 834 PRINT TAB(58);"THIS MONTH" REMARK SPECIAL REPORT HEADINGS GOTO 840 835 IF S=2 THEN 834 REMARK MONTHLY REPORT HEADINGS PRINT TAB(59);"THIS MONTH PCT"; IF G7<2 THEN 840 GOTO 837 836 IF S=2 THEN PRINT TAB(75);"QUARTER";:GOTO 840 REMARK QUARTERLY REPORT HEADINGS PRINT TAB(61);"QUARTER PCT"; IF R1<=0 AND G7<4 THEN 840 837 PRINT TAB(105);"YTD BAL PCT" 840 PRINT:PRINT:PRINT LINE.COUNT%=6 D9$="$" RETURN 4000 PRINT TAB(8);X0$;TAB(56); REMARK PRINT RECAP LINE IF R=4 THEN 4005 PRINT USING MASKB$;X0; REMARK INCLUDE MONTHLY TOTAL IF S<>1 THEN PRINT:RETURN PRINT TAB(99); IF R=3 THEN 4015 4005 PRINT USING MASKB$;X2; REMARK INCLUDE QUARTERLY TOTAL IF R<>4 OR S<>1 THEN PRINT:RETURN 4015 PRINT TAB(99); REMARK INCLUDE YEARLY TOTAL PRINT USING MASKB$;X1 RETURN REMARK ACCUMULATE AND PRINT SUBROUTINE 4020 IF L3%=0 THEN\ REMARK ACCUMULATE REGULAR ACCOUNT TO ALL TOTAL LEVELS FOR I%=1 TO 10:\ G(F1,I%)=G(F1,I%)+S2*D(F1):\ NEXT I%\ ELSE D9$="$" REMARK PRECEDE TOTAL AMOUNTS WITH A DOLLAR SIGN PRINT TAB(55+(F-1)*(14+8*(2-S))); REMARK PRINT AMOUNT (WITH % OF SALES ON INCOME STATEMENT) PRINT D9$; PRINT USING MASKB$;G(F1,L6%); IF S<>2 THEN PRINT USING MASKA$;ABS(G(F1,L6%)/H1(F1))*100; FOR I%=1 TO L6% REMARK CLEAR ALL TOTALS UP TO THE LEVEL JUST PRINTED G(F1,I%)=0 NEXT I% IF L5%=1 THEN H.(1,F1)=H.(1,F1)+D(F1)\ REMARK ACCUMULATE DEBIT TOTAL ELSE H.(2,F1)=H.(2,F1)+D(F1) REMARK ACCUMULATE CREDIT TOTAL RETURN 4140 F=INT((L6%+3)/3) REMARK DETERMINE PRINT COLUMN BY TOTAL LEVEL IF F>3 THEN F=3 RETURN 5000 IF L2%<>0 THEN RETURN REMARK MOVE TOTALS (REGULAR ACCOUNTS ONLY) ON S GOTO 5060,5040,5020 5020 D(7)=D(2) REMARK YEARLY TOTAL IF L4%=1 THEN D(2)=0 REMARK ZERO THIS YEAR TOTAL FIELD ON I & E ACCOUNTS 5040 D(6)=D(5) REMARK QUARTERLY TOTAL D(5)=D(4) D(4)=D(3) IF L4%=1 THEN D(3)=0:D(1)=0:GOSUB 3550:RETURN REMARK ZERO THIS QUARTER FIELD ON I & E ACCOUNTS 5060 IF L4%=1 THEN D(1)=0 REMARK ZERO THIS MONTH TOTAL FIELD ON I & E ACCOUNTS GOSUB 3550 REMARK WRITE RECORD BACK TO FILE RETURN 6000 MASKA$=" ###.##%" REMARK - - - START OF MAIN PROGRAM - - - MASKB$=" #########.##" MASKC$="#####.#" OPEN "G/I0F010.DAT" AS 1,"G/L0F110.DAT" RECL 157 AS 2,\ "G/L0F130.DAT" AS 5, "CRT" RECL 1100 AS 19 FILE.NO%=1:GOSUB 700 REMARK RETRIEVE GENERAL INFORMATION G6=INT(G3(1)/10000) G7=12*((G6-G5+12)/12-INT((G6-G5+12)/12)) REMARK COMPUTE EFFECTIVE MONTH FROM END OF FISCAL YEAR FILE.NO%=5:GOSUB .314 REMARK RETRIEVE EXTENT INFORMATION RECORD.COUNT%=ACCOUNT.FILE.EXTENT% Y2=2 6020 CONSOLE X0=3:GOSUB 260 REMARK LOAD CRT MASK IF DIRECT.POSTING.EXTENT%>0 OR EXTERNAL.POSTING.EXTENT%>0 THEN\ REMARK DETERMINE IF ANY POSTINGS HAVE NOT BEEN UPDATED X1=832:GOSUB 210:\ PRINT DIRECT.POSTING.EXTENT%;"DIRECT AND";:\ PRINT EXTERNAL.POSTING.EXTENT%;"INDIRECT POSTINGS NOT UPDATED"; R=0:R1=0:S=0:PAGE.COUNT%=0 REMARK INITIALIZE REPORT PARAMETERS LINE.COUNT%=66 X1=327:X2=1:X3=0:X4=5:GOSUB 345 REMARK ENTER REPORT TYPE R=X0 IF R=0 THEN 6800 IF R=2 THEN 6100 IF R=5 THEN \ X1=375:X2=1:X3=1:X4=3:GOSUB 345:\ REMARK ENTER WHICH TOTALS TO MOVE S=X0:\ GOTO 6100\ ELSE\ X1=345:X2=1:X3=1:X4=2:GOSUB 345:\ REMARK ENTER REPORT FORMAT S=X0 IF R=4 THEN\ X1=362:X2=1:X3=0:X4=3:GOSUB 345:\ REMARK ENTER WHICH QUARTER TO REPORT R1=X0 6100 X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665 REMARK VERIFY ENTRY OF REPORT OPTIONS IF X0=0 THEN 6020 IF R<>5 THEN 6120 REMARK MOVE TOTALS ROUTINE X2=1:X3=0:X4=1:X2$="HAVE YOU RUN ALL YOUR REPORTS":GOSUB 665 IF X0=0 THEN 6020 X1=192:GOSUB 210 PRINT "WORKING...DO NOT INTERRUPT" FILE.NO%=2 FOR RECORD.NO%=1 TO ACCOUNT.FILE.EXTENT% GOSUB 3500 REMARK RETRIEVE NEXT ACCOUNT GOSUB 5000 REMARK MOVE TOTALS NEXT RECORD.NO% GOTO 6020 REMARK - - - START MAIN PRINT SEQUENCE - - - 6120 RESTORE REMARK CONSTRUCT REPORT TITLE FOR I=1.0 TO R READ X4$ NEXT I RESTORE FOR I=1.0 TO S+5 READ XX$ NEXT I X4$=X4$+XX$ X1=192:GOSUB 210 PRINT "PRINTING..." LPRINTER FOR I%=1 TO 3 REMARK ZERO TOTALS FOR J%=1 TO 10 G(I%,J%)=0 IF J%<3 THEN H.(J%,I%)=0 NEXT J%,I% FILE.NO%=2:RECORD.NO%=ACCOUNT.FILE.EXTENT%:GOSUB 3500 REMARK RETRIEVE SALES ACCOUNTS TOTAL H1(1)=FNZ(D(1)) H1(3)=FNZ(D(3+R1)) IF INT((G7+2)/3)>R1 THEN H1(2)=FNZ(D(2))\ ELSE H1(2)=FNZ(D(7)) IF S=1 THEN\ K1=30000:\ REMARK POSITION FILE TO FIRST BALANCE SHEET ACCOUNT GOSUB 10.60:\ RECORD.NO%=L-1\ ELSE RECORD.NO%=0 REMARK POSITION FILE TO FIRST ACCOUNT 6220 RECORD.NO%=RECORD.NO%+1 REMARK LOCATE NEXT ACCOUNT RECORD IF RECORD.NO%=ACCOUNT.FILE.EXTENT% THEN 6660 REMARK CHECK FOR END OF REPORT GOSUB 3500 REMARK RETRIEVE NEXT ACCOUNT IF R<>2 AND L4%<>S THEN 6660 L6%=L6%+1 IF L5%=S1 THEN S2=1\ REMARK COMPUTE NORMAL SIGN OF ACCOUNT BALANCE ELSE S2=-1 IF R1=0 THEN 6320 D(3)=D(3+R1) REMARK USE REQUESTED QUARTERLY TOTALS D(1)=0 IF INT((G7+2)/3)<=R1 THEN D(2)=D(7) 6320 IF R<>2 THEN 6340 REMARK INCLUDE ONLY REGULAR ACCOUNTS ON SPECIAL REPORT IF L2%<>0 OR L9%=0 THEN 6220 6340 A1=110:GOSUB 825 IF L3%=0 THEN PRINT USING MASKC$;L1; REMARK PRINT REGULAR ACCOUNT'S NUMBER IF L3%=1 THEN\ REMARK PRINT TITLE IN "EXPANDED PRINT" S1=L5%:\ PRINT TAB(17-L6);:\ FOR I%=1 TO LEN(L1$):\ PRINT MID$(L1$,I%,1);" ";:\ NEXT I%:\ GOTO 6420 PRINT TAB(17-L6%);L1$;TAB(48); REMARK PRINT ACCOUNT NAME IF L3%=3 THEN 6420 ON R GOSUB 6460,6560,6580,6620 D9$=" " 6420 IF L7%=9 THEN LINE.COUNT%=60\ REMARK ADVANCE TO NEXT PAGE ELSE\ FOR I%=1 TO L7%+1:\ REMARK PRINT EXTRA BLANK LINES PRINT:\ NEXT I%:\ LINE.COUNT%=LINE.COUNT%+L7%+1 GOTO 6220 6460 IF S=2 THEN\ REMARK MONTHLY TRIAL BALANCE GOSUB 4140:\ F1=1:GOSUB 4020:\ GOTO 6540 F=1:F1=1:GOSUB 4020 REMARK TRIAL INCOME STATEMENT IF G7>3 THEN F=3:F1=3:GOSUB 4020 6540 IF L8%=0 THEN RETURN FOR I%=1 TO 7 REMARK ACCUMULATE NEW SALES TOTALS S.(I%)=S.(I%)+D(I%)*S2 NEXT I% RETURN 6560 PRINT TAB(55); REMARK SPECIAL REPORT: PRINT MONTHLY TOTALS PRINT USING MASKB$;D(1); RETURN 6580 IF S=2 THEN \ REMARK MONTHLY BALANCE SHEET GOSUB 4140:\ F1=1:GOSUB 4020:\ RETURN F=1:F1=1:GOSUB 4020 REMARK MONTHLY INCOME STATEMENT IF G7>1 THEN F=3:F1=2:GOSUB 4020 RETURN 6620 IF S=2 THEN \ GOSUB 4140:\ REMARK QUARTERLY BALANCE SHEET F1=3:GOSUB 4020:\ RETURN F=1:F1=3:GOSUB 4020 REMARK QUARTERLY INCOME STATEMENT IF R1>0 OR G7>3 THEN F=3:F1=2:GOSUB 4020 RETURN REMARK - - - END OF REPORT - - - 6660 IF R=2 THEN 6020 REMARK NO RECAP ON SPECIAL REPORT LINE.COUNT%=LINE.COUNT%+7-2*S A1=110:GOSUB 825 IF S=2 THEN C1$="PROOF":GOTO 6720\ ELSE C1$="RETAINED EARNINGS" IF R<>1 THEN 6720 FILE.NO%=2:RECORD.NO%=ACCOUNT.FILE.EXTENT%:GOSUB 3500 FOR I%=1 TO 7 D(I%)=S.(I%) NEXT I% GOSUB 3550 REMARK SAVE UPDATED SPECIAL SALES TOTAL RECORD IF INT((G7+2)/3)>R1 THEN X1=S.(2)\ ELSE X1=S.(7) X0$="SALES ACCOUNTS TOTAL":X0=S.(1):X2=S.(3+R1):GOSUB 4000 6720 PRINT REMARK PRINT TOTALS X0$="DEBIT TOTAL":X0=H.(1,1):X1=H.(1,2):X2=H.(1,3):GOSUB 4000 X0$="CREDIT TOTAL":X0=H.(2,1):X1=H.(2,2):X2=H.(2,3):GOSUB 4000 PRINT X0$=C1$:X0=H.(2,1)-H.(1,1):X1=H.(2,2)-H.(1,2):X2=H.(2,3)-H.(1,3) GOSUB 4000 GOTO 6020 6800 CONSOLE PRINT CLEAR.SCREEN$;"G/L REPORTS LOADING MENU" REMARK - - - END PROGRAM - - - CHAIN "G/L000"