TReport Column Title

TReport Column Title

Postby FranciscoA » Mon Sep 13, 2010 2:19 pm

Amigos del foro:
¿Cómo podría definir el nombre de una columna en varias líneas en TReport, obteniendo el nombre de una cadena larga?
Por ej. Tengo esta cadena: "MONTO DE CUENTAS DE COBRO DUDOSO A NIVEL NACIONAL", y en determinada columna del report quiero que su título sea esta cadena subdivida en (por ej) 4 lineas. Lo que se desea es que con código, se distribuya automáticamente el título de la columna.
Algo así MONTO DE
CUENTAS DE
COBRO DUDOSO
A NIVEL NACIONAL
¿Pueden ayudar?
Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TReport Column Title

Postby FranciscoA » Tue Sep 14, 2010 5:21 pm

¿Nadie ha hecho lo descrito?
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TReport Column Title

Postby jponce » Wed Sep 15, 2010 12:22 am

Hola ya probaste así? "enca"+CRLF+" bezado"


Atentamente
Julio Rodrigo Ponce Hinestroza
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: TReport Column Title

Postby FranciscoA » Wed Sep 15, 2010 2:14 am

JPonce, gracias por contestar. Así es como lo tengo hasta el momento. Lo que quiero es lograr palabras completas en cada linea, teniendo la linea (por ej.), un ancho de 12 caracteres: (es decir, busco un código como el de un editor de texto)
cTexto:= "ESTE ES EL ENCABEZADO QUE ESTOY BUSCANDO"

ESTE ES EL //lin 1 de tit
ENCABEZADO // " 2
QUE ESTOY // " 3
BUSCANDO // " 4

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TReport Column Title

Postby Marcelo Via Giglio » Wed Sep 15, 2010 11:56 am

Hola,

prueba con esta funcion, te separa un string en palabras completas en funcion a la longitud
de cada substring no mayor a nCol, esto te devuelve un arreglo de substring que lo puedes convertir en la cebecera de tu reporte.

Code: Select all  Expand view

//------------------------------------------------------------------------------
FUNCTION spaceSplit( text, nCol, nRows )
//------------------------------------------------------------------------------
//
// Separa text en substring de tamaño nCol y lo devuelve en un array de nRows
// si se especifica los nRows
//

LOCAL f := 1, i := 1, j, aText := {}, car

     DO WHILE i <= Len( text )
          car := SubStr( text, i, 1 )
          IF car == " "
               j := i
          ENDIF

          IF i - f > nCol
             i := j
             AAdd( aText, SubStr( text, f, i - f ) )
             f := j + 1
          ENDIF
          i++
     ENDDO

     IF i != j
        AAdd( aText, SubStr( text, f, i - f ) )
     ENDIF

     IF nRows != NIL .AND. LEN( aText ) < nRows
        FOR i := LEN( aText ) TO nRows - 1
            AADD( aText, "" )
        NEXT
     ENDIF


     RETURN aText
 
Marcelo Via Giglio
 
Posts: 1050
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: TReport Column Title

Postby Kleyber » Wed Sep 15, 2010 1:16 pm

Francisco,

Si es con la clase TReport, podrias intentar asi:

Code: Select all  Expand view

     COLUMN TITLE "Unidad","del","Producto" ;
          DATA PRO->unid
 


Pruebalo y me comentas.

Saludos,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: TReport Column Title

Postby FranciscoA » Wed Sep 15, 2010 4:52 pm

Kleyber, gracias por contestar. Estoy de acuerdo en lo que expones. Asi lo hago de manera manual y directa cuando uso
COLUMN TITLE; DATA, etc. El caso es que no se conoce el texto ni su longitud por lo que necesitamos un codigo que separe en palabras completas el texto, dependiendo de una longitud dada.
Nuevamente gracias por tu interés.

Marcelo, agradezco tu atención.
Efectivamente es una función como esa la que busco. Ya había encontrado otra parecida aquí en el foro y me devuelve el array en palabras completas. Pero... otro pegón (como decimos aquí). Necesito insertar cada linea de texto devuelta, en un codeblock, y este, a su vez dentro de un array asi:
aTitCol:= {}
aadd(aTitCol, {|| Texto Lin1} , {|| Texto Lin2 } ) //tantos codeblocks como lineas devueltas por la funcion

El problema es que si lo hago dentro de un FOR..NEXT no me funciona, pero si lo hago manualmente sí, aunque de esta ultima manera no podría automatizar el proceso.

Aquí dejo el código con el que estoy "peleando":

//------------------------------------------
Function Prueba()
local aTitu:={},aTitCol:={},n

//Este puede ser el array devuelto por tu función
aTitu:={"1103","CUENTAS","POR COBRAR","DE COBRO","DUDOSO"}

/*
//Automatizando asi, no me funciona cuando evalúo. (What the hell...???)
For n :=1 to len(aTitu)
aadd( aTitCol, {||aTitu[n]} )
**Msginfo( aTitu[n] )
Next
*/

//pero si lo hago asi, sí funciona... (pero lo que quiero es automatizar con el FOR...NEXT)
aadd(aTitCol,{||aTitu[1]})
aadd(aTitCol,{||aTitu[2]})
aadd(aTitCol,{||aTitu[3]})
aadd(aTitCol,{||aTitu[4]})
aadd(aTitCol,{||aTitu[5]})

//Aqui pruebo los resultados
MsgInfo(Eval(aTitCol[1]))
MsgInfo(Eval(aTitCol[2]))
MsgInfo(Eval(aTitCol[3]))
MsgInfo(Eval(aTitCol[4]))
MsgInfo(Eval(aTitCol[5]))

Return nil

Tú, o alguien más en el foro podría indicarme en que estoy errado en la parte que uso FOR...NEXT?
Francamente llevo más de 13 horas en el asunto y no doy.

Saludos y muy agradecido por vuestro interés.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TReport Column Title

Postby Kleyber » Wed Sep 15, 2010 6:16 pm

Francisco,

Ahora entendi lo que deseas... bueno testando tu función, haciendo asi igualmente funciona, pero no se si es lo que tu deseas:

Code: Select all  Expand view

//------------------------------------------
Function Prueba()
local aTitu:={},aTitCol:={},n

//Este puede ser el array devuelto por tu función
aTitu:={"1103","CUENTAS","POR COBRAR","DE COBRO","DUDOSO"}

//Automatizando asi, no me funciona cuando evalúo. (What the hell...???)
For n :=1 to len(aTitu)
   aadd( aTitCol, aTitu[n] )
**Msginfo( aTitu[n] )
Next

//pero si lo hago asi, sí funciona... (pero lo que quiero es automatizar con el FOR...NEXT)
/*
aadd(aTitCol,{||aTitu[1]})
aadd(aTitCol,{||aTitu[2]})
aadd(aTitCol,{||aTitu[3]})
aadd(aTitCol,{||aTitu[4]})
aadd(aTitCol,{||aTitu[5]})
*/


//Aqui pruebo los resultados sin EVAL
MsgInfo(aTitCol[1])
MsgInfo(aTitCol[2])
MsgInfo(aTitCol[3])
MsgInfo(aTitCol[4])
MsgInfo(aTitCol[5])

//Aqui pruebo los resultados (2)
/*
MsgInfo(Eval(aTitCol[1]))
MsgInfo(Eval(aTitCol[2]))
MsgInfo(Eval(aTitCol[3]))
MsgInfo(Eval(aTitCol[4]))
MsgInfo(Eval(aTitCol[5]))
*/


Return nil

 
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: TReport Column Title

Postby Marcelo Via Giglio » Wed Sep 15, 2010 9:24 pm

Francisco,

busca en el foro por "detached local" con eso solucionaras el problema for ... next

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1050
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: TReport Column Title

Postby FranciscoA » Wed Sep 15, 2010 11:39 pm

Kleyber, tu código funciona, pero desgraciadamente no es lo que busco. Gracias.
Marcelo, la función que posteaste me ha servido. Ya obtuve el array con palabras completas. Gracias.
El problema se ha extendido y ahora es que no logro devolver ese array. Aqui pongo un código más explícito de lo que estoy haciendo.

//aCtas=array con los Numeros de cuentas, aNombres=array con los nombres de las cuentas.
Function ImpRecapitu(aCtas,aNombres)
REPORT oReport ;
...
//Uso objetos porque se desconoce cant de columnas y cant de lineas del titulo de cada columna.
oReport:AddColumn( TrColumn():New( { {|| "FECHA"} },,;
{ {|| (cAlias)->Fecha } },9,,,,,,,.t.,, oReport ) )

oReport:AddColumn( TrColumn():New( { {|| "CHEQUE" } },,;
{ {|| (cAlias)->cheque } },9,,,,,,,.t.,, oReport ) )

oReport:AddColumn( TrColumn():New( { {|| "BENEFICIARIO" } },,;
{ {|| (cAlias)->Benefi } },30,,,,,,,.t.,, oReport ) )

oReport:AddColumn( TrColumn():New( { {|| "CONCEPTO" } },,;
{ {|| (cAlias)->Concepto } },30,,,,,,,.t.,, oReport ) )

for n := 1 to len(aCtas)
oReport:AddColumn( TrColumn():New( TituCol( n, aCtas,aNombres ) ,,;
{ DatoCol( cAlias, n ) },10,;
{ "@Z( 9,999,999,999.99"},,.t.,,,,.t.,, oReport ) )
next

END REPORT

ACTIVATE REPORT oReport
RETURN NIL

//--------------------------------------------------------//
Static function TituCol( n, aCtas, aNombres )
local aTitu := {}, aTitCol:={}, nX
local cText:=aCtas[n]+Space(8)+aNombres[n] //Aquí creo el texto para extraer las lineas (usando funcion de Marcelo)

/*
//Estos me trabajan bien pero son totalmente anti-estéticos
//RETURN { {|| aCtas[n]},{||Substr(aNombres[n],1,10)},{||Substr(aNombres[n],11,10)},{||Substr(aNombres[n],21,10)},{||Substr(aNombres[n],31,10)} }

aadd(aTitCol,{||aCtas[n]})
aadd(aTitCol,{||Substr(aNombres[n],1,10)})
aadd(aTitCol,{||Substr(aNombres[n],11,10)})
aadd(aTitCol,{||Substr(aNombres[n],21,10)})
aadd(aTitCol,{||Substr(aNombres[n],31,10)})
*/

//Aquí uso la función de Marcelo. Trabaja bien, pero el sistema se me cuelga. (No por la función. No sé por qué)
aTitu:=spaceSplit( cText, 10, )

//Aquí creo los codeblocks según el array devuelto por spaceSplit()
For nX :=1 to len(aTitu)
aadd( aTitCol, {||aTitu[nX]} )
Next

RETURN aTitCol

//El array devuelto debería ser { {|| aTitu1},{|| aTitu2},{|| aTitu3},{|| aTitu4},{|| aTitu5} } //o con -+ codebloks

Saludos


//--------------------------------------------------------// Este trabaja bien
Static function DatoCol( cAlias, n )
RETURN { || ( cAlias )->( FieldGet( n ) ) }
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TReport Column Title

Postby Willi Quintana » Thu Sep 16, 2010 4:37 am

Holas,,, yo uso esto:
Code: Select all  Expand view

//---------------------------------------------------------------------------------------
Function SeparaFrases(cDGlobal)
local aFrases, nLen, nCont, nPos, cSubC

cDGlobal := STRTRAN(CDGlobal, "  ", " ")
cDGlobal := ALLTRIM( cDGlobal ) + " "
aFrases := {}
nLen := LEN(cDGlobal)
nCont := 1
WHILE LEN(cDGlobal) > 0
  nPos := AT(" ", cDGlobal)    //  "AAAA BBBBBBB CCCC "
  cSubC := SUBSTR(cDGlobal,1, nPos - 1)
  AADD(aFrases,  cSubC )
  cDGlobal := STRTRAN(CDGlobal, cSubC + " ", "")
ENDDO

Return(aFrases)
 
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: TReport Column Title

Postby FranciscoA » Thu Sep 16, 2010 12:57 pm

Gracias Willi, pero se me cuelga el programa.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TReport Column Title

Postby FranciscoA » Thu Sep 16, 2010 2:24 pm

Marcelo:

Ya encontré el problema, y es que la función SpaceSplit() que posteaste, al encontrar una palabra de mayor longitud a la predefinida, se cuelga. Voy a tratar de modificarla y la posteo. Mientras tanto, he ampliado la longitud predeterminada, para pode finalizar el trabajo.
Gracias por tu función, que me ha sido util, en verdad.

Marcelo escribió:
busca en el foro por "detached local" con eso solucionaras el problema for ... next

¡Excelente Marcelo! he resulto totalmente.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 52 guests