Total en los grupos

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

Total en los grupos

Post by cgomez »

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
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post by Armando »

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
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Total en los grupos

Post by FranciscoA »

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.
cgomez
Posts: 16
Joined: Mon Feb 18, 2008 6:27 pm

Post by cgomez »

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

oPrint:aColumns[6]:ntotal:=0.00


CARMEN GÓMEZ
Post Reply