Page 1 of 1
Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Posted: Wed Jul 24, 2024 4:40 am
by Armando
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
Re: Otra pregunta sobre TREPORT
Posted: Wed Jul 24, 2024 11:04 am
by Antonio Linares
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
Re: Otra pregunta sobre TREPORT
Posted: Wed Jul 24, 2024 5:04 pm
by Armando
Amigo Maestro Antonio:
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
Y MiFuncion() pretendo algo así:
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.)
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
Re: Otra pregunta sobre TREPORT
Posted: Thu Jul 25, 2024 6:41 am
by Antonio Linares
Modifica el código de esta forma:
ON ENDGROUP MiFuncion( oReporte, oGrp )
y asi recibes el grupo en tu función
Re: Otra pregunta sobre TREPORT
Posted: Wed Jul 31, 2024 7:14 pm
by FranciscoA
Armando, lo solucionaste?
Re: Otra pregunta sobre TREPORT
Posted: Wed Jul 31, 2024 7:19 pm
by Armando
Francisco:
No, no pude. por el momento lo dejé como antes.
Saludos
Re: Otra pregunta sobre TREPORT
Posted: Wed Jul 31, 2024 9:28 pm
by FranciscoA
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.
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
Saludos.
Re: Otra pregunta sobre TREPORT
Posted: Thu Aug 01, 2024 4:02 pm
by Armando
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
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)
Siempre sale "Totales por concepto:"
Por esto se hace imprescindible saber de qué grupo es el ENGROUP.
Muy agradecido
Re: Otra pregunta sobre TREPORT
Posted: Thu Aug 01, 2024 6:27 pm
by FranciscoA
Por esto se hace imprescindible saber de qué grupo es el ENGROUP.
Como dice Antonio Linares, para conocer el numero de grupo:
Re: Otra pregunta sobre TREPORT
Posted: Thu Aug 01, 2024 6:54 pm
by Armando
Francisco:
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)
Saludos
Re: Otra pregunta sobre TREPORT
Posted: Fri Aug 02, 2024 10:29 am
by cmsoft
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
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
Tendras que declarar como STATIC a oReporte y nFont creo
Espero que te sirva
Re: Otra pregunta sobre TREPORT
Posted: Fri Aug 02, 2024 7:22 pm
by Armando
César, Francisco y Antonio:
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)}
El footer los defini hasta tener el objeto oReporte creado:
Code: Select all | Expand
oReporte:bEndGroup := { |oGroup| MiFuncion(oReporte,oGroup) }
ENDIF
Y la función MiFuncion qudó así
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)
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
Re: Otra pregunta sobre TREPORT
Posted: Fri Aug 02, 2024 8:41 pm
by Armando
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
Re: Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Posted: Sat Aug 03, 2024 12:10 am
by FranciscoA
Excelente!
Re: Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo
Posted: Sat Aug 03, 2024 12:45 am
by sysctrl2
Paisano Armando te quedó de 100
cuando se grande quiero se como tu