Вы находитесь на странице: 1из 4

7/9/13

Report Design in Visual FoxPro 3.0

Report Design in Visual FoxPro 3.0


This document is reprinted from the Microsoft DevCon 95 Speaker materials and is provided "as-is." This document and any associated demo files were created using Visual FoxPro 3.0. Some features discussed may have changed in Visual FoxPro 5.0.
Randy Wallin COB System Designs, Inc Introduction Even in the middle of an object oriented world, the report designers primary purpose has not changed: to enable users to quickly and effectively produce reports that convey meaningful information based on the data stored in the data source. Some of the things we will be covering in this session include: Whats new in the Visual FoxPro Report Designer Migration issues from FoxPro 2.x to 3.0 Tips on making the best use of the new Report Designer .... and more as we have time.

Standardizing your reports:


Once youve created a report that you like for style and content, it would be great to save that report as a Template for future reports. In FoxPro 2.x, you could create a default report with appropriate fonts, headings, logos, etc. and save it to a report called UNTITLED.FRX. Then the next time you created a report, the same defaults were applied to the new report. This 2.x tip relied on the fact that each new report would be called UNTITLED. If FoxPro found one, it would use it, otherwise one would be created. In Visual FoxPro, the report designer does not rely on a file called UNTITLED but follows the Office standard where each new report created will have a sequential number associated with it. For example, if you start a new VFP session and create a report, the default name is REPORT1, the second report created in that session starts out as REPORT2, etc. So, how do we trick VFP to use a Template? Actually, it is the same process as you did in 2.x create a report, alter all the style and content, save it as UNTITLED. The one difference is that you must implicitly ask for the untitled report file to be used as your template. To implement this 2.x tip in 3.0, enter: CREATE REPORT UNTITLED Adding Label Styles to the Label Designer: To add the standard label definitions to your resource file in FoxPro 2.x, you ran ADDLABEL.APP. In 3.0, you use the same program to accomplish the same task, with the additional ability to add custom label definitions. To add a label definition, you will need the following information: Layout Name Example: Avery 5162 Description, with the layout number, height, width and number of columns. Example: 5162 1-1/3 4 2 Metrica checkbox that defaults to No Dimensions which are entered in 1/10,000 of an inch Margins: Left and Top Label: Height and Width Space between labels

www.dfpug.de/loseblattsammlung/migration/whitepapers/ReportDesign.htm

1/4

7/9/13

Report Design in Visual FoxPro 3.0

Dont be put off by the 1/10,000 of an inch measurements. This roughly correlates to 1 inch is equal to 10,000 hundredths. So from our example above where the Height of the label was 1-1/3, you would enter 13,333 thousandths of an inch (thats 10,000 for the inch and 3,333 for the 1/3). Enter 40,000 thousandths of an inch to reflect the 4 width of the label.
Number of columns acrossin our example 2.

The first two blocks of data you entered are purely informational for the end-user; the rest of the data entered is for the Addlabel application to generate the binary information to be stored in the resource file. The label designer will read this information from the resource file and create a layout for your label input. ADDLABEL.APP also stores the information in a file called LABELS.DBF. Storing the label definitions in LABELS.DBF offers a quick and easy way to restore your labels if you lose the FoxUser file for some reason.
Printer Control: FoxPro 2.x stored the printer setup information in the fields Tag and Tag2. The information was stored as a binary blob, so programmatically you had little control over the layout, paper size, printer, etc. In 3.0, the print setup settings will be saved in an ASCII format to give you the option to change it at run-time. Youll find the printer setup information in the TAG field of the first record of the .FRX. Heres a simple example of how you could code a quick printer property change in a 3.0 report.

*P r o g r a m . . . :c h n g p r n t . p r g *C o m p i l e r . . :F o x P r o3 . 0 *A b s t r a c t . . :S i m p l er o u t i n et ou p d a t et h et a g * i n f o r m a t i o nf o rp r i n ts e t t i n g s *C h a n g e s . . . : * *P A R A M E T E R S :R e p o r t N a m e ,P r o p e r t yt ob ec h a n g e d ,C h a n g et o * *E X A M P L E . . . :T oi n s u r et h eD R A F TR e p o r tw i l lh a v eP o r t r a i tO r i e n t a t i o n * I FC h n g P r n t ( " D R A F T " , " O r i e n t a t i o n " , " P o r t r a i t " ) * . . . . * E L S E * W A I TW I N D O W[ R e p o r tn o tu p d a t e d . ] * E N D I F& & *C h n g P r n t ( " D R A F T " , " O r i e n t a t i o n " , " P o r t r a i t " ) * L P A R A M E T E R Sc R e p o r t N a m e ,c P r o p e r t y ,e C h a n g e L O C A Ln S e l e c t ,n R e c n o ,n L o c a t i o n ,c L i n e ,c N e w L i n e ,l T e x t *m a k es u r ew eh a v ea ne x t e n s i o no nt h ec R e p o r t N a m e c R e p o r t N a m e = I I F ( " . " $ c R e p o r t N a m e , c R e p o r t N a m e , c R e p o r t N a m e + " . F R X " ) *m a k es u r et h ef i l ee x i s t s I F" " = = L O C F I L E ( ( c R e p o r t N a m e ) , " F R X " , " W h e r ei s" + c R e p o r t N a m e + " ? " ) R E T U R N. F . E N D I F& & *" " = = L O C F I L E ( ( c R e p o r t N a m e ) , " F R X " , " W h e r ei s" + c R e p o r t N a m e + " ? " ) *l T e x td e t e r m i n e si fw eh a v eaT e x tp r o p e r t yt oc h a n g e l T e x t=( T Y P E ( " e C h a n g e " ) = = " C " ) n S e l e c t = S E L E C T ( ) n R e c n o = R E C N O ( ) S E L E C T0

www.dfpug.de/loseblattsammlung/migration/whitepapers/ReportDesign.htm

2/4

7/9/13

Report Design in Visual FoxPro 3.0

U S E( c R e p o r t N a m e )A G A I N n L o c a t i o n = A T C ( c P r o p e r t y , T A G ) I Fn L o c a t i o n < > 0 *b u i l dal i n et oc h a n g eo u tw i t ht h en e wl i n e c L i n e = S U B S T R ( T A G , n L o c a t i o n ) c L i n e = S U B S T R ( c L i n e , 1 , A T ( C H R ( 1 3 ) , c L i n e ) ) I Fl T e x t c N e w L i n e = L E F T ( c L i n e , A T ( [ = ] , c L i n e ) ) + [ " ] + e C h a n g e + [ " ] E L S E c N e w L i n e = L E F T ( c L i n e , A T ( [ = ] , c L i n e ) ) + A L L T R I M ( S T R ( e C h a n g e ) ) E N D I F& & *l T e x t R E P L A C ET A GW I T HS T R T R A N ( T a g , c L i n e , c N e w L i n e ) E L S E I Fl T e x t R E P L A C ET A GW I T HA L L T R I M ( T A G ) + C H R ( 1 3 ) + c P r o p e r t y + " = " + [ " ] + e C h a n g e + [ " ] E L S E R E P L A C ET A GW I T HA L L T R I M ( T A G ) + C H R ( 1 3 ) + c P r o p e r t y + " = " + A L L T R I M ( S T R ( e C h a n g e ) ) E N D I F& & *l T e x t E N D I F& & *n L o c a t i o n < > 0 U S E S E L E C T( n S e l e c t ) I Fn R E C N O > 0 G On R e c n o E N D I F& & *n R E C N O > 0 R E T U R N. T . Print Preview at runtime:
One of the new options that we have with the PRINT PREVIEW is the NOWAIT option. In essence, it makes the PREVIEW modeless. For example, REPORT FORM Customer NOWAIT will load the PREVIEW window and immediately return to the programs control. Printing to a File: Under 2.x and 3.0, you can output a report to a file for later printing with the REPORT FORM <<FRXNAME>> TO FILE command. When you want to print out the report, you have two options: From Fox (Either FoxPro For Windows or FoxPro For DOS):

C O P YF I L E< R e p o r t O u t p u t . t x t >T OL P T 1 . P R N
From DOS:

C O P Y< R e p o r t O u t . t x t >P R N/ B
here the /B signifies it is a binary file.

In 2.x, if you wanted to print the report to disk for later reviewing, you had several other problems to resolve:
The report had to be manually stripped of all bold formatting and any fonts greater than 16 refused to print. It was dependent on the Generic / Text printer driver. As such, if the print driver was not available, the report would not work. Due to the reliance on the Generic / Text driver, the reports output was limited to 80 columns.
www.dfpug.de/loseblattsammlung/migration/whitepapers/ReportDesign.htm 3/4

7/9/13

Report Design in Visual FoxPro 3.0

Or if the report was created in FoxPro for DOS and never transported, it could be used to generate a text output file for later viewing. This solution would force FoxPro for Windows to use the DOS print drivers and print reliably. The downfall of this method was two-fold: 1. You had to maintain two separate versions of a report 2. You had to have FoxPro for DOS to make it work

In Visual FoxPro, the report command has a new keyword: ASCII. This bypasses all of the necessary work-arounds listed above and produces a report that can be viewed later via FoxPros own editor.
The ASCII option in no way depends on the Generic / Text print driver or any special formatting of the report. The new ASCII keyword works in conjunction with 2 system variables: _ASCIICOLS and _ASCIIROWS to set the width and height, respectively, of the report output. The default width is 80 characters and the default height is 63. Happy reports using happy code: Currently, adding code to a FoxPro 2.x report has been limited to expressions that are inserted via report variables. Within the VFP report designer, there are several different ways to incorporate code into your report: All Report Bands (i.e. Header, Footer, Group, Detail, Title, Etc.) Allow expressions to be used On Entry and On Exit of that band Overcome the 2.x problem of not dropping the variable in a place where they would be correctly updated. These are evaluated on entry and on exit of the band. What kind of things can you do with an ON ENTRY and ON EXIT expression? Percentage of total reports, perform lookup table evaluation before processing the band, resetting the text variable in the next child band based on the previous bands results, etc. Data Environment (DE) Allows code, not just expressions, to be placed in the following events: BeforeOpenTables, Destroy, Error, and others. The Data Environment always gets created and saved with the report. So, any code you enter in these methods will be saved with the report as well. The BeforeOpenTables and Destroy events closely model the Load Event and Destroy Event methods in the form designer. Database Containers (DBC) If you base your report on information that is apart of a DBC, you can utilize the Stored Procedures contained in the DBC to place your report expressions. For example, the BASEBALL.DBC contains a table called PROS.DBF. The PROS report that is based on that table requires an expression to expand the players positions into meaningful expressions. For instance, 1B becomes First Base, CA becomes Catcher, etc. In the report, ProsFrxExpandPos(Position) is inserted in the detail bands as an expression. In the stored procedures of BASEBALL, a function called ProsFrxExpandPos is created to return the correct expression based on the position passed to it.

www.dfpug.de/loseblattsammlung/migration/whitepapers/ReportDesign.htm

4/4

Вам также может понравиться