Page 1 of 1

Total en los grupos

Posted: Tue Dec 02, 2008 5:40 pm
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

Posted: Tue Dec 02, 2008 5:53 pm
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

Re: Total en los grupos

Posted: Tue Dec 02, 2008 6:06 pm
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.

Posted: Tue Dec 02, 2008 6:13 pm
by cgomez
Muchas Gracias, lo he solucionado añadiendo esta linea al codigo que tenia.

oPrint:aColumns[6]:ntotal:=0.00


CARMEN GÓMEZ