Como podria hacer esto con xbrowse ?

Como podria hacer esto con xbrowse ?

Postby JoseLuis » Fri Jan 28, 2011 6:13 pm

Hola amigos

Tengo dos DBF'S indexadas por el campo código, una es de clientes, y otra de sus almacenes, (Tienen los mismos campos), y me gustaría que en un xbrowse, al hacer doble click sobre un código, se abra un tree, y me muestre los almacenes de éste cliente.

He hecho pruebas con el ejemplo xbrwtree, pero me lío cuando son dos bases de datos

Code: Select all  Expand view  RUN
Static function rutasc(oDlg1,oDlg,recibe,aAlias)
local n,conduc:=space(5)
local titulo:="LISTADO DE RUTAS DE CLIENTES"
local oBrw
   if Publicas:abierta=1
      msginfo('Tienes Una ventana Abierta','Atencion')
      return nil
   endif
  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Almacen",aAlias[23],.T.)
  (aAlias[23])->(OrdSetFocus("Codigo"))
  (aAlias[23])->( dbGotop() )
  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\PROVE",aAlias[21],.T.)
  (aAlias[21])->(OrdSetFocus("Codigo"))
  (aAlias[21])->( dbGotop() )
   SetParent( oDlg1:hWnd, oDlg:hWnd )  
 
   @ 0,0 XBROWSE oBrw ;
     COLUMNS 'Codigo','Nombre','Calle', 'Pobla','Rutar' ;
      SIZE 260,320 PIXEL ;
      COLSIZES ,250,225,200,25 ;      
      JUSTIFY AL_CENTER ;
      OF oDlg1 Alias aAlias[21] FOOTERS AUTOCOLS LINES CELL
      oBrw:aCols[5]:nEditType := 1
      oBrw:bClrSelFocus    := { || { CLR_BLUE, nRGB( 230, 255, 230 ) } }
      oBrw:lColDividerComplete := .f.
      oBrw:nTop    := oDlg1:nTop()
      oBrw:lKineticBrw         := .f.
      oBrw:nBottom := oDlg1:nheight()
      oBrw:nRight  := oDlg1:nWidth()
      oBrw:nStretchCol := STRETCHCOL_LAST
      oBrw:nMarqueeStyle = MARQSTYLE_HIGHLROW
      oBrw:CreateFromCode()
      barra1(oDlg1,oBrw,titulo)
      oBrw:Setfocus()
     
return nil  
 


Esto me muestra en un browse los datos de Prove

Alguna ayuda?
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Como podria hacer esto con xbrowse ?

Postby nageswaragunupudi » Sat Jan 29, 2011 6:19 am

This is a sample using STATES.DBF related to CUSTOMER.DBF in the \fwh\samples folder. Please compile and test this program in the \fwh\samples folder.
Code: Select all  Expand view  RUN
/*
*
*  XbTree3.Prg
*  24-12-2010 08:39 PM
*
*/


#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"

//----------------------------------------------------------------------------//

#xtranslate bmp( <c> ) => "c:\fwh\bitmaps\16x16\" + <c> + ".bmp"

REQUEST DBFCDX

static nTot    := 0
//----------------------------------------------------------------------------//

function Main()

   OpenData()
   TreeBrowse( MakeTree() )

return (0)

//----------------------------------------------------------------------------//

init procedure PrgInit

   SET DATE ITALIAN
   SET CENTURY ON
   SET TIME FORMAT TO "
HH:MM:SS"
   SET EPOCH TO YEAR(DATE())-50

   SET DELETED ON
   SET EXCLUSIVE OFF

   RDDSETDEFAULT( "
DBFCDX" )

   XbrNumFormat( 'E', .t. )
   SetKinetic( .f. )
   SetGetColorFocus()

return

//----------------------------------------------------------------------------//

static function TreeBrowse( oTree )

   local oDlg, oBrw, oFont
   local aColors  := { ;
                        { CLR_BLACK,   RGB(255,255,200)  }, ;
                        { CLR_BLACK,   CLR_WHITE         }  }

   DEFINE FONT oFont NAME "
TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 800,500 PIXEL ;
      TITLE "
Xbrowse Tree" FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      CELL LINES NOBORDER FOOTERS

   oBrw:SetTree( oTree, { bmp( "
open" ), bmp( "folder" ), bmp( "source" ) } )

   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 1 ] HEADER 'FirstName' SIZE 100
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 2 ] HEADER 'LastName'  SIZE 100
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 3 ] HEADER 'Age'    PICTURE '@Z 999'
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 4 ] HEADER 'Salary' PICTURE '@Z 99,999,999.99'


   WITH OBJECT oBrw
      :bClrStd          := { || aColors[ oBrw:oTreeItem:nLevel ] }
      :bClrSel          := { || { CLR_BLACK, CLR_HGRAY } }
      :Item:cHeader     := "
State/City"
      :Salary:nTotal    := nTot
      :nStretchCol      := 1
   END

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus(), .f. )
   RELEASE FONT oFont

return nil

//----------------------------------------------------------------------------//

static function MakeTree()

   local aTot
   local oTree

   STATES->( DbGoTop() )

   TREE oTree
   do while !STATES->( eof() )
      TREEITEM STATES->NAME CARGO ( aTot := { '', '', 0, 0 } )

      if STATES->CODE == CUST->STATE
         TREE
         do while !CUST->( eof() )
            TREEITEM CUST->CITY CARGO { CUST->FIRST, CUST->LAST, CUST->AGE, CUST->SALARY }
            aTot[ 4 ]   += CUST->SALARY
            CUST->( DbSkip( 1 ) )
         enddo
         nTot     += aTot[ 4 ]
         ENDTREE
      endif

      STATES->( DbSkip( 1 ) )
   enddo
   ENDTREE

   STATES->( DbGoTop() )

return oTree

//----------------------------------------------------------------------------//

static function OpenData()

   field CODE

   USE STATES NEW SHARED

   USE CUSTOMER NEW ALIAS CUST SHARED
   SET ORDER TO TAG STATE
   GO TOP

   SELECT STATES
   SET RELATION TO CODE INTO CUST SCOPED
   GO TOP

return nil

//----------------------------------------------------------------------------//


Screenshot:
Image

In the above sample, the entire data is read into the TreeItem's cargo variable in the memory.

Method: 2
-------------
In the next sample, data is NOT read into memory but the DBF is navigated to show the data.
Code: Select all  Expand view  RUN
/*
*
*  XbTree4.Prg
*  G.N.Rao
*
*/


#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"

//----------------------------------------------------------------------------//

REQUEST DBFCDX

#xtranslate bmp( <c> ) => "c:\fwh\bitmaps\16x16\" + <c> + ".bmp"

//----------------------------------------------------------------------------//

function Main()

   OpenData()
   TreeBrowse( MakeTree() )

return (0)

//----------------------------------------------------------------------------//

init procedure PrgInit

   SET DATE ITALIAN
   SET CENTURY ON
   SET TIME FORMAT TO "
HH:MM:SS"
   SET EPOCH TO YEAR(DATE())-50

   SET DELETED ON
   SET EXCLUSIVE OFF

   RDDSETDEFAULT( "
DBFCDX" )

   XbrNumFormat( 'E', .t. )
   SetKinetic( .f. )
   SetGetColorFocus()

return

//----------------------------------------------------------------------------//

static function TreeBrowse( oTree )

   local oDlg, oBrw, oFont
   local aColors  := { ;
                        { CLR_BLACK,   RGB(255,255,200)  }, ;
                        { CLR_BLACK,   CLR_WHITE         }  }

   DEFINE FONT oFont NAME "
TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 800,500 PIXEL ;
      TITLE "
Xbrowse Tree" FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      COLUMNS 'First', 'Last', 'Age', 'Salary' ;
      ALIAS 'CUST' ;
      CELL LINES NOBORDER FOOTERS

   oBrw:SetTree( oTree, { bmp( "
open" ), bmp( "folder" ), bmp( "source" ) }, ;
         { |oItem| CUST->( DbGoTo( oItem:Cargo ) ) } )



   WITH OBJECT oBrw
      :bClrStd          := { || aColors[ oBrw:oTreeItem:nLevel ] }
      :bClrSel          := { || { CLR_BLACK, CLR_HGRAY } }
      :Item:cHeader     := "
State/City"
      :Age:cEditPicture := "
@Z 999"
      :Salary:cEditPicture := "
@Z 999,999,999.99"
      :nStretchCol      := 1
   END

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus(), .f. )
   RELEASE FONT oFont

return nil

//----------------------------------------------------------------------------//

static function MakeTree()

   local oTree

   STATES->( DbGoTop() )

   TREE oTree
   do while !STATES->( eof() )
      TREEITEM STATES->NAME CARGO 0

      if STATES->CODE == CUST->STATE
         TREE
         do while !CUST->( eof() )
            TREEITEM CUST->CITY CARGO CUST->( RecNo() )
            CUST->( DbSkip( 1 ) )
         enddo
         ENDTREE
      endif

      STATES->( DbSkip( 1 ) )
   enddo
   ENDTREE

   STATES->( DbGoTop() )

return oTree

//----------------------------------------------------------------------------//

static function OpenData()

   field CODE

   USE STATES NEW SHARED

   USE CUSTOMER NEW ALIAS CUST SHARED
   SET ORDER TO TAG STATE
   GO TOP

   SELECT STATES
   SET RELATION TO CODE INTO CUST SCOPED
   GO TOP

return nil

//----------------------------------------------------------------------------//
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10656
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Como podria hacer esto con xbrowse ?

Postby JoseLuis » Sat Jan 29, 2011 11:04 am

!Es lo que buscaba!

Me viene perfecto

Gracias
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 36 guests