home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpmug
/
cpmug043.ark
/
A_P040.BAS
< prev
next >
Wrap
BASIC Source File
|
1984-04-29
|
11KB
|
362 lines
REMARK ****************************************\
* A/P040.BAS A/P CHECK CALCULATE *\
* 6/18/79 5:10 PM *\
****************************************
DIM G2$(5),G3(5),C(27),D(27),M$(5),A$(25),A1$(25,25),P(6),Y(2)
DATA 0,3,3,6,8,11,13,16,19,21,24,26
%INCLUDE CURSOR
DEF FNA(Z)=100 *(Z/100 - INT(Z - 100))
GOTO 6000
%INCLUDE SUBS1
%INCLUDE GENINFO
%INCLUDE BINSEARC
%INCLUDE READVEND
%INCLUDE WRITEVND
%INCLUDE READINV
%INCLUDE WRITEINV
%INCLUDE A/P-INFO
3650 RETURN REMARK THESE LINES FOR G/L SUBROUTINES
.314 RETURN
.315 RETURN
4000 REMARK ********* DATE SUBTRACTION ROUTINE *********\
(THIS ROUTINE SUBTRACTS THE DATE IN I FROM THE\
IMAGINARY DATE "00/00/00")
YEAR=100*((I/100)-INT(I/100))
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% REMARK READ DATA TABLE
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
REMARK *******************************************************
4150 REMARK ********** DAYS BETWEEN TWO DATES SUBROUTINE **********\
THIS ROUTINE CALCULATES DAYS BETWEEN DATES IN I3 AND\
J2. ANSWER (IN DAYS) IS PASSED BACK IN A.
I=I3:GOSUB 4000
A=A4
I=J2:GOSUB 4000
A=A-A4
RETURN
REMARK *****************************************************
4200 REMARK ********** INVOICE NUMBER ENTRY **********\
ENTER INVOICE NUMBERS FOR THE K1'ST CHECK.
XYZ$=X0$+" "
X0$=LEFT$(XYZ$,6)
A$(K1)=X0$ REMARK SAVE VENDOR NUMBER
FOR J%=1 TO 25
A1$(K1,J%)="" REMARK SET INVOICE NUMBERS TO NULL STRINGS
NEXT J%
IF LEN(X0$)=0 THEN GOTO 4280 REMARK IF BLANK VENDOR #, BRANCH
GOSUB 5450
X1=456:GOSUB 210
PRINT "ENTERING INVOICES TO PAY FOR VENDOR ";A$(K1);TAB(64)
4220 REMARK ********** ENTER UP TO 25 INVOICE NUMBERS & ALLOW CHANGES **********
FOR K2=1 TO 25
GOSUB 5480
IF X0=0 THEN K2=25
NEXT K2
4240 GOSUB 5500
IF X0=0 THEN 4280
K2=X0+I*5
GOSUB 5480
GOTO 4240
4280 REMARK ********** RE-DISPLAY GRID WITH ALL VENDOR #'S ENTERED SO FAR FOR CHECK CALCULATION **********
GOSUB 5450
PRINT CURSOR.HOME$:PRINT:PRINT TAB(64):PRINT TAB(64)
X1=465:GOSUB 210
PRINT "ENTERING VENDOR NUMBERS TO PAY"
PRINT
K2=0
FOR I1%=1 TO 5
PRINT LEFT$(X9$,3);
FOR I%=1 TO 5
K2=K2+1
IF LEN(A$(K2)) <> 0 THEN \
PRINT LEFT$(X9$,4);:\
PRINT USING "/2345/";A$(K2);
NEXT I%
PRINT
NEXT I1%
RETURN
5000 IF F=0 AND W5 <= 0 AND W1% = 4 THEN RETURN REMARK IF DETAIL RECORD IS A LONE CREDIT MEMO,
REMARK RETURN WITHOUT WRITING A RECORD.
IF F=0 THEN GOTO 5160 REMARK IF DETAIL PROCESSING FLAG IS SET, WRITE DETAIL CHECK RECORD.
IF W9=0\ REMARK IF NO DETAIL RECORDS WERE WRITTEN FOR THIS CHECK,
OR W5 <= 0 THEN \ REMARK OR CHECK AMOUNT IS NOT POSTIIVE,
CHECKS%=HDR%:HDR%=0:\ REMARK SKIP WRITING HEADER AND RESET LOGICAL EOF
RETURN
PRINT #4, HDR%; K1$, W7, W5, A8, W9
HDR%=0
XYZ$=W1$+" "
K$=LEFT$(XYZ$,6)
RECORD.COUNT=AP.VENDFILE.EXTENT
Y2=2
GOSUB 1060 REMARK SEARCH FOR VENDOR RECORD
IF H=-1 OR VAR1=0 THEN 5130
X0=L:Y9=2:GOSUB 3200 REMARK READ THE VENDOR RECORD
5110 Y(2)=Y(2)+W5 REMARK ADD CHECK AMOUNT TO VENDOR ACTIVITY TOTAL
L2=L2-W5 REMARK SUBTRACT CHECK AMOUNT FROM G/L CASH ACCOUNT
D=A8
GOSUB 3250 REMARK RE-WRITE THE VENDOR RECORD
5130 F=0:W5=0:W9=0
W7=W7+1
RETURN
5160 REMARK WRITE CHECK DETAIL RECORD
IF HDR%=0 THEN HDR%=CHECKS%:CHECKS%=CHECKS%+1
W9=W9+1 REMARK INCREMENT DETAIL COUNTER
PRINT #4,CHECKS%; W2$,W1%,D(23),W0,C(23),C(24),C(25),C(26)
CHECKS%=CHECKS%+1 REMARK INCREMENT TOTAL CHECK FILE RECORD COUNT.
CLOSE 4
OPEN "A/P0F030.DAT" RECL 86 AS 4
RETURN
5210 W2%=0 REMARK RESAVE INVOICE RECORD
D(24)=A8
D(25)=W7
X0=INVOICES%:GOSUB 3050
RETURN
5230 RETURN REMARK SKIP UNLESS G/L PROGRAMS IMPLEMENTED
X0=4
P1=2020
P2=1
P3=INT(D1/100)/100
P4=0
P5=L2
FILE.NO%=5:RECORD.NO%=EXTERNAL.POSTING.EXTENT%+1:GOSUB 3650
P1=2
RECORD.NO%=RECORD.NO%+1:GOSUB 3650
EXTERNAL.POSTING.EXTENT%=EXTERNAL.POSTING.EXTENT%+2
CLOSE 6
OPEN "G/L0F130.DAT" AS 6
FILE.NO%=6:GOSUB .315
RETURN
5450 REMARK RE-DISPLAY GRID CONTENTS ON CRT
X1=448:GOSUB 210
PRINT TAB(64)
PRINT
FOR I%=1 TO 5
PRINT USING "#";I%;:PRINT")";TAB(64)
NEXT I%
RETURN
5480 X1=572+14*INT((K2-1)/5)+10*K2:X2=6:X3=0:X4=999999 REMARK ENTER INVOICE NUMBER IN GRID
GOSUB 345
IF X%=3 THEN GOTO 6700 REMARK IF CTRL-C WAS DEPRESSED, EXIT PROGRAM
IF X0=0 THEN RETURN
X0$="000000"+X0$ REMARK RIGHT-ADJUST INVOICE NUMBER
A1$(K1,K2)=RIGHT$(X0$,6)
RETURN
5500 X2=1:X3=0:X4=5
X2$="ENTER ROW TO CHANGE (0 IF NONE)"
GOSUB 665
IF X0=0 THEN RETURN
I=X0-1
X2=1:X3=0:X4=5
X2$="ENTER COLUMN TO CHANGE"
GOSUB 665
IF X0=0 THEN 5500
RETURN
5600 X1=572+14*INT((K-1)/5)+10*K:X2=6:X3=0:X4=0:GOSUB 345 REMARK ENTER VENDOR NUMBER
IF X%=3 THEN GOTO 6700 REMARK EXIT PROGRAM IF CTRL-C DEPRESSED
RETURN
REMARK START OF MAIN PROGRAM
6000 MAX.CHECKS%=100 REMARK SET PROCESSING LIMIT FOR CHECKS
CTRL.C%=1
Y9=1
OPEN "G/I0F010.DAT" AS 1, "A/P0F110.DAT" RECL 162 AS 2,\
"A/P0F120.DAT" RECL 580 AS 3, "A/P0F130.DAT" AS 4,\
"CRT" RECL 1100 AS 19
GOSUB 700 REMARK GET SYSTEM GENERAL INFORMATION
X0=4:GOSUB 3310 REMARK READ A/P INFO FILE
CLOSE 1,4
FILE.NO=3 REMARK SET FILE NUMBER FOR A/P0F120.DAT
X0=6:GOSUB 260 REMARK GET CRT MASK #6
GOTO 6040
OPEN "G/L0F020.DAT" RECL 36 AS 5
OPEN "G/L0F130.DAT" AS 6 REMARK OPEN G/L INFO FILE
FILE.NO%=6:GOSUB .314
MAX.POSTINGS%=1000
IF EXTERNAL.POSTING.EXTENT% > MAX.POSTINGS%\
THEN\
X2$="G/L POSTING FILE FULL":\
GOSUB 615:\
GOTO 6700
6040 X2=5:X3=0:X4=0:X2$="'CLEAR' OR 'SAVE' LAST CHECK RUN ('END' TO EXIT)?"
GOSUB 665
IF X0$="END" THEN 6700
IF X0$="CLEAR" THEN GOTO 6059
IF X0$ <> "SAVE" THEN GOTO 6040
IF END #4 THEN 6059 REMARK SET DESTINATION FOR EOF
OPEN "A/P0F030.DAT" RECL 86 AS 4
IF END #4 THEN 6060
6045 READ #4; LINE X0$
CHECKS%=CHECKS% + 1
GOTO 6045
6059 IF CHECKS%=0 THEN CREATE "A/P0F030.DAT" RECL 86 AS 4
6060 IF CHECKS%=0 THEN CHECKS%=1
IF CHECKS% > 1 THEN CHECKS% = CHECKS% -1
6070 PRINT CURSOR.HOME$:PRINT TAB(64):PRINT TAB(64)
K=0
X1=269:GOSUB 673 REMARK ENTER CHECK DATE
A8=X0
I3=G3(1):J2=A8:GOSUB 4150
IF ABS(A) >= 7 THEN \ REMARK IF TOO FAR AHEAD OR BEHIND TODAY'S DATE
X2$="TOO FAR AHEAD/BEHIND":\ REMARK THEN REJECT CHECK DATE ENTERED.
GOSUB 615:\
GOTO 6070
6080 X1=339:X2=6:X3=0:X4=999999:GOSUB 345 REMARK ENTER NUMBER OF HANDWRITTEN CHECKS
W7=P(5)+X0 REMARK ADD THIS NUMBER TO NEXT CHECK REG #
X1=369:GOSUB 210:PRINT W7 REMARK DISPLAY NEXT CHECK REG #
K=0
6100 REMARK ********** ENTER VENDOR/INVOICE GRID **********
IF K >= 25 THEN GOTO 6140
K=K+1
GOSUB 5600 REMARK ENTER VENDOR NUMBER IN GRID
IF LEN(X0$) = 0 AND K=1 THEN \ REMARK IF FIRST GRID ENTRY IS A BLANK VENDOR,
X1=411:X2=6:X3=0:X4=0:GOSUB 345:\ REMARK PROMPT FOR VENDOR NUMBER RANGE.
A2$=X0$:\
X1=432:X2=6:X3=0:X4=0:GOSUB 345:\
X0$=X0$+" ":\
A3$=LEFT$(X0$,6):\
A$(1)="":\ REMARK RESET FIRST GRID VENDOR TO NULL VALUE
GOTO 6180
IF LEN(X0$) > 0 THEN \ REMARK IF VENDOR # WAS ENTERED, PROCESS INVOICE GRID.
K1=K:GOSUB 4200:\
GOTO 6100
6140 GOSUB 5500
IF X0 > 0 THEN \ REMARK IF VALID FIELD NUMBER ENTERED, ALLOW CHANGES TO GRID
K=X0+5*I:\
GOSUB 5600:\
K1=K:\
GOSUB 4200:\
GOTO 6140
6180 X2=1:X3=0:X4=1
X2$="ENTRY CORRECT?"
GOSUB 665
IF X0 <> 1 THEN 6060
6200 PRINT CURSOR.HOME$
PRINT
PRINT "PROCESSING . . . DO NOT INTERRUPT"
F9=1 REMARK SET FLAG FOR PROGRAM START
6220 IF LEN(A$(1)) > 0 THEN K=0:GOTO 6240 REMARK IF GRID WAS USED, BRANCH TO GET FIRST VENDOR
RECORD.COUNT=AP.INVOICE.EXTENT
Y2=3
XYZ$=A2$+" "
A2$=LEFT$(XYZ$,6)
K$=A2$+"000000"
GOSUB 1060 REMARK SEARCH INVOICE FILE FOR FIRST RECORD IN RANGE.
INVOICES%=L-1
GOTO 6320 REMARK BRANCH TO "VENDOR RANGE" ROUTINE
6240 K=K+1
IF K=26 THEN GOTO 6680
IF LEN(A$(K)) = 0 THEN GOTO 6680 REMARK IF NO MORE VENDORS IN GRID, EXIT PROGRAM
K1$=A$(K) REMARK SET CURRENT VENDOR NUMBER IN K1$
K1=0
6260 K1=K1+1
IF K1=26 THEN 6440
IF LEN(A1$(K,K1)) = 0 THEN 6440 REMARK IF NO MORE INVOICES FOR THIS VENDOR,\
REMARK THEN WRITE CHECK HEADER RECORD
6280 XYZ$=K1$+" ":ZYX$="000000"+A1$(K,K1)
K$=LEFT$(XYZ$,6)+RIGHT$(ZYX$,6)
RECORD.COUNT=AP.INVOICE.EXTENT
Y2=3
GOSUB 1060 REMARK SEARCH INVOICE FILE
IF H=-1 THEN GOTO 6260 REMARK IF INVOICE NOT FOUND, GET NEXT GRID ENTRY
X0%=L
GOTO 6340
6300 IF LEN(A$(1)) > 0 THEN 6260
IF K1$ > A3$ THEN GOTO 6680 REMARK IF CURRENT VENDOR IS PAST VENDOR RANGE,\
THEN BRANCH TO END OF PROGRAM.
6320 INVOICES%=INVOICES% + 1
IF INVOICES% > AP.INVOICE.EXTENT THEN GOTO 6680 REMARK IF END OF FILE, END PROCESSING.
X0%=INVOICES%
6340 GOSUB 3000 REMARK READ INVOICE RECORD
IF W2%-INT(W2%/10)*10 = 2 THEN 6300 REMARK IF INVOICE RECORD WAS DELETE-FLAGGED,
IF W1% <> 4 THEN 6420 REMARK OR INVOICE IS A CREDIT MEMO AND CHECK AMOUNT IS $0.00,
IF C(23)+C(24)=0 THEN 6300 REMARK THEN GET THE NEXT INVOICE RECORD.
IF W5=0 THEN 6300
6420 IF D(25) <> 0 THEN GOTO 6300
IF LEN(K1$)=0 THEN 6500
IF K1$=W1$ THEN 6520
6440 F=1
GOSUB 5000
IF CHECKS% > MAX.CHECKS% THEN\
PRINT "CHECK FILE FULL":\
PRINT "PRINT ALL CHECKS":\
PRINT "RERUN CALCULATE":\
PRINT "PRESS <RETURN> TO EXIT":\
INPUT "";LINE X0$:\
GOTO 6660
IF LEN(A$(1)) > 0 THEN 6240 REMARK IF PROCESSING BY GRID, GET NEXT VENDOR ENTRY
IF W1$ > A3$ THEN 6680 REMARK IF CALCULATING CHECKS BY RANGE, GET NEXT INVOICE
6500 K1$=W1$
6520 X1=448:GOSUB 210
PRINT "PROCESSING ";W1$,W0;TAB(63)
IF W1%<>4 THEN 6580 REMARK APPLY CREDIT MEMO TO POSITIVE CHECK AMOUNT.
C1=C(23)+C(24)
IF C1>W5 THEN C1=W5
W5=W5-C1
C(24)=C(24)-C1 REMARK TOTAL USED STORED AS NEGATIVE BALANCE
C(25)=C(25)+C1
GOSUB 5210
C(23)=-C1 REMARK ADJUST FIELDS SO CREDIT AMOUNTS WILL
C(24)=0:C(25)=0 REMARK APPEAR IN PROPER CHECK DETAIL FIELDS
GOTO 6600
6580 W5=W5+C(23)+C(24)+C(25)+C(26)
GOSUB 5210
6600 F=0
GOSUB 5000
GOTO 6300
6660 IF F9=0 THEN 6700
6680 F=1
GOSUB 5000
GOSUB 5230
P(5)=W7
OPEN "A/P0F130.DAT" AS 7
X0=7
GOSUB 3350 REMARK SAVE A/P INFORMATION RECORD
F9=0
CREATE "A/P0F030.PST" AS 1
PRINT #1;L2
6700 CONSOLE
PRINT CLEAR.SCREEN$;"A/P CHECK CALCULATE LOADING MENU"
CHAIN "A/P000" REMARK CLOSE FILES AND LOAD MENU