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
UNA DE BROWSE
-
- Posts: 122
- Joined: Wed Oct 12, 2005 1:03 pm
- Location: Cuernacava, Morelos Mexico
UNA DE BROWSE
Marco Augusto Rodriguez Manzo
fwh 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport
PERZO SOFT
Sistemas Personalizados
fwh 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport
PERZO SOFT
Sistemas Personalizados
-
- Posts: 108
- Joined: Sun Oct 09, 2005 6:12 pm
- Location: Mar del Plata - Argentina
- Contact:
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:
Saludos,
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
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