compile subroutine invoice_rpt3_prn( FromDate, ThruDate, InvoiceTable ) ! * LIST INVOICE JUSTLEN '8' CUST_CITY JUSTLEN '50' BREAK-ON ENTRY_DATE DUE_DATE PO GL_ACCT_TOTS TOTAL TOTAL_SHIP_AMOUNT TOTAL DISCOUNT_AMOUNT TOTAL INVOICE_AMOUNT HEADING " Invoices by Entry Date by Customer 'T' PAGE # 'P' by selected due dates from ((02/01/96) TO ( ) " ! * declare function set_printer * HEADING/FOOTING Font = 'Courier New,7,L,1' convert ',' to @fm in Font HeadPos = '.5,1.75,.81,.75,1.25,1.75,1.06,1.06,1.06' convert ',' to @fm in HeadPos TheHeader = "Epitronics, formerly Lawrence Semiconductor Labs." TheHeader<-1> = "Invoices by Entry Date by Customer 'T' PAGE # 'P' by selected entry dates from (":oconv(FromDate, 'D2/' ):') TO (':oconv(ThruDate, 'D2/' ):")":@fm ColHeader = "Key" : @vm : "Customer/City" : @vm : "Entry Date" : @vm : "Due Date" : @vm : "PO" : @vm : "G/L Account Totals" : @vm : "Tot Ship Amt" : @vm : "Discount Amt" : @vm : "Invoice Amt" Tvar = str( '_', 8):@vm:str( '_', 30):@vm:str( '_', 10):@vm:str( '_', 10):@vm Tvar:= str( '_',17 ):@vm:str( '_', 25):@vm:str( '_', 17):@vm:str( '_', 17):@vm Tvar:= str( '_',17 ) *COLHEADER = '' ColHeader<-1> = Tvar *TheHeader = '' Void = set_printer( 'FONTHEADFOOT', Font ) Void = set_printer( 'HEADER', TheHeader, HeadPos, ColHeader ) Void = set_printer( 'FONT', Font ) *FOOTING "" * @RECCOUNT=0 FIRST.PASS=1 LAST.RECORD=0 READERR=0 * * OPEN DICT AND DATA FILES * OPEN "DICT",InvoiceTable TO @DICT ELSE return OPEN "",InvoiceTable TO FILE.IN ELSE return * * MAKE COLUMN HEADING * * ZERO ACCUMULATORS FOR EACH BREAK * TOTALULSHIPULAMOUNT.ENTRYULDATE.TOTAL=0 TOTALULSHIPULAMOUNT.ENTRYULDATE.COUNT=0 TOTALULSHIPULAMOUNT.GRAND.TOTAL=0 TOTALULSHIPULAMOUNT.GRAND.COUNT=0 * DISCOUNTULAMOUNT.ENTRYULDATE.TOTAL=0 DISCOUNTULAMOUNT.ENTRYULDATE.COUNT=0 DISCOUNTULAMOUNT.GRAND.TOTAL=0 DISCOUNTULAMOUNT.GRAND.COUNT=0 * INVOICEULAMOUNT.ENTRYULDATE.TOTAL=0 INVOICEULAMOUNT.ENTRYULDATE.COUNT=0 INVOICEULAMOUNT.GRAND.TOTAL=0 INVOICEULAMOUNT.GRAND.COUNT=0 * * NULL PREVIOUS BREAK BUCKETS * PREV.ENTRYULDATE='' LAST.ENTRYULDATE.BREAK = 1 * ! READRECORD: ! * * * ZERO BREAK FLAGS TO FALSE * ENTRYULDATE.BREAK=0 * * @FILE.ERROR.MODE=1 READNEXT @ID,WHICH.VALUE ELSE @FILE.ERROR.MODE=0 IF STATUS() GT 0 THEN @ANS=@FILE.ERROR<1> Void = set_printer( 'TEXT', {RLIST_TEXT_5} ) return END IF @FILE.ERROR<1> EQ 421 THEN Void = set_printer( 'TEXT', {RLIST_TEXT_6} ) GOTO READRECORD END IF @FILE.ERROR<1> NE 111 THEN @ANS=@FILE.ERROR<1> Void = set_printer( 'TEXT', {RLIST_TEXT_4} ) READERR+=1 GOTO READRECORD END LAST.RECORD=1 ENTRYULDATE.BREAK=1 ENTRYULDATE=PREV.ENTRYULDATE END @FILE.ERROR.MODE=0 * S.ATID=@ID * IF FIRST.PASS AND LAST.RECORD THEN Void = set_printer( 'TEXT', {RLIST_TEXT_2} ) return END * IF LAST.RECORD THEN GOTO BREAKS * IF @REDUCTION.DONE THEN @FILE.ERROR.MODE=1 READO @RECORD FROM FILE.IN,@ID ELSE @FILE.ERROR.MODE=0 IF STATUS() GT 0 THEN @ANS=@FILE.ERROR<1> Void = set_printer( 'TEXT', {RLIST_TEXT_5} ) return END IF @FILE.ERROR<1> NE 100 THEN @ANS=@FILE.ERROR<1> Void = set_printer( 'TEXT', {RLIST_TEXT_4} ) READERR+=1 END GOTO READRECORD END @FILE.ERROR.MODE=0 END * @RECCOUNT+=1 * * * CALCULATE VALUE(S) FOR COLUMN(S) * S.ATID={@ID} I.ATID=S.ATID S.CUSTULCITY={CUST_CITY} I.CUSTULCITY=S.CUSTULCITY S.ENTRYULDATE={ENTRY_DATE} I.ENTRYULDATE=S.ENTRYULDATE S.DUEULDATE={DUE_DATE} I.DUEULDATE=S.DUEULDATE S.PO={PO} I.PO=S.PO M.GLULACCTULTOTS={GL_ACCT_TOTS}<1,WHICH.VALUE> ; P.GLULACCTULTOTS=1 ; C.GLULACCTULTOTS=7 * * INITIALIZE MULTIVALUE BREAK CHECK VARIABLE * S.GLULACCTULTOTS = M.GLULACCTULTOTS S.TOTALULSHIPULAMOUNT={TOTAL_SHIP_AMOUNT} I.TOTALULSHIPULAMOUNT=S.TOTALULSHIPULAMOUNT S.DISCOUNTULAMOUNT={DISCOUNT_AMOUNT} I.DISCOUNTULAMOUNT=S.DISCOUNTULAMOUNT S.INVOICEULAMOUNT={INVOICE_AMOUNT} I.INVOICEULAMOUNT=S.INVOICEULAMOUNT * PREVIOUS.MARK.LEVEL=0 * * TEST FOR CONTROL BREAK(S) * IF (S.ENTRYULDATE NE PREV.ENTRYULDATE) OR ENTRYULDATE.BREAK THEN ENTRYULDATE=PREV.ENTRYULDATE PREV.ENTRYULDATE=S.ENTRYULDATE ENTRYULDATE.BREAK+=1 END * * IF FIRST.PASS THEN FIRST.PASS=0 GOTO DETAIL END * * ! BREAKS: ! * * PRINT BREAK TOTAL(S) AND ACCUMULATE TOTAL(S) * * IF ENTRYULDATE.BREAK THEN Void = set_printer( 'TEXT', '' ) PRINTLINE = '':@vm PRINTLINE:= '':@vm PRINTLINE:= "***":@vm PRINTLINE:= '':@vm PRINTLINE:= '':@vm PRINTLINE:= '':@vm PRINTLINE:= OCONV(TOTALULSHIPULAMOUNT.ENTRYULDATE.TOTAL ,"MD2,$"):@vm PRINTLINE:= OCONV(DISCOUNTULAMOUNT.ENTRYULDATE.TOTAL ,"MD2,$"):@vm PRINTLINE:= OCONV(INVOICEULAMOUNT.ENTRYULDATE.TOTAL ,"MD2,$") TableColInfo = '>+720':@vm:'<+2520':@vm:'<+1166':@vm:'<+1080':@vm:'<+1800':@vm:'<+2520':@vm:'>+1526':@vm:'>+1526':@vm:'>+1526' Void = set_printer( 'ADDTABLE', TableColInfo, '', PRINTLINE, '', '', 1, TB_NONE ) Void = set_printer( 'TEXT', '' ) * TOTALULSHIPULAMOUNT.GRAND.TOTAL+=TOTALULSHIPULAMOUNT.ENTRYULDATE.TOTAL TOTALULSHIPULAMOUNT.ENTRYULDATE.TOTAL=0 TOTALULSHIPULAMOUNT.GRAND.COUNT+=TOTALULSHIPULAMOUNT.ENTRYULDATE.COUNT TOTALULSHIPULAMOUNT.ENTRYULDATE.COUNT=0 DISCOUNTULAMOUNT.GRAND.TOTAL+=DISCOUNTULAMOUNT.ENTRYULDATE.TOTAL DISCOUNTULAMOUNT.ENTRYULDATE.TOTAL=0 DISCOUNTULAMOUNT.GRAND.COUNT+=DISCOUNTULAMOUNT.ENTRYULDATE.COUNT DISCOUNTULAMOUNT.ENTRYULDATE.COUNT=0 INVOICEULAMOUNT.GRAND.TOTAL+=INVOICEULAMOUNT.ENTRYULDATE.TOTAL INVOICEULAMOUNT.ENTRYULDATE.TOTAL=0 INVOICEULAMOUNT.GRAND.COUNT+=INVOICEULAMOUNT.ENTRYULDATE.COUNT INVOICEULAMOUNT.ENTRYULDATE.COUNT=0 END * * PERFORM LAST RECORD OUTPUT IF DONE * IF LAST.RECORD THEN Void = set_printer( 'TEXT', '' ) PRINTLINE ="***":@vm PRINTLINE:= '':@vm PRINTLINE:= '':@vm PRINTLINE:= '':@vm PRINTLINE:= '':@vm PRINTLINE:= '':@vm PRINTLINE:= OCONV(TOTALULSHIPULAMOUNT.GRAND.TOTAL ,"MD2,$"):@vm PRINTLINE:= OCONV(DISCOUNTULAMOUNT.GRAND.TOTAL ,"MD2,$"):@vm PRINTLINE:= OCONV(INVOICEULAMOUNT.GRAND.TOTAL ,"MD2,$") TableColInfo = '>+720':@vm:'<+2520':@vm:'<+1166':@vm:'<+1080':@vm:'<+1800':@vm:'<+2520':@vm:'>+1526':@vm:'>+1526':@vm:'>+1526' Void = set_printer( 'ADDTABLE', TableColInfo, '', PRINTLINE, '', '', 1, TB_NONE ) * PRINT * @ANS=@RECCOUNT * PRINT {RLIST_TEXT_1} IF READERR THEN @ANS=READERR Void = set_printer( 'TEXT', {RLIST_TEXT_3} ) END return END * ! DETAIL: ! * * REMOVE APPROPRIATE VALUE FROM MULTI-VALUED COLUMN(S) * NEW.MARK.LEVEL=0 * IF C.GLULACCTULTOTS GE PREVIOUS.MARK.LEVEL THEN REMOVE I.GLULACCTULTOTS FROM M.GLULACCTULTOTS AT P.GLULACCTULTOTS SETTING C.GLULACCTULTOTS S.GLULACCTULTOTS=I.GLULACCTULTOTS END IF C.GLULACCTULTOTS GT NEW.MARK.LEVEL THEN NEW.MARK.LEVEL=C.GLULACCTULTOTS * * DO CONVERSIONS IF ANY * IF S.ENTRYULDATE NE "" THEN S.ENTRYULDATE=OCONV(S.ENTRYULDATE,"D2/") IF S.DUEULDATE NE "" THEN S.DUEULDATE=OCONV(S.DUEULDATE,"D2/") IF S.TOTALULSHIPULAMOUNT NE "" THEN S.TOTALULSHIPULAMOUNT=OCONV(S.TOTALULSHIPULAMOUNT,"MD2,$") IF S.DISCOUNTULAMOUNT NE "" THEN S.DISCOUNTULAMOUNT=OCONV(S.DISCOUNTULAMOUNT,"MD2,$") IF S.INVOICEULAMOUNT NE "" THEN S.INVOICEULAMOUNT=OCONV(S.INVOICEULAMOUNT,"MD2,$") * * ACCUMULATE TOTAL(S) * IF NUM(I.TOTALULSHIPULAMOUNT) AND I.TOTALULSHIPULAMOUNT NE "" THEN TOTALULSHIPULAMOUNT.ENTRYULDATE.TOTAL+=I.TOTALULSHIPULAMOUNT TOTALULSHIPULAMOUNT.ENTRYULDATE.COUNT+=1 I.TOTALULSHIPULAMOUNT='' END IF NUM(I.DISCOUNTULAMOUNT) AND I.DISCOUNTULAMOUNT NE "" THEN DISCOUNTULAMOUNT.ENTRYULDATE.TOTAL+=I.DISCOUNTULAMOUNT DISCOUNTULAMOUNT.ENTRYULDATE.COUNT+=1 I.DISCOUNTULAMOUNT='' END IF NUM(I.INVOICEULAMOUNT) AND I.INVOICEULAMOUNT NE "" THEN INVOICEULAMOUNT.ENTRYULDATE.TOTAL+=I.INVOICEULAMOUNT INVOICEULAMOUNT.ENTRYULDATE.COUNT+=1 I.INVOICEULAMOUNT='' END * * PRINT DETAIL LINE * PRINTLINE = S.ATID:@vm PRINTLINE:= S.CUSTULCITY:@vm PRINTLINE:= S.ENTRYULDATE:@vm PRINTLINE:= S.DUEULDATE:@vm PRINTLINE:= S.PO:@vm PRINTLINE:= S.GLULACCTULTOTS:@vm PRINTLINE:= S.TOTALULSHIPULAMOUNT:@vm PRINTLINE:= S.DISCOUNTULAMOUNT:@vm PRINTLINE:= S.INVOICEULAMOUNT TableColInfo = '>+720':@vm:'<+2520':@vm:'<+1166':@vm:'<+1080':@vm:'<+1800':@vm:'<+2520':@vm:'>+1526':@vm:'>+1526':@vm:'>+1526' Void = set_printer( 'ADDTABLE', TableColInfo, '', PRINTLINE, '', '', 1, TB_NONE ) * IF NEW.MARK.LEVEL THEN S.ATID='' S.CUSTULCITY='' S.ENTRYULDATE='' S.DUEULDATE='' S.PO='' S.GLULACCTULTOTS='' S.TOTALULSHIPULAMOUNT='' S.DISCOUNTULAMOUNT='' S.INVOICEULAMOUNT='' PREVIOUS.MARK.LEVEL=NEW.MARK.LEVEL GOTO DETAIL END * GOTO READRECORD * END