Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo

Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo

Postby Armando » Wed Jul 24, 2024 4:40 am

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

Re: Otra pregunta sobre TREPORT

Postby Antonio Linares » Wed Jul 24, 2024 11:04 am

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42113
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Otra pregunta sobre TREPORT

Postby Armando » Wed Jul 24, 2024 5:04 pm

Amigo Maestro Antonio:

Muchas gracias por tu interés en el tema,

En mi reporte tengo definidos dos GROUP:

Code: Select all  Expand view  RUN

      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 view  RUN

    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 view  RUN

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
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: Otra pregunta sobre TREPORT

Postby Antonio Linares » Thu Jul 25, 2024 6:41 am

Modifica el código de esta forma:

ON ENDGROUP MiFuncion( oReporte, oGrp )

y asi recibes el grupo en tu función
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42113
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Otra pregunta sobre TREPORT

Postby FranciscoA » Wed Jul 31, 2024 7:14 pm

Armando, lo solucionaste?
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Otra pregunta sobre TREPORT

Postby Armando » Wed Jul 31, 2024 7:19 pm

Francisco:

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

Re: Otra pregunta sobre TREPORT

Postby FranciscoA » Wed Jul 31, 2024 9:28 pm

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 view  RUN
     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.
Image
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Otra pregunta sobre TREPORT

Postby Armando » Thu Aug 01, 2024 4:02 pm

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 view  RUN

      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
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: Otra pregunta sobre TREPORT

Postby FranciscoA » Thu Aug 01, 2024 6:27 pm

Por esto se hace imprescindible saber de qué grupo es el ENGROUP.

Como dice Antonio Linares, para conocer el numero de grupo:
[code=fw]Function MyFunction(oReport,oGpo)
 oGpo:nOrder ?
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Otra pregunta sobre TREPORT

Postby Armando » Thu Aug 01, 2024 6:54 pm

Francisco:

Te agradezco la paciencia pero

Code: Select all  Expand view  RUN

    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
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: Otra pregunta sobre TREPORT

Postby cmsoft » Fri Aug 02, 2024 10:29 am

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 view  RUN

      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
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Otra pregunta sobre TREPORT

Postby Armando » Fri Aug 02, 2024 7:22 pm

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 view  RUN

      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 view  RUN

      oReporte:bEndGroup         := { |oGroup| MiFuncion(oReporte,oGroup) }
    ENDIF
 


Y la función MiFuncion qudó así
Code: Select all  Expand view  RUN

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

Image

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: Otra pregunta sobre TREPORT

Postby Armando » Fri Aug 02, 2024 8:41 pm

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
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: Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo

Postby FranciscoA » Sat Aug 03, 2024 12:10 am

Excelente!
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Otra pregunta sobre TREPORT (SOLUCIONADO) gracias equipo

Postby sysctrl2 » Sat Aug 03, 2024 12:45 am

Paisano Armando te quedó de 100 :shock:
cuando se grande quiero se como tu :roll:
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1021
Joined: Mon Feb 05, 2007 7:15 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 44 guests