Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Amigos:
En un reporte, hecho con la clase TREPORT, tengo definidos varios grupos, la pregunta
En el método ON ENDGROUP ¿Cómo puedo identificar a que grupo se refiere?, ¿al primero?,
¿al segundo?, etc.
He intentado con ON ENDGROUP(1) pero me tira error.
Saludos
En un reporte, hecho con la clase TREPORT, tengo definidos varios grupos, la pregunta
En el método ON ENDGROUP ¿Cómo puedo identificar a que grupo se refiere?, ¿al primero?,
¿al segundo?, etc.
He intentado con ON ENDGROUP(1) pero me tira error.
Saludos
Last edited by Armando on Fri Aug 02, 2024 8:41 pm, edited 1 time in total.
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- Antonio Linares
- Site Admin
- Posts: 42256
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Otra pregunta sobre TREPORT
Estimado Armando,
La claúsula ON ENDGROUP <uEndGroup> se preprocesa como {|oGrp|<uEndGroup>} por lo que el parámetro oGrp es el objeto group usado
Si indicas aqui el código que quieres usar desde el ON ENDGROUP te indicamos como hacer referencia a oGrp
La claúsula ON ENDGROUP <uEndGroup> se preprocesa como {|oGrp|<uEndGroup>} por lo que el parámetro oGrp es el objeto group usado
Si indicas aqui el código que quieres usar desde el ON ENDGROUP te indicamos como hacer referencia a oGrp
Re: Otra pregunta sobre TREPORT
Amigo Maestro Antonio:
Muchas gracias por tu interés en el tema,
En mi reporte tengo definidos dos GROUP:
Y lo que pretendo es algo así:
Y MiFuncion() pretendo algo así:
El texto a imprimir va a depender desde que GROUP llego a MiFuncion()
Revisé la clase TREPORT y veo que el método ENDGROUP puede llevar un parámetro ENDGROUP(nGpo)
pero al intentarlo me tira error.
Intento encontrar solución a mi POST anterior del FOOTER
Saludos al foro
Muchas gracias por tu interés en el tema,
En mi reporte tengo definidos dos GROUP:
Code: Select all | Expand
GROUP gPry ON oRsDet:Fields("HDR_PRO"):Value ;
FOOTER Space(63) + "Totales por proyecto:" FONT 2
gPry:bHeader := {|| "* Proyecto: " + oRsDet:Fields("HDR_PRO"):Value + " " + AllTrim(oRsDet:Fields("PRO_DES"):Value)}
GROUP gCpt ON Str(oRsDet:Fields("DET_NI1"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI2"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI3"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI4"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI5"):Value,02,0) ;
FOOTER Space(62) + "Totales por concepto:" FONT 2
gCpt:bHeader := {|| "* Concepto: " + AllTrim(Str(oRsDet:Fields("DET_NI1"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI2"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI3"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI4"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI5"):Value,02,0)) + " " +;
AllTrim(oRsDet:Fields("CON_DES"):Value)}
Y lo que pretendo es algo así:
Code: Select all | Expand
ACTIVATE REPORT oReporte ;
ON STARTPAGE Alinea(oReporte,1,2);
ON ENDGROUP MiFuncion(oReporte); <======= Esto
WHILE nLinea <= nHasta
Code: Select all | Expand
STATIC FUNCTION MiFuncion(oReporte)
oReporte:SAY(1,"Totales por proyecto:",2,RPT_RIGHT)
oReporte:SAY(1,"Totales por concepto",2,RPT_RIGHT)
RETURN(.T.)
Revisé la clase TREPORT y veo que el método ENDGROUP puede llevar un parámetro ENDGROUP(nGpo)
pero al intentarlo me tira error.
Intento encontrar solución a mi POST anterior del FOOTER
Saludos al foro
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- Antonio Linares
- Site Admin
- Posts: 42256
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Otra pregunta sobre TREPORT
Modifica el código de esta forma:
ON ENDGROUP MiFuncion( oReporte, oGrp )
y asi recibes el grupo en tu función
ON ENDGROUP MiFuncion( oReporte, oGrp )
y asi recibes el grupo en tu función
- FranciscoA
- Posts: 2159
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Otra pregunta sobre TREPORT
Armando, lo solucionaste?
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Otra pregunta sobre TREPORT
Francisco:
No, no pude. por el momento lo dejé como antes.
Saludos
No, no pude. por el momento lo dejé como antes.
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- FranciscoA
- Posts: 2159
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Otra pregunta sobre TREPORT
Armando.
Intenta adaptando el siguiente codigo. Con este puedes poner el footer de grupo en cualquiera de las columnas del oReport.
Es para un grupo nada mas.
Saludos.
Intenta adaptando el siguiente codigo. Con este puedes poner el footer de grupo en cualquiera de las columnas del oReport.
Es para un grupo nada mas.
Code: Select all | Expand
GROUP ON FIELD->ESTADO ;
HEADER if(Empty(oReport:aGroups[1]:cValue),"NO CONECTADOS", "CONECTADOS") ;
FOOTER GroupFooter(oReport,2) ;
FONT 2
//-----------------------------------------------//
Function GroupFooter(oReport,nFont)
local cFooter := if(Empty(oReport:aGroups[1]:cValue), "TOTAL NO CONECTADOS","TOTAL CONECTADOS")
oReport:bEndGroup:={|| oReport:Say(5,cFooter,nFont,RPT_LEFT,oReport:nRow +(oReport:nStdLineHeight()/2) ) }
Return nil
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Otra pregunta sobre TREPORT
Francisco:
Excelente solución, funcionó de 100 cuando es un grupo pero en mi caso tengo dos y hasta tres grupos.
Se repite el texto del primer grupo.
Este es mi código
Siempre sale "Totales por concepto:"
Por esto se hace imprescindible saber de qué grupo es el ENGROUP.
Muy agradecido
Excelente solución, funcionó de 100 cuando es un grupo pero en mi caso tengo dos y hasta tres grupos.
Se repite el texto del primer grupo.
Este es mi código
Code: Select all | Expand
GROUP gPry ON oRsDet:Fields("HDR_PRO"):Value ;
FOOTER FootPry(oReporte,2) FONT 2
gPry:bHeader := {|| "Proyecto: " + oRsDet:Fields("HDR_PRO"):Value + " " + AllTrim(oRsDet:Fields("PRO_DES"):Value)}
GROUP gCpt ON Str(oRsDet:Fields("DET_NI1"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI2"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI3"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI4"):Value,02,0) +;
Str(oRsDet:Fields("DET_NI5"):Value,02,0) ;
FOOTER FootCpt(oReporte,2) FONT 2
gCpt:bHeader := {|| "Concepto: " + AllTrim(Str(oRsDet:Fields("DET_NI1"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI2"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI3"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI4"):Value,02,0)) + "-" +;
AllTrim(Str(oRsDet:Fields("DET_NI5"):Value,02,0)) + " " +;
AllTrim(oRsDet:Fields("CON_DES"):Value)}
...
...
STATIC FUNCTION FootCpt(oReporte,nFont)
oReporte:bEndGroup := {|| oReporte:Say( 02,"Totales por concepto:",nFont,RPT_RIGHT,oReporte:nRow + (oReporte:nStdLineHeight() / 2) ) }
RETURN(Nil)
STATIC FUNCTION FootPry(oReporte,nFont)
oReporte:bEndGroup := {|| oReporte:Say( 02,"Totales por proyecto:",nFont,RPT_RIGHT,oReporte:nRow + (oReporte:nStdLineHeight() / 2) ) }
RETURN(Nil)
Por esto se hace imprescindible saber de qué grupo es el ENGROUP.
Muy agradecido
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- FranciscoA
- Posts: 2159
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Otra pregunta sobre TREPORT
Como dice Antonio Linares, para conocer el numero de grupo:Por esto se hace imprescindible saber de qué grupo es el ENGROUP.
Code: Select all | Expand
Function MyFunction(oReport,oGpo)
oGpo:nOrder ?
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Otra pregunta sobre TREPORT
Francisco:
Te agradezco la paciencia pero
Saludos
Te agradezco la paciencia pero
Code: Select all | Expand
ACTIVATE REPORT oReporte ;
ON STARTPAGE Alinea(oReporte,1,2);
ON ENDGROUP MyFunction(oReporte,oGpo); <==== Aquí me reclama , no existe la variable oGpo
WHILE nLinea <= nHasta
RETURN(.T.)
STATIC FUNCTION MyFunction(oReporte,oGpo)
msginfo(oGpo:nOrder,"No. de Grupo")
RETURN(Nil)
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Otra pregunta sobre TREPORT
Hola Armando:
Puedes probar analizando el orden del grupo que esta terminando
En tu caso gPry tendrá el orden 1 y gCpt tendrá el orden 2
Entonces puedes hacer
Tendras que declarar como STATIC a oReporte y nFont creo
Espero que te sirva
Puedes probar analizando el orden del grupo que esta terminando
En tu caso gPry tendrá el orden 1 y gCpt tendrá el orden 2
Entonces puedes hacer
Code: Select all | Expand
oReport:bEndGroup := {|oGroup| MiFuncion(oGroup) }
ACTIVATE REPORT oReport
...
//Funcion para cuando termina un grupo
STATIC Function MiFuncion(oGroup)
if oGroup:nOrder = 1
oReporte:Say( 02,"Totales por proyecto:",nFont,RPT_RIGHT,oReporte:nRow + (oReporte:nStdLineHeight() / 2) )
ENDIF
if oGroup:nOrder = 2
oReporte:Say( 02,"Totales por concepto:",nFont,RPT_RIGHT,oReporte:nRow + (oReporte:nStdLineHeight() / 2) )
ENDIF
IF oGroup:nOrden = 3
// Etc.
ENDIF
RETURN NIL
Espero que te sirva
Re: Otra pregunta sobre TREPORT
César, Francisco y Antonio:
Casi casi el éxito, el código quedó así:
Al definir los grupos no definí el FOOTER
El footer los defini hasta tener el objeto oReporte creado:
Y la función MiFuncion qudó así
Por comodidad cambie los IFs por un CASE, pero con los IFs tambien funciona.
El resultado es casí 100 excepto que , al no definir el FOOTER al momento de definir el GROUP, no pinta
los importe de los totales, entonces definí un FOOTER "" etc ... y ya pinta los totales pero pone el texto Total,,,
al inicio del renglón de totales.
Aquí el resultado
Saludos
Casi casi el éxito, el código quedó así:
Al definir los grupos no definí el FOOTER
Code: Select all | Expand
GROUP gPry ON oRsDet:Fields("HDR_PRO"):Value FONT 2
gPry:bHeader := {|| "Proyecto: " + oRsDet:Fields("HDR_PRO"):Value + " " + AllTrim(oRsDet:Fields("PRO_DES"):Value)}
Code: Select all | Expand
oReporte:bEndGroup := { |oGroup| MiFuncion(oReporte,oGroup) }
ENDIF
Code: Select all | Expand
STATIC FUNCTION MiFuncion(oReporte,oGroup)
DO CASE
CASE oGroup:nOrder == 1
oReporte:Say( 03,"Totales por proyecto:",2,RPT_RIGHT,oReporte:nRow + (oReporte:nStdLineHeight() / 2) )
CASE oGroup:nOrder == 2
oReporte:Say( 03,"Totales por concepto:",2,RPT_RIGHT,oReporte:nRow + (oReporte:nStdLineHeight() / 2) )
ENDCASE
RETURN(Nil)
El resultado es casí 100 excepto que , al no definir el FOOTER al momento de definir el GROUP, no pinta
los importe de los totales, entonces definí un FOOTER "" etc ... y ya pinta los totales pero pone el texto Total,,,
al inicio del renglón de totales.
Aquí el resultado
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Otra pregunta sobre TREPORT
Amigos:
Ya quedó solucionado, bastó con definir un FOOTER " " (Un espacio en blanco) y funciona de 100.
Muy agradecido, muy agradecido y muy agradecido
Saludos
Ya quedó solucionado, bastó con definir un FOOTER " " (Un espacio en blanco) y funciona de 100.
Muy agradecido, muy agradecido y muy agradecido
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- FranciscoA
- Posts: 2159
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Excelente!
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Re: Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Paisano Armando te quedó de 100
cuando se grande quiero se como tu
cuando se grande quiero se como tu
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "