Page 1 of 2

report xbrowse method

Posted: Thu Mar 06, 2008 8:07 pm
by Silvio
How I can use the method report on xbrowse ?
I try with Action oApp:oGrid:Report( "Elenco Mezzi", .t., .t., )
but not run why ?

Posted: Fri Mar 07, 2008 4:59 am
by nageswaragunupudi
Report is working for me. It does not run only if it can not find printer. Please see these lines in the report method:

Code: Select all


   oPrn :=  PrintBegin( nil, ;            // document
                        .F., ;            // luser
                        lPreview, nil, ;  // xmodel
                        lModal, .F. )     // lselect

    if oPrn:hDC == 0
        return .f.                  // < ---  Your program may be returning here
    endif

Posted: Fri Mar 07, 2008 7:58 am
by Silvio
but if use obrw:report()
it must run ok or not ?

Posted: Fri Mar 07, 2008 8:17 am
by nageswaragunupudi
It runs, if printer is attached

Posted: Fri Mar 07, 2008 9:54 am
by Silvio
I try but it make error
see it please


DEFINE VMENUITEM OF oApp():oCont2 CAPTION "Stampa Elenco Automezzi" IMAGE "BB12" Action oApp:oGrid:Report( "Elenco Mezzi", .t., .t., )

Code: Select all

Application
===========
   Path and name: C:\work\prg\VDSWIN\VdsWin.Exe (32 bits)
   Size: 2,529,792 bytes
   Time from start: 0 hours 0 mins 6 secs 
   Error occurred at: 07/03/2008, 10:53:26
   Error description: Error BASE/1004  Class: 'NIL' has no exported method: EVAL
   Args:
     [   1] = U   

Stack Calls
===========
   [b]Called from:  => EVAL(0)
   Called from: RCOLUMN.PRG => TRCOLUMN:STABILIZE(0)
   Called from: REPORT.PRG => (b)TREPORT:STABILIZE(0)
   Called from:  => AEVAL(0)
   Called from: REPORT.PRG => TREPORT:STABILIZE(0)
   Called from: REPORT.PRG => TREPORT:ACTIVATE(0)
   Called from: XBROWSE.PRG => TXBROWSE:REPORT(0)
   Called from: ASS510.prg => (b)CAW510(272)[/b]
   Called from: VMenu.prg => TVMENU:EVALACTION(1700)
   Called from: VMenu.prg => TVMENU:LBUTTONUP(1398)
   Called from:  => TWINDOW:HANDLEEVENT(0)
   Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0)
   Called from: VMenu.prg => TVMENU:HANDLEEVENT(905)
   Called from: WINDOW.PRG => _FWH(0)
   Called from:  => WINRUN(0)
   Called from: WINDOW.PRG => TWINDOW:ACTIVATE(0)
   Called from: main.prg => TAPPLICATION:ACTIVATE(269)
   Called from: main.prg => MAIN(55)
[/b]

Posted: Wed May 07, 2008 5:02 am
by Otto
Hello Silvio,
I get the same error here.
Do you found a solution.

Regards,
Otto

Posted: Sat May 10, 2008 8:10 am
by Antonio Linares
Otto, Silvio,

Could you please provide a small PRG to reproduce the error ? thanks

Posted: Sat May 10, 2008 9:18 am
by Otto
Thank you Antonio.
I sent a sample to reproduce the error to NageswaraRao.
I am sure he resolves the problem. Let’s wait for his answer.
Regards,
Otto

Posted: Sat May 10, 2008 9:35 am
by Antonio Linares
Otto,

Would you mind to copy it here ? thanks

Posted: Mon May 12, 2008 9:15 am
by Silvio
Dear Antonio, Dear Otto,

I remove the method Report from xbrowse and I add with another Method
because he method of Nas have problems

IF you go here you can see my method
http://www.fivetechsoft.com/forums/view ... wse+report

I publish it before of NageswaraRao But Antonio Not pubblished it !

this run ok !!!

Code: Select all

METHOD Print( lPreview, lModal, cTitle ) CLASS TXBrowse 

   local oPrn, oRep, oCol 
   local aCols 
   local xValue 
   local cAlias 
   local nFor, nLines, nLine, nBookMark 

   DEFAULT lPreview := .t.,; 
           lModal   := .f.,; 
           cTitle   := ::oWnd:cCaption 

   If Empty( cTitle ) 
      cTitle := "No Title" 
   Endif 

   If lPreview 
      If lModal 
         PRINTER oPrn NAME cTitle PREVIEW MODAL 
      else 
         PRINTER oPrn NAME cTitle PREVIEW 
      Endif 
   else 
      PRINTER oPrn NAME cTitle 
   Endif 

   If oPrn:hDC == 0 
      return .f. 
   Endif 

   If !Empty( ::cAlias ) 
      cAlias := DbSelectArea( ::cAlias ) 
   Endif 

   REPORT oRep TITLE "*** " + cTitle + " ***", "" ; 
      HEADER DToC( Date() ) + "-" + Left(Time(), 5), "" RIGHT ; 
      FOOTER "#: " + Str( oRep:nPage, 3 ) CENTER; 
      TO DEVICE oPrn 

   aCols := ::GetVisibleCols() 

   for nFor := 1 to len( aCols ) 
      If !aCols[nFor]:lHide 
         oCol := oRep:AddColumn( TrColumn():New( { FInfo1(aCols, nFor) } ,,; 
                                { FInfo2(aCols, nFor) },,,,,,,,,, oRep ) ) 
         xValue := Eval(aCols[nFor]:bStrData) 
         nLines := MlCount(xValue, 250) 
         oCol:nPad := aCols[nFor]:nDataStrAlign + 1 
         If nLines > 1 
            oCol:aData    := Array(nLines) 
            oCol:aPicture := Afill(Array(nLines), "") 
            For nLine := 1 to nLines 
               oCol:aData[nLine] := FInfo3(aCols, nFor, nLine) 
            Next 
         Endif 
      Endif 
   next 

   ENDREPORT 

   nBookMark := Eval( ::bBookMark ) 

   If ::aArrayData != nil .and. len( ::aArrayData ) > 0 
      ::nArrayAt := 1 
      oRep:bSkip  := { || ::nArrayAt++ } 
      ACTIVATE REPORT oRep WHILE ::nArrayAt <= len( ::aArrayData ) ON END ::nArrayAt := 1 
   else 
      ACTIVATE REPORT oRep 
   Endif 

   Eval(::bBookMark, nBookMark ) 

   If !Empty( cAlias ) 
      DbSelectArea( cAlias ) 
   Endif 

return .t. 

Posted: Mon May 12, 2008 5:46 pm
by James Bott
Falconi,

Since xBrowse can now also handle database objects, it would be nice if your report method could handle them too.

I also suggest adding a gotop() before the report and saving and restoring the current recno().

James

Posted: Mon May 12, 2008 6:58 pm
by nageswaragunupudi
I would not have made this posting except for the reason that my name is mentioned above.

The present report method of xbrowse is working quite well for me. I find it quite versatile. It can handle arrays, rdd and also objects. That too objects of any kind. It can handle grouping and subgrouping comfortably.

If we select only some rows of the browse with shift-click / ctrl-click, it prints only those selected rows. Users are extremely happy with this feature.

Possible that in some cases there is the error that is reported which I hope Mr Antonio will fix it, if we provide him with a sample.

It is true Mr Otto mentioned to me about his problem, but he did not send his sample to me so far. Even if he sent I don't know if I could find a solution.

The print method published by Mr Silvio is verbatim reproduction the print method in the old xbrowse of Ozlib, including a bug in it. ( In the olden days I used to use a corrected version ). I changed to FWH xbrowse long back following my decision not to use 3rd party libraries. Glad FWH improved xbrowse a lot.

The report method of FWH is definitely far advanced with very useful features and the coding approach is totally data source neutral unlike the code posted as comparision. That means the report method will work the same way whatever is the data source.

Posted: Mon May 12, 2008 7:03 pm
by Antonio Linares
It is found that this error is occurring when for a column only bBmpData is assigned, leaving bEditValue and bStrData as NIL. This problem is fixed in FWH 8.05, by skipping such columns in the report method.

Temporary fix is to hide such columns before using report method.

Posted: Mon May 12, 2008 7:05 pm
by nageswaragunupudi
Thanks Mr Antonio. This explains why I never got this problem. All my browses have bEditValue assigned. Even when I use bitmaps it depeneded on the bEditValue.

Posted: Mon May 12, 2008 7:10 pm
by nageswaragunupudi
Mr James
James Bott wrote:Falconi,

Since xBrowse can now also handle database objects, it would be nice if your report method could handle them too.

I also suggest adding a gotop() before the report and saving and restoring the current recno().

James
XBrowse Report method does this gracefully.