UNA DE BROWSE

UNA DE BROWSE

Postby Marco Augusto » Sun Feb 12, 2006 10:21 pm

Como puedo hacer para "convertir" un browse de detalle a otro que se muestre en forma de resumen

Por ejemplo si tengo el siguiente browse:

cliente fecha factura importe
==== ==== ===== ======
CIA AAA 10/O5 000100 2,500
CIA AAA 12/05 000108 3,500
CIA AAA 14/05 000110 8,000
CIA VVV 05/05 000099 12,000
CIA VVV 10/05 000105 14,000


quisiera pasar a otro browse (resumen por cliente con totales):

cliente fecha factura importe
==== ==== ===== ======
CIA AAA ------ --------- 14,500
CIA VVV ------ --------- 26,500


Si alguien ya se ha enfrentado a algo similar
mucho les agradecere sus sugerencias

Gracias
Marco Augusto Rodriguez Manzo
FWH January 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport

PERZO SOFT
Sistemas Personalizados
User avatar
Marco Augusto
 
Posts: 144
Joined: Wed Oct 12, 2005 1:03 pm
Location: Cuernacava, Morelos Mexico

Postby DanielPuente » Mon Feb 13, 2006 2:10 am

Marco:

Suponiendo que tenes un dialogo donde mostras el browse completo, pones un boton que diga ver totales o algo asi y ahi abris otro dialogo, haces el calculo de totales y en ese dialogo haces el browse, que puede estar hecho sobre una matriz o sobre una dbf transitoria donde grabas los totales antes de activar el dialogo:

El siguiente ejemplo hace eso sobre un browse de autorizaciones de practicas medicas y saca los totales x practica en un browse sobre una matriz (todo con wbrowse de hernan), parte pertinente para que no se haga tan largo:

Code: Select all  Expand view  RUN
FUNCTION Valoriza()
LOCAL  aNcampos:={ {|| PADL(AUTORIZA->NUMERO,5,0)},;
                                {|| " "+BUS_DES("PRACTICA",1,AUTORIZA->PRACTICA,"NOMBRE") },;
                                  {|| " "+AUTORIZA->PRESTADOR } ,;
                                  {|| TRANS(AUTORIZA->APAGAR,"@E 99,999.99")+" " } ,;
                                  {|| " "+AUTORIZA->TIPOPRES },;
                                  {|| " "+AUTORIZA->RUBRO },;
                                  {|| AUTORIZA->APEYNOMB },;
                                  {|| AUTORIZA->NROBENEF } ,;
                               {|| DTOC(AUTORIZA->FECHA) },;
                                  {|| AUTORIZA->ESTADO },;
                                {|| " "+AUTORIZA->PARTIDO },;
                                  {|| " "+AUTORIZA->RESPUESTA } ,;
                                  {|| DTOC(AUTORIZA->FECHAEMAIL) } ,;
                                  {|| AUTORIZA->HORAEMAIL },;
                                  {|| " "+BUS_DES("SOLICITA",1,AUTORIZA->SOLICITA,"NOMBRE") },;
                                  {|| AUTORIZA->DIREMAIL }},;

  REDEFINE SENSITIVE SAY PROMPT "» Tot. x Práctica «" ID 126 ;
             OF oFld:aDialogs[1] ;
               FONT oFont4 ;
            COLOR CLR_BLUE COLOROVER CLR_RED       ;
            ON MOUSEOVER SndPlaySound("Select.Wav") ;
            RIGHT ACTION TotPractica(wAlias,oBrw)

Static Function TotPractica(cAlias,oBrw)

Local oDlg, aBrw, RET:=0, nItem:=1
Local X:=390,Y:=200,ANCHO:=454,ALTO:=140,cTitulo:=oemtoansi("Totales por Pr ctica")
Local nReg
Local aPractica:={},cCodPra:=(cAlias)->PRACTICA,largo:=0,I:=1,cTipo,cRecno:=(cAlias)->(RECNO())
Local aOrdenado:={}

DEFAULT    cTitulo:="Seleccione..."

   (cAlias)->(DBGOTOP())

   DO WHILE ! (cAlias)->(EOF())

             IF LEN(aPractica)==0
                  aadd(aPractica,{BUS_DES("PRACTICA",1,(cAlias)->PRACTICA,"NOMBRE"),1,(cAlias)->APAGAR})
             ELSE
                 cTipo:=BUS_DES("PRACTICA",1,(cAlias)->PRACTICA,"NOMBRE")
                   nReg:=ASCAN( aPractica, { |aField| aField[1]==cTipo } )
                   IF nReg == 0
                      aadd(aPractica,{BUS_DES("PRACTICA",1,(cAlias)->PRACTICA,"NOMBRE"),1,(cAlias)->APAGAR})
                   ELSE
                      aPractica[nReg,2]+=1
                      aPractica[nReg,3]+=(cAlias)->APAGAR
                   ENDIF
             ENDIF
       (cAlias)->(DBSKIP())
   ENDDO

   (cAlias)->(DBGOTO(cRecno))
   oBrw:Refresh()

    FOR I:=1 TO LEN(aPractica)
       aPractica[i,2]:=TRANS(aPractica[i,2],"@E 9,999")
       aPractica[i,3]:=TRANS(aPractica[i,3],"@E 999,999.99")+"  "
    NEXT

    IF LEN(aPractica)==0
         Aadd(aPractica,{SPAC(30),SPAC(9),SPAC(10)})
    ENDIF

    DEFINE DIALOG oDlg RESOURCE "MCHOICE" TITLE cTitulo
   oDlg:lHelpIcon:=.f.

    aOrdenado:=ASORT(aPractica,,,{|x,y| x[1] < y[1]})

   REDEFINE LISTBOX aBrw FIELDS aOrdenado[NITEM,1],aOrdenado[NITEM,2],aOrdenado[NITEM,3] ;
    HEADER oemtoansi("Descripci¢n")," Cant."," Importe ";
    id 999 of odlg;
   FIELDSIZES 269,59,96 ON DBLCLICK (Ret:=nItem,oDlg:End()) //COLORS CLR_BLUE

    aBrw:cAlias    = "Array"                // Just put something
    aBrw:bLogicLen = { || Len( aOrdenado ) }
    aBrw:SetArray(aOrdenado)
   aBrw:bGoTop    = { || nItem := 1 }
   aBrw:bGoBottom = { || nItem := Eval( aBrw:bLogicLen ) }
    aBrw:bGoBottom = { || nItem := Eval( aBrw:bLogicLen ) }
   aBrw:bSkip     = { | nWant, nOld | nOld := nItem, nItem += nWant,;
                        nItem := Max( 1, Min( nItem, Eval( aBrw:bLogicLen ) ) ),;
                        nItem - nOld }
   aBrw:bKeyChar  = { | nK | if( nK==VK_RETURN,(Ret:=nItem,oDlg:End()),) } // Controlling keystrokes
    aBrw:lcellstyle := .t.
    aBrw:nlinestyle := 2
    aBrw:aJustify:={0,2,1}
    aBrw:nclrpane:= {|| iif( (nItem/2)-INT(nItem/2) > 0, CLR_LBLUE, CLR_LGRAY) }
    aBrw:lAdjLastcol:=.F.
    aBrw:GoTop()
   oDlg:SetControl(aBrw)
    ALTO:=50+16.0*LEN(aOrdenado)
    IF(ALTO > 550,ALTO:=550,)

    IF LEN(aOrdenado) < 15
         ACTIVATE DIALOG oDlg ON INIT (oDlg:Move(X,Y),oDlg:setsize(ANCHO,ALTO))
    ELSE
         ACTIVATE DIALOG oDlg ON INIT (oDlg:Move(X,Y),oDlg:setsize(ANCHO,ALTO),oDlg:Center())
    ENDIF

Return nil



Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests