Omit('Browse Report Explanation') ----EXAMPLE OF USAGE BrowseReport('.Open',PosIni) loop I# = 1 to Records(Q1:Browse) Get(Q1:Browse,I#) BrowseReport('.Fld', Q1:Browse.Field1 ,1) BrowseReport('.Fld', Q1:Browse.Field2 ,2) BrowseReport('.Fld', Q1:Browse.Field3 ,3) BrowseReport('.Fld', Q1:Browse.Field4 ,4) BrowseReport('.Print') . BrowseReport('.Preview') BrowseReport('.Flush') BrowseReport('.Close') ----END OF EXAMPLE As can be seen, this was written to make my life as easy as possible. Above example is minimal, and there is a lot of refinement still possible. ie. I always ask for a printer, i build smallheader and footer and report name in - always the same, there is some other switches that can be in ini file, or in methods. To sidestep the INI issue, the following can be used, BrowseReport('.XPos',1 ,1) BrowseReport('.XPos',40,2) BrowseReport('.Head','Invoice No' ,1) BrowseReport('.Head','Recon Date' ,2) and I could then save these in an ini i guess, for later usage... I could use the same methods i used here, to build a queue, or write to a file I guess. Basically this feels object orientated to me... Above stuff was written a long time ago, I have been enhabcing the thing a lot since then. But the basic setup is still the same. I have been thinking of a DLL, and if there is interest I could make this availible - the problem is the preview, which needs to be shared and therefore not part of the dll. For More Info Contact me: Werner.Smit@Face.co.za End***Browse Report Explanation