Total en los grupos

Total en los grupos

Postby cgomez » Tue Dec 02, 2008 5:40 pm

Buenas Tardes a todos, tengo un problema con los totales de los grupos en el Report, yo hago un salto de página por grupo, el total de la primera pagina me sale bien, pero la de las siguientes me sale acumulado, es decir, si el total de la primera pagina es 12 y de la segunda es 30 el total de la segunda me sale 42 la suma de la primera y la segunda y asi consecutivamente. El código para el salto de pagina es el siguiente:

static function Mirasipagina(oPrint,o)
if o:PaginaPor $ "Ss"
oPrint:EndPage()
oPrint:nGroupLine:=RPT_NOLINE
oPrint:lPageTotal:=.t.
end if
return


GRACIAS
cgomez
 
Posts: 16
Joined: Mon Feb 18, 2008 6:27 pm

Postby Armando » Tue Dec 02, 2008 5:53 pm

CGOMEZ:

Por el poquito código que muestras deduzco que estas haciendo los cortes de grupo "a pie" y por lo tanto tú debes controlar los acumulados.

Por que no dejas que la TReport haga el trabajo utilizando la facilidad de hacer grupos que te da la clase TReport ?.

Si persistes en hacer los cortes "a pie" debes poner a ceros la variable donde guardas el acumulado, suponiendo que la variable se llama nTotAcu debes agregar este código:

nTotAcu := 0.00

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Total en los grupos

Postby FranciscoA » Tue Dec 02, 2008 6:06 pm

cgomez wrote:Buenas Tardes a todos, tengo un problema con los totales de los grupos en el Report, yo hago un salto de página por grupo, el total de la primera pagina me sale bien, pero la de las siguientes me sale acumulado, es decir, si el total de la primera pagina es 12 y de la segunda es 30 el total de la segunda me sale 42 la suma de la primera y la segunda y asi consecutivamente. El código para el salto de pagina es el siguiente:

static function Mirasipagina(oPrint,o)
if o:PaginaPor $ "Ss"
oPrint:EndPage()
oPrint:nGroupLine:=RPT_NOLINE
oPrint:lPageTotal:=.t.
end if
return


GRACIAS



Aqui tienes un ejemplo completo. Ajustalo a tus necesidades.

//-------------------------------------------------------------------------
FUNCTION ImpMaeRep(dfecha,opcion)
LOCAL oFont1, oFont2, oFont3, oPen1, oPen2, oReport, oPrn
local nTotAcum:=0

Maeprodt->(dbgotop())
While Maeprodt->(!eof())
nTotAcum+=Maeprodt->Costo_tot
MaeProdt->(dbskip())
Enddo
SysRefresh()

DEFINE FONT oFont1 NAME "ARIAL" SIZE 0,-09
DEFINE FONT oFont2 NAME "ARIAL" SIZE 0,-10
DEFINE FONT oFont3 NAME "ARIAL" SIZE 0,-10 //BOLD

DEFINE PEN oPen1 WIDTH 1
DEFINE PEN oPen2 WIDTH 1

DBGOTOP()

PrnSetSize( 2100, 2790 )
PrinterSetup(oPrn)


REPORT oReport;
TITLE EMPRESA, MEMBRE +" - "+SUCURSAL,;
"REPORTE DE INVENTARIO"+FECHADOR(dFecha),;
opcion,;
"" ;
FONT oFont1,;
oFont2,;
oFont3 ;
PEN oPen1,;
oPen2 ;
HEADER OemtoAnsi("Pag: ")+str(oReport:nPage,3) RIGHT ;
FOOTER " ", " ", " ", " ";
PREVIEW

if UPPER(opcion)="ORDENADO POR MODELOS"
GROUP ON MAEPRODT->MODELO FOOTER "TOTAL MODELO"
endif


COLUMN TITLE "No. DE PARTE";
DATA MAEPRODT->CODIGO;
SIZE 16;
TOTAL;
GRID 2
COLUMN TITLE " DESCRIPCION";
DATA SUBSTR(MAEPRODT->DESCRIP,1,35);
SIZE 34;
GRID 2
COLUMN TITLE "MODELO ";
DATA MAEPRODT->MODELO;
SIZE 10;
GRID 2
COLUMN TITLE "EXISTENCIA" ;
DATA MAEPRODT->EXISTENCIA;
PICTURE "@Z 99,999.99";
SIZE 9;
GRID 2
COLUMN TITLE "COSTO UNIT";
DATA MAEPRODT->COSTOU;
PICTURE "@Z 999,999.9999";
SIZE 9;
GRID 2
COLUMN TITLE "COSTO TOTAL";
DATA MAEPRODT->COSTO_TOT;
PICTURE "@Z 99,999,999.99";
SIZE 10;
TOTAL;
GRID 2

END REPORT

IF oReport:lCreated
//Lineas Bold o No
oReport:oTitle:aFont[1] := {|| 3 }
oReport:oTitle:aFont[2] := {|| 3 }
oReport:oTitle:aFont[3] := {|| 3 }
oReport:oTitle:aFont[4] := {|| 3 }

oReport:nTitleUpLine := RPT_SINGLELINE
oReport:nTitleDnLine := RPT_SINGLELINE
oReport:nTotalLine := RPT_SINGLELINE


//Solo imprimir el total de Pagina actual, no el acumulado
oReport:bStartPag:={|| oReport:aColumns[6]:ntotal:=0 }

//Imprimir el gran total en la ultima pagina
oReport:bPostEnd:={|| oReport:Say(1,"VALOR TOTAL DE INVENTARIO",2), oReport:Say(6,transform(nTotAcum,"999,999,999.99"),2) }

oReport:cPageTotal := "TOTAL DE ESTA PAGINA..."
oReport:cGrandTotal := "TOTAL DE ESTA PAGINA..."

ENDIF

ACTIVATE REPORT oReport ;
ON STARTGROUP oReport:NewLine();
ON STARTPAGE StartPag(oReport)

oFont1:End()
oFont2:End()
oFont3:End()
oPen1:End()
oPen2:End()

RETURN NIL

Espero te sirva de algo.
Saludos.

Francisco Alegría P.
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby cgomez » Tue Dec 02, 2008 6:13 pm

Muchas Gracias, lo he solucionado añadiendo esta linea al codigo que tenia.

oPrint:aColumns[6]:ntotal:=0.00


CARMEN GÓMEZ
cgomez
 
Posts: 16
Joined: Mon Feb 18, 2008 6:27 pm


Return to FiveWin para Harbour/xHarbour

Who is online

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