first commit
This commit is contained in:
+428
@@ -0,0 +1,428 @@
|
||||
|
||||
#include "FiveWin.ch"
|
||||
#include "report.ch"
|
||||
|
||||
#define MPAPDER_LETTER 1 // Letter 8 1/2 x 11 in
|
||||
#define DMPAPER_LEGAL 5 // Legal 8 1/2 x 14 in
|
||||
|
||||
|
||||
*************************************************************************
|
||||
|
||||
FUNCTION CGW_PRNT_FROM_FILE( WHCHORDER, OUTFILE, LPREVIEW, RPTNAME, ;
|
||||
LINELIMIT, COL_LEN, PAPER, ORIENTATION, MYFONT )
|
||||
|
||||
LOCAL CFILE := M->_THISUSER_TEMP
|
||||
LOCAL MHDC
|
||||
LOCAL OPRINTER1, OPRINTER2, OPRINTER3
|
||||
LOCAL CMODEL, CDOCUMENT, LUSER, LMODAL, LSELECTION
|
||||
LOCAL MPRNTR
|
||||
LOCAL OPRINTER, ODEVICE
|
||||
LOCAL OREPORT
|
||||
LOCAL RETVAL
|
||||
LOCAL MDESC
|
||||
LOCAL CKNAME, DATA2PRINT := ''
|
||||
LOCAL FONTARR, OFONTWIDE, OFONT, OFONTBOLD, CTEXT
|
||||
LOCAL FACT_W := 100, FACT_H := 100, SAVESEL := ALIAS()
|
||||
|
||||
|
||||
DEFAULT LPREVIEW := .F.
|
||||
// DEFAULT LINELIMIT := 54
|
||||
DEFAULT LINELIMIT := 64
|
||||
DEFAULT COL_LEN := 80
|
||||
DEFAULT MYFONT := 'NORMAL'
|
||||
DEFAULT ORIENTATION := 'PORTRAIT' // 3/4/2021
|
||||
|
||||
NET_USE('&WORKSTAT',.F.,5,'WORKSTAT')
|
||||
SELECT( SAVESEL )
|
||||
|
||||
MDESC := WHCHORDER + ' '
|
||||
|
||||
IF WHCHORDER = 'REPORT'
|
||||
MDESC := ALLTRIM( RPTNAME )
|
||||
ELSEIF SELECT( 'ORD_MAST' ) > 0
|
||||
MDESC += 'Order ' + ALLTRIM( ORD_MAST->ORDER_NUM )
|
||||
ELSEIF SELECT( 'QUOTE_MAST' ) > 0
|
||||
MDESC += 'Quote ' + ALLTRIM( QUOTE_MAST->ORDER_NUM )
|
||||
ENDIF
|
||||
|
||||
DO CASE
|
||||
CASE WHCHORDER = 'REPORT'
|
||||
CKNAME := GETPRINTER('ReportPrinter')
|
||||
FACT_W := WORKSTAT->REPT_FACW
|
||||
FACT_H := WORKSTAT->REPT_FACH
|
||||
|
||||
PAPER := 'LETTER' // PER DARLENE 7-30-2020
|
||||
ORIENTATION := 'LANDSCAPE' // PER DARLENE 7-30-2020
|
||||
LINELIMIT := 36 // really no effect because the eject char is present.
|
||||
// LINELIMIT := 40
|
||||
// LINELIMIT := 42
|
||||
|
||||
CASE WHCHORDER = 'PROD'
|
||||
CKNAME := GETPRINTER('ProdPrinter')
|
||||
FACT_W := WORKSTAT->PROD_FACW
|
||||
FACT_H := WORKSTAT->PROD_FACH
|
||||
|
||||
CASE WHCHORDER = 'GOLDEN'
|
||||
CKNAME := GETPRINTER('GoldenPrinter')
|
||||
FACT_W := WORKSTAT->GR_FACW
|
||||
FACT_H := WORKSTAT->GR_FACH
|
||||
|
||||
CASE WHCHORDER = 'DEL'
|
||||
CKNAME := GETPRINTER('DelPrinter')
|
||||
FACT_W := WORKSTAT->DEL_FACW
|
||||
FACT_H := WORKSTAT->DEL_FACH
|
||||
|
||||
CASE WHCHORDER = 'OD'
|
||||
CKNAME := GETPRINTER('OrdDeskPrinter')
|
||||
FACT_W := WORKSTAT->OD_FACW
|
||||
FACT_H := WORKSTAT->OD_FACH
|
||||
|
||||
CASE WHCHORDER = 'PO'
|
||||
CKNAME := GETPRINTER('InterCompPrinter')
|
||||
FACT_W := WORKSTAT->IC_FACW
|
||||
FACT_H := WORKSTAT->IC_FACH
|
||||
|
||||
CASE WHCHORDER = 'INV'
|
||||
CKNAME := GETPRINTER('InvPrinter')
|
||||
FACT_W := WORKSTAT->INV_FACW
|
||||
FACT_H := WORKSTAT->INV_FACH
|
||||
|
||||
CASE WHCHORDER = 'PREBILL'
|
||||
CKNAME := GETPRINTER('PreBillPrinter')
|
||||
FACT_W := WORKSTAT->PRE_FACW
|
||||
FACT_H := WORKSTAT->PRE_FACH
|
||||
|
||||
CASE WHCHORDER = 'BACKORD'
|
||||
CKNAME := GETPRINTER('BackOrdPrinter')
|
||||
FACT_W := WORKSTAT->BO_FACW
|
||||
FACT_H := WORKSTAT->BO_FACH
|
||||
|
||||
CASE WHCHORDER = 'PREBILL'
|
||||
CKNAME := GETPRINTER('PreBillPrinter')
|
||||
FACT_W := WORKSTAT->PRE_FACW
|
||||
FACT_H := WORKSTAT->PRE_FACH
|
||||
|
||||
CASE WHCHORDER = 'PRECOST'
|
||||
CKNAME := GETPRINTER('PreCostPrinter')
|
||||
FACT_W := WORKSTAT->PRE_FACW
|
||||
FACT_H := WORKSTAT->PRE_FACH
|
||||
|
||||
CASE WHCHORDER = 'QUOTE'
|
||||
CKNAME := GETPRINTER('QuotePrinter')
|
||||
FACT_W := WORKSTAT->QTE_FACW
|
||||
FACT_H := WORKSTAT->QTE_FACH
|
||||
|
||||
ENDCASE
|
||||
|
||||
IF FACT_W = 0
|
||||
FACT_W := 100
|
||||
ENDIF
|
||||
|
||||
IF FACT_H = 0
|
||||
FACT_H := 100
|
||||
ENDIF
|
||||
|
||||
|
||||
// this is a redirected printer if it has a comma - leave it alone. 3-18-2021
|
||||
// CKNAME := SUBS( CKNAME, 1, AT( ',', CKNAME )-1 )
|
||||
|
||||
|
||||
IF FILE( CFILE )
|
||||
DATA2PRINT := ALLTRIM( MEMOREAD( CFILE ) )
|
||||
IF EMPTY( DATA2PRINT )
|
||||
// MSGSTOP( 'No Information to Print', 'Document NOT printed' )
|
||||
ELSE
|
||||
|
||||
ODEVICE := TPRINTER():NEW( MDESC, .F., NIL, CKNAME )
|
||||
// DEFAULT IS LETTER
|
||||
IF PAPER = 'LEGAL'
|
||||
ODEVICE:SETPAGE( DMPAPER_LEGAL )
|
||||
ELSE
|
||||
// INCLUDING PAPER = 'LETTER'
|
||||
ODEVICE:SETPAGE( MPAPDER_LETTER )
|
||||
ENDIF
|
||||
|
||||
// DEFAULT IS PORTRAIT
|
||||
IF ORIENTATION = 'LANDSCAPE'
|
||||
ODEVICE:setlandscape()
|
||||
ELSE
|
||||
ODEVICE:setportrait()
|
||||
ENDIF
|
||||
|
||||
FONTARR := CGW_SETFONT( @ODEVICE, WHCHORDER, @OREPORT, COL_LEN, NIL, FACT_W, FACT_H )
|
||||
OFONT := FONTARR[1]
|
||||
OFONTBOLD := FONTARR[2]
|
||||
OFONTWIDE := FONTARR[3]
|
||||
|
||||
REPORT oReport ;
|
||||
CAPTION MDESC ;
|
||||
TO DEVICE ODEVICE ;
|
||||
FONT oFont, OFONTBOLD, OFONTWIDE
|
||||
|
||||
COLUMN DATA " " SIZE COL_LEN // * Trick "Data" - we're fooling Mother
|
||||
|
||||
END REPORT
|
||||
|
||||
OREPORT:LSCREEN := LPREVIEW
|
||||
oreport:cname := MDESC
|
||||
oReport:nTitleUpLine := RPT_NOLINE
|
||||
oReport:nTitleDnLine := RPT_NOLINE
|
||||
|
||||
// HALF INCH MARGINS
|
||||
// oReport:Margin(.00, RPT_LEFT, RPT_INCHES)
|
||||
// oReport:Margin(-.100, RPT_LEFT, RPT_INCHES)
|
||||
|
||||
|
||||
CTEXT := MEMOREAD( ( ALLTRIM( OUTFILE ) ) )
|
||||
|
||||
|
||||
IF WHCHORDER = 'REPORT'
|
||||
oReport:Margin( 0.500, RPT_LEFT, RPT_INCHES )
|
||||
oReport:Margin( 0.500, RPT_TOP, RPT_INCHES)
|
||||
IF SUBS( CTEXT, 1, 2 ) = CR_LF()
|
||||
CTEXT := SUBS( CTEXT, 2 )
|
||||
ENDIF
|
||||
|
||||
ELSE
|
||||
IF AT( CHR(27) + CHR(77), CTEXT ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER
|
||||
oReport:Margin(-0.400, RPT_LEFT, RPT_INCHES)
|
||||
ELSE
|
||||
oReport:Margin(0.100, RPT_LEFT, RPT_INCHES)
|
||||
ENDIF
|
||||
// oReport:Margin(.56, RPT_TOP, RPT_INCHES)
|
||||
oReport:Margin(.00, RPT_TOP, RPT_INCHES)
|
||||
oReport:Margin(.00, RPT_BOTTOM, RPT_INCHES)
|
||||
ENDIF
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// IF AT( CHR(27) + CHR(77), CTEXT ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER
|
||||
// oReport:Margin(-0.400, RPT_LEFT, RPT_INCHES)
|
||||
// ELSE
|
||||
// oReport:Margin(0.100, RPT_LEFT, RPT_INCHES)
|
||||
// ENDIF
|
||||
// // oReport:Margin(.56, RPT_TOP, RPT_INCHES)
|
||||
// oReport:Margin(.00, RPT_TOP, RPT_INCHES)
|
||||
// oReport:Margin(.00, RPT_BOTTOM, RPT_INCHES)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ACTIVATE REPORT oReport ;
|
||||
ON INIT ( SayMemo(OREPORT, CTEXT, COL_LEN, LINELIMIT ), ;
|
||||
OREPORT:LBREAK := .T. )
|
||||
|
||||
oFont:End()
|
||||
OREPORT:END()
|
||||
|
||||
ODEVICE:setportrait()
|
||||
ODEVICE:SETPAGE( MPAPDER_LETTER )
|
||||
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
|
||||
********************************************************************************************
|
||||
|
||||
STATIC Function SayMemo(OREPORT, cText, COL_LEN, MAXLEN )
|
||||
|
||||
LOCAL cLine
|
||||
LOCAL nFor, nLines, nPageln
|
||||
LOCAL POS1, POS2, WIDE_DATA, CLINE1, CLINE2, CLINE_WORK
|
||||
|
||||
IF LEN( OREPORT:ACOLS ) = 1 // 1ST TIME IN - SET COLUMN POSITIONS
|
||||
AADD( OREPORT:ACOLS, 400 ) // 2
|
||||
AADD( OREPORT:ACOLS, 750 ) // 3 dup delivery - 4th one
|
||||
AADD( OREPORT:ACOLS, 1200 ) // 4
|
||||
AADD( OREPORT:ACOLS, 1600 ) // 5
|
||||
AADD( OREPORT:ACOLS, 2000 ) // 6
|
||||
AADD( OREPORT:ACOLS, 2400 ) // 7
|
||||
AADD( OREPORT:ACOLS, 2800 ) // 8
|
||||
AADD( OREPORT:ACOLS, 3200 ) // 9
|
||||
AADD( OREPORT:ACOLS, 3600 ) // 10
|
||||
AADD( OREPORT:ACOLS, 4100 ) // 11
|
||||
AADD( OREPORT:ACOLS, 4400 ) // 12
|
||||
AADD( OREPORT:ACOLS, 4800 ) // 13
|
||||
AADD( OREPORT:ACOLS, 5200 ) // 14
|
||||
AADD( OREPORT:ACOLS, 5600 ) // 15
|
||||
|
||||
ENDIF
|
||||
|
||||
// cText := MEMOREAD( ( cTextfile ) )
|
||||
|
||||
nLines := MlCount( cText, COL_LEN ) // Original text has up to 76 chars. per line.
|
||||
nPageln := 0
|
||||
|
||||
FOR nFor := 1 TO nLines
|
||||
cLine := MemoLine( cText, COL_LEN, nFor )
|
||||
|
||||
|
||||
IF AT( CHR(27) + CHR(77), CLINE ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER
|
||||
CLINE := STRTRAN( CLINE, CHR(27) + CHR(77), '' )
|
||||
ENDIF
|
||||
|
||||
|
||||
// this overrides the actual line-limit - calculated in the report building.
|
||||
IF AT( CHR(12), CLINE ) > 0 // EJECT
|
||||
|
||||
IF NFOR = NLINES ; // LAST LINE
|
||||
.or. NFOR = NLINES-1 // LAST LINE
|
||||
ELSE
|
||||
CLINE := SUBS( CLINE, 1, AT( CHR(12), CLINE )-1 )
|
||||
OUTPUT_LINE( OREPORT, CLINE )
|
||||
nPageln := nPageln + 1
|
||||
OREPORT:EndPage()
|
||||
NPAGELN := 0
|
||||
ENDIF
|
||||
|
||||
ELSE
|
||||
|
||||
OUTPUT_LINE( OREPORT, CLINE )
|
||||
|
||||
ENDIF
|
||||
|
||||
NEXT
|
||||
|
||||
RETURN NIL
|
||||
|
||||
*********************************************************
|
||||
|
||||
FUNCTION OUTPUT_LINE( OREPORT, CLINE )
|
||||
LOCAL POS1, CLINE1, CLINE2, POS2, WIDE_DATA, CLINE_WORK
|
||||
|
||||
|
||||
oReport:StartLine()
|
||||
|
||||
POS1 := AT( CHR(27) + 'W1', CLINE ) // WE FOUND AN ESCAPE SEQUENCE FOR WIDE PRINT
|
||||
IF POS1 > 0
|
||||
|
||||
CLINE_WORK := CLINE
|
||||
DO WHILE .T.
|
||||
CLINE1 := SUBS( CLINE_WORK, 1, POS1-1 ) // EVERYTHING LEADING UP TO THE WIDE PRINT
|
||||
CLINE2 := SUBS( CLINE_WORK, POS1+3 )
|
||||
POS2 := AT( CHR(27) + 'W0', CLINE2 )
|
||||
WIDE_DATA := ALLTRIM( SUBS( CLINE2, 1, POS2 - 1 ) )
|
||||
// CLINE2 := ALLTRIM( SUBS( CLINE2, POS2+3 ) )
|
||||
CLINE2 := SUBS( CLINE2, POS2+3 )
|
||||
|
||||
IF !EMPTY( CLINE1 )
|
||||
OREPORT:SAY( 1, CLINE1, 1 ) // 1ST COLUMN NORMAL FONT
|
||||
ENDIF
|
||||
|
||||
IF AT( 'DUPLICATE DEL', WIDE_DATA) > 0
|
||||
OREPORT:SAY( 5, WIDE_DATA, 3 )
|
||||
ELSEIF AT( 'DUPLICATE', WIDE_DATA) > 0
|
||||
OREPORT:SAY( 1, WIDE_DATA, 3 )
|
||||
ELSEIF VAL( WIDE_DATA ) > 0 // ORDER NUMBER
|
||||
OREPORT:SAY( 3, WIDE_DATA, 3 )
|
||||
ELSE
|
||||
MSGSTOP( 'WIDE VALUE NOT DEFINED' )
|
||||
OREPORT:SAY( 1, WIDE_DATA, 3 )
|
||||
ENDIF
|
||||
|
||||
POS1 := AT( CHR(27) + 'W1', CLINE2 ) // WE FOUND AN ESCAPE SEQUENCE FOR WIDE PRINT
|
||||
IF POS1 > 0
|
||||
CLINE_WORK := CLINE2 // REMAINDER OF DATA
|
||||
ELSE
|
||||
IF !EMPTY( CLINE2 )
|
||||
OREPORT:SAY( 11, CLINE2, 1 )
|
||||
ENDIF
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
|
||||
ELSE
|
||||
oReport:Say( 1, cLine, 1 ) // NORMAL font
|
||||
ENDIF
|
||||
oReport:EndLine()
|
||||
|
||||
|
||||
RETURN NIL
|
||||
|
||||
|
||||
|
||||
/*
|
||||
OREPORT:SAY( 1, '111111', 1 )
|
||||
OREPORT:SAY( 2, '22222', 3 )
|
||||
OREPORT:SAY( 3, '33333' , 1 )
|
||||
OREPORT:SAY( 4, '44444' , 3 )
|
||||
OREPORT:SAY( 5, '55555' , 1 ) // DUPLICATE DEL
|
||||
OREPORT:SAY( 6, '66666' , 3 )
|
||||
OREPORT:SAY( 7, '77777', 3 )
|
||||
OREPORT:SAY( 8, '88888' , 1 )
|
||||
OREPORT:SAY( 9, '99999' , 3 )
|
||||
OREPORT:SAY( 10, 'aaaaa' , 1 )
|
||||
OREPORT:SAY( 11, 'BBBBB' , 3 ) // + 20% = ORDER NUMBER AND Page 1 of 1
|
||||
OREPORT:SAY( 12, 'CCCCC' , 1 )
|
||||
OREPORT:SAY( 13, 'DDDDD' , 3 )
|
||||
OREPORT:SAY( 14, 'EEEEE' , 1 )
|
||||
OREPORT:SAY( 15, 'FFFFF' , 3 )
|
||||
*/
|
||||
|
||||
|
||||
***********************************************************************
|
||||
|
||||
FUNCTION CGW_SETFONT( ODEVICE, WHCHORDER, OREPORT, COL_LEN, PASS_MYFONT, FACT_W, FACT_H )
|
||||
|
||||
LOCAL MYFONT, OFONT, OFONTB, OFONTW // REGULAR, BOLD, WIDE
|
||||
LOCAL FORCEBOLD := .F., MALTFONT
|
||||
|
||||
//MYFONT := 'Courier New' //** don - 01/11/02 - reactivated 4/21/2021
|
||||
MYFONT := 'Lucida Sans Typewriter'
|
||||
|
||||
// 3-31-2021
|
||||
FACT_W := FACT_W / 100
|
||||
FACT_H := FACT_H / 100
|
||||
|
||||
|
||||
DEFINE FONT oFont NAME MYFONT
|
||||
DEFINE FONT oFontB NAME MYFONT BOLD
|
||||
DEFINE FONT oFontW NAME MYFONT BOLD
|
||||
|
||||
|
||||
// adjust the bold font height/width slightly.
|
||||
IF WHCHORDER = 'REPORT'
|
||||
// myfont is hard coded above depending on the data's width
|
||||
OFONT:NCLIPPRECISION := 2
|
||||
OFONT:NPITCHFAMILY := 49
|
||||
|
||||
OFONT:NWIDTH := 4.00
|
||||
OFONT:NHEIGHT:= 12
|
||||
|
||||
|
||||
ELSEIF MYFONT = 'Courier New'
|
||||
// tiny bit too wide
|
||||
oFont:nWIDTH := 6.90
|
||||
oFont:nHEIGHT:= 14.00
|
||||
|
||||
// OK TALL / TOO WIDE
|
||||
oFontW:nWIDTH := 15.00
|
||||
oFontW:nHEIGHT:= 18.00
|
||||
|
||||
ELSE
|
||||
// this is the default - MyFont is 'Lucida Sans Typewriter'
|
||||
// OK TALL / TOO WIDE
|
||||
oFont:nWIDTH := 7.25
|
||||
oFont:nHEIGHT:= 12.00
|
||||
|
||||
// test logic begin
|
||||
// oFont:nWIDTH := 17.25
|
||||
// oFont:nHEIGHT:= 22.00
|
||||
// test logic end
|
||||
|
||||
|
||||
ENDIF
|
||||
|
||||
// 03/31/2021
|
||||
OFONT:NWIDTH *= FACT_W
|
||||
OFONT:NHEIGHT *= FACT_H
|
||||
|
||||
|
||||
RETURN { OFONT, OFONTB, OFONTW }
|
||||
|
||||
|
||||
***********************************************
|
||||
Reference in New Issue
Block a user