rem This is the Income Statement Printer %INCLUDE ALL.BAS dim n(2,12),k$(2,10),h(9),s(9),t(4,9) RESTORE A(9)=0 1009 PRINT clear$:PRINT PRINT "DO YOU WANT AN ORDINARY OR A COMPARATIVE "; INPUT "INCOME STATEMENT (O OR C) ? ";U$ IF UCASE$(U$)="C" THEN CHAIN "GCINCOME" PRINT CLEAR$ 1010 PRINT "IS THIS INCOME STATEMENT TO BE FOR THE MONTH TO DATE," 1011 PRINT "QUARTER TO DATE, OR YEAR TO DATE (M, Q, OR Y)?" 1015 INPUT line Z$ 1017 IF ucase$(Z$)="M" THEN X=4:GOTO 1025 1020 IF ucase$(Z$)="Q" THEN X=5:GOTO 1025 1021 IF ucase$(Z$)="Y" THEN X=6:GOTO 1025 1023 GOTO 1010 1025 REM 1050 PRINT clear$:PRINT 1075 IF ucase$(U$)="C" THEN Q$="COMPARATIVE INCOME STATEMENT" 1076 IF ucase$(U$)="C" THEN GOTO 1100 1080 Q$="INCOME STATEMENT" 1100 REM GET DATES ROUTINE 3000 REM READ NAME FILE SUBROUTINE 3005 a5=t%(12) 3080 Z=24:Z9=1 3090 FOR Z0=1 TO 4 3100 K$(0,Z0)=MID$(N$,Z9,Z) 3110 Z9=Z9+Z 3120 NEXT Z0 3125 REM ROUTINE TO ELIMINATE TRAILING BLANKS l8=1 3130 FOR I=1 TO 4 l9=len(k$(0,i)) 3140 for z=l9 to l8 step -1 3150 IF MID$(K$(0,I),Z,1)<>" " THEN 3170 3160 NEXT Z 3170 Z$="" 3180 FOR Z0=1 TO Z 3190 Z$=Z$+MID$(K$(0,I),Z0,1) 3200 NEXT Z0 3210 K$(0,I)="":K$(0,I)=Z$ 3220 NEXT I 4000 REM GET TOTAL SALES AND COST OF GOODS SOLD AS P1/P3 AND P2/P4 4001 REM GET TOTAL OPERATING EXPENSES AS P7/P8 4002 P1=0:P2=0:P3=0:P4=0:P5=0:P6=0:P7=0:P8=0 4005 open "b:glh" recl 150 as 1 4010 FOR Z=1 TO 30 4015 read #1,z;n(2,1),n(2,2),h$,h(0),h(1),h(2),h(3),h(4),h(5),h(6),h(7) 4020 IF LEFT$(H$,2)="HS" THEN 4030 4025 NEXT Z 4030 close 1 4035 open "b:gl" recl 138 as 1 4040 A(9)=A(9)+1 4045 read #1,a(9);N(2,1),N(2,2),K$,N(2,4),\ N(2,5),N(2,6),N(2,7),N(2,8),N(2,9),N(2,10) 4070 IF N(2,2)=0 THEN 4100 4075 IF N(2,2)>=H(0) AND N(2,2)<=H(1) THEN P1=P1+N(2,X):P3=P3+N(2,X+3) 4080 IF N(2,2)>=A(15) AND N(2,2)<=A(16) THEN P2=P2+N(2,X):P4=P4+N(2,X+3) 4085 IF N(2,2)>A(16) THEN P7=P7+N(2,X):P8=P8+N(2,X+3) 4090 GOTO 4040 4100 IF P1<>0 THEN P1=P1*(-1) 4105 IF P1=0 THEN P1=999999999999 4110 IF P2=0 THEN P2=999999999999 4115 IF P3<>0 THEN P3=P3*(-1) 4120 IF P3=0 THEN P3=999999999999 4130 IF P4=0 THEN P4=999999999999 4140 IF P5=0 THEN P5=999999999999 4150 IF P6=0 THEN P6=999999999999 4160 IF P7=0 THEN P7=999999999999 4170 IF P8=0 THEN P8=999999999999 4990 A(9)=1 4995 close 1 6000 REM PRINT INCOME STATEMENT 6005 PRINT clear$:PRINT 6010 PRINT "PRINTING INCOME STATEMENT" 6015 FOR Z=0 TO 9 6020 H(Z)=0:S(Z)=0:T(0,Z)=0:T(1,Z)=0:T(2,Z)=0:T(3,Z)=0:A(Z)=0 6025 NEXT Z 6030 T1=0:T2=0:T3=0:T4=0 6100 lprinter:P9=0 open "b:gl" recl 138 as 1 open "b:glh" recl 150 as 2 open "b:gls" recl 150 as 3 6200 GOSUB 9600 6250 GOSUB 10000 6255 IF N(2,2)=0 THEN 6400 6300 GOSUB 11000 6350 GOSUB 15000 6355 IF LEFT$(S$,2)<>"SS" AND LEFT$(S$,2)<>"SX" THEN 6980 6400 REM DO PARTIAL TOTALS OR TOTALS AND TEST 6403 IF N(2,2)=0 THEN GOSUB 14500 6404 IF N(2,2)=0 THEN FOR Z=1 TO 51-P9:print:NEXT Z:GOSUB 9800 6405 IF N(2,2)=0 THEN 20000 6410 GOSUB 13000 IF S(1)=H(1) THEN GOSUB 12000 6415 IF S(1)=A(16) THEN GOSUB 14000 6980 IF P9>56 THEN GOSUB 9700 6985 IF S(1)< H(1) THEN 6300 6995 GOTO 6250 9600 REM PRINT PAGE HEADING SUBROUTINE 9605 P0=1 9610 print:P9=P9+1 9615 print:P9=P9+1 9616 print TAB((t%(1)-LEN(Q$))/2);Q$:P9=P9+1 9617 print:P9=P9+1 9620 FOR Z=2 TO 4 9625 print TAB((t%(1)-LEN(K$(0,Z)))/2);K$(0,Z):P9=P9+1 9630 NEXT Z 9635 print:P9=P9+1 9640 print TAB(t%(10));"FOR PERIOD ENDING ";D$(X);TAB(t%(11));"PAGE #";P0 9642 P9=P9+1 9645 print:P9=P9+1 9670 RETURN 9700 REM REPORT CONTINUED SUBROUTINE print print "report continues on next page" print 9720 print chr$(12):P9=0 9725 P0=P0+1 GOSUB 9600 9740 RETURN 9800 REM END OF REPORT ROUTINE print print "end of report" print 9840 print chr$(12) 9850 RETURN 10000 REM GET HEADING LINE AND PRINT 10005 H(9)=H(9)+1 read #2,h(9);n(2,1),n(2,2),h$,h(0),h(1),h(2),h(3),h(4),h(5),h(6),h(7) 10015 IF LEFT$(H$,2)<>"HS" AND LEFT$(H$,2)<>"HX" THEN 10995 10020 print:print:print TAB(t%(4));RIGHT$(H$,30):P9=P9+3 10995 RETURN 11000 REM GET SUBHEADING LINE AND PRINT 11005 S(9)=S(9)+1 read #3,s(9);n(2,1),n(2,2),s$,s(0),s(1),s(2),s(3),s(4),s(5),s(6),s(7) 11012 IF LEFT$(S$,2)<>"SS" AND LEFT$(S$,2)<>"SX" THEN 11995 11015 print TAB(t%(5));RIGHT$(S$,30):P9=P9+1 11995 RETURN 12000 REM PRINT FINAL TOTAL LINE 12005 IF LEFT$(H$,2)<>"HS" AND LEFT$(H$,2)<>"HX" THEN 12995 12010 print:P9=P9+1 12015 GOSUB 32000 12020 print TAB(t%(8));"TOTAL "+MID$(H$,3,20);TAB(t%(9));:print using l$;t2; 12025 print TAB(t%(9)+20);:print using p$;p5:P9=P9+1 print tab(t%(9));"-------------";tab(t%(9)+20);"-----":p9=p9+1 12030 IF ucase$(U$)<>"C" THEN 12990 12035 print TAB(t%(8));"PREVIOUS";TAB(t%(9));:print using l$;t4; 12040 print TAB(t%(9)+20);:print using p$;p6:P9=P9+1 print tab(t%(9));"-------------";tab(t%(9)+20);"-----":p9=p9+1 12990 T1=0:T2=0:T3=0:T4=0 12995 RETURN 13000 REM PRINT SUBTOTAL LINE 13005 GOSUB 31000 13010 print TAB(t%(6));"TOTAL "+MID$(S$,3,20);TAB(t%(7));:print using l$;t1; 13015 print TAB(t%(7)+20);:print using p$;p5:T1=0:P9=P9+1 13020 IF ucase$(U$)<>"C" THEN 13995 13025 print TAB(t%(6));"PREVIOUS";TAB(t%(7));:print using l$;t3; 13030 print TAB(t%(7)+20);:print using p$;p6:T3=0:P9=P9+1 13995 RETURN 14000 REM PRINT GROSS PROFIT (LOSS) LINE 14005 print:P9=P9+1 14010 GOSUB 33000 14015 IF P1-(P2)<0 THEN 14035 14020 print TAB(t%(8));"GROSS PROFIT (LOSS)";TAB(t%(9)); print using l$;p1-(p2); 14025 print TAB(t%(9)+20);:print using p$;p5:P9=P9+1 14030 GOTO 14045 14035 print TAB(t%(8));"GROSS PROFIT (LOSS)";TAB(t%(9)-1);"("; print using l$;p1-(p2);:PRINT ")"; 14040 print TAB(t%(9)+19);"(";:print using p$;p5;:PRINT ")":P9=P9+1 14045 IF ucase$(U$)<>"C" THEN 14490 14050 IF P3-(P4)<0 THEN 14135 14120 print TAB(t%(8));"PREVIOUS";TAB(t%(9));:print using l$;p3-(p4); 14125 print TAB(t%(9)+20);:print using p$;p6:P9=P9+1 14130 GOTO 14490 14135 print TAB(t%(8));"PREVIOUS";TAB(t%(9)-1);"(";:print using l$;p3-(p4); PRINT ")"; 14140 print TAB(t%(9)+19);"(";:print using p$;p6;:PRINT ")":P9=P9+1 14490 print TAB(t%(9));"=============";TAB(t%(9)+20);"=====":P9=P9+1 14495 RETURN 14500 REM PRINT NET PROFIT (LOSS) LINE 14505 print:P9=P9+1 14510 GOSUB 34000 14515 IF P1-(P2+P7)<0 THEN 14535 14520 print TAB(t%(8));"NET PROFIT (LOSS)";TAB(t%(9)); print using l$;p1-(p2+p7); 14525 print TAB(t%(9)+20);:print using p$;p5:P9=P9+1 14530 GOTO 14545 14535 print TAB(t%(8));"NET PROFIT (LOSS)";TAB(t%(9)-1); 14540 print "(";:print using l$;p1-(p2+p7); print ")";TAB(t%(9)+20);:print using p$;p5:P9=P9+1 14545 IF ucase$(U$)<>"C" THEN 14990 14550 IF P3-(P4+P8)<0 THEN 14635 14620 print TAB(t%(8));"PREVIOUS";TAB(t%(9));:print using l$;p3-(p4+p8); 14625 print TAB(t%(9)+20);:print using p$;p6:P9=P9+1 14630 GOTO 14990 14635 print TAB(t%(8));"PREVIOUS";TAB(t%(9)-1);"("; print using l$;p3-(p4+p8);:PRINT ")"; 14640 print TAB(t%(9)+19);"(";:print using p$;p6;:PRINT ")":P9=P9+1 14990 print TAB(t%(9));"*************";TAB(t%(9)+20);"*****":P9=P9+1 14995 RETURN 15000 REM GET ACCOUNTS IN SUBHEAD RANGE AND PRINT 15005 A(9)=A(9)+1 15006 IF P9>51 THEN GOSUB 9700 read #1,a(9);n(2,1),n(2,2),k$(1,3),n(2,4),n(2,5),n(2,6),\ n(2,7),n(2,8),n(2,9),n(2,10) 15105 IF N(2,2)=0 THEN 15995 if n(2,x)=0 then 15990 15110 IF LEFT$(S$,2)<>"SS" AND LEFT$(S$,2)<>"SX" THEN 15990 15112 IF LEFT$(S$,2)="SS" THEN GOSUB 16000 15115 GOSUB 30000 15200 print TAB(t%(5)+2);K$(1,3);TAB(t%(5)+34);:print using l$;n(2,x); 15202 print TAB(t%(5)+54);:print using p$;p5:P9=P9+1 15205 T1=T1+N(2,X):T2=T2+N(2,X):T3=T3+N(2,(X+3)):T4=T4+N(2,(X+3)) 15210 IF ucase$(U$)<>"C" THEN 15990 15215 print TAB(t%(5)+2);"PREVIOUS";TAB(t%(5)+34);:print using l$;n(2,(x+3)); 15220 print TAB(t%(5)+54);:print using p$;p6:P9=P9+1 15990 IF N(2,2)< S(1) THEN 15005 15995 RETURN 16000 FOR Z=4 TO 10:N(2,Z)=N(2,Z)*(-1):NEXT Z 16995 RETURN 20000 REM ROUTINE TO CLOSE FILES AND RETURN TO MASTER1 20010 CLOSE 1 20015 CLOSE 2 20040 CLOSE 3 20045 CONSOLE 20050 CHAIN "master1" 30000 REM THESE ROUTINES CALCULATE PERCENTAGES AND ROUND TO ONE 30001 REM DECIMAL PLACE FOR INDIVIDUAL ACCOUNTS 30005 P5=0:P6=0 30010 P5=((N(2,X)/P1)*1000):P6=((N(2,X+3)/P3)*1000) 30015 Z=P5-INT(P5) 30020 IF Z<.5 THEN P5=P5/10 30025 IF Z>=.5 THEN P5=(P5+1)/10 30115 Z=P6-INT(P6) 30120 IF Z<.5 THEN P6=P6/10 30125 IF Z>=.5 THEN P6=(P6+1)/10 30995 RETURN 31000 REM THESE ROUTINES CALCULATE PERCENTAGES AND ROUND TO ONE 31001 REM DECIMAL PLACE FOR SUBTOTALS 31005 P5=0:P6=0 31010 P5=((T1/P1)*1000):P6=((T3/P3)*1000) 31015 Z=P5-INT(P5) 31020 IF Z<.5 THEN P5=P5/10 31025 IF Z>=.5 THEN P5=(P5+1)/10 31115 Z=P6-INT(P6) 31120 IF Z<.5 THEN P6=P6/10 31125 IF Z>=.5 THEN P6=(P6+1)/10 31995 RETURN 32000 REM THESE ROUTINES CALCULATE PERCENTAGES AND ROUND TO ONE 32001 REM DECIMAL PLACE FOR FINAL TOTALS 32005 P5=0:P6=0 32010 P5=((T2/P1)*1000):P6=((T4/P3)*1000) 32015 Z=P5-INT(P5) 32020 IF Z<.5 THEN P5=P5/10 32025 IF Z>=.5 THEN P5=(P5+1)/10 32115 Z=P6-INT(P6) 32120 IF Z<.5 THEN P6=P6/10 32125 IF Z>=.5 THEN P6=(P6+1)/10 32995 RETURN 33000 REM THESE ROUTINES CALCULATE PERCENTAGES AND ROUND TO ONE 33001 REM DECIMAL PLACE FOR GROSS PROFIT 33005 P5=0:P6=0 33010 P5=(((P1-P2)/P1)*1000):P6=(((P3-P4)/P3)*1000) 33015 Z=P5-INT(P5) 33020 IF Z<.5 THEN P5=P5/10 33025 IF Z>=.5 THEN P5=(P5+1)/10 33115 Z=P6-INT(P6) 33120 IF Z<.5 THEN P6=P6/10 33125 IF Z>=.5 THEN P6=(P6+1)/10 33995 RETURN 34000 REM THESE ROUTINES CALCULATE PERCENTAGES AND ROUND TO ONE 34001 REM DECIMAL PLACE FOR NET PROFIT 34005 P5=0:P6=0 34010 P5=(((P1-P2-P7)/P1)*1000):P6=(((P3-P4-P8)/P3)*1000) 34015 Z=P5-INT(P5) 34020 IF Z<.5 THEN P5=P5/10 34025 IF Z>=.5 THEN P5=(P5+1)/10 34115 Z=P6-INT(P6) 34120 IF Z<.5 THEN P6=P6/10 34125 IF Z>=.5 THEN P6=(P6+1)/10 34995 RETURN