FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour oReport:DelColumn()
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
oReport:DelColumn()
Posted: Wed Apr 02, 2014 03:34 AM
Amigos:
Estoy tratando, "desde hace rato", eliminar columnas del reporte, cuando este ya ha sido creado.
Code (fw): Select all Collapse
      IF oReport:lCreated
      for n :=1 to len(oReport:aColumns)
             if oReport:aColumns[n]:lTotal =.t.
                if oReport:aColumns[n]:nTotal = 0
                   oReport:DelColumn(n)     //modificado: tenia [n], pero igual...
                endif
             endif 
       next
       ENDIF

Elimina columnas al azar, no las que necesito borrar.
Alguna idea o sugerencia?

Gracias.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: oReport:DelColumn()
Posted: Wed Apr 02, 2014 12:00 PM

Has probado a llamar tu function de borrado de columnas en el ::bInit del ACTIVATE REPORT y probar a llamar después de nuevo al método Stabilize (quizás no haga falta)

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: oReport:DelColumn()
Posted: Wed Apr 02, 2014 01:21 PM
Cristóbal, gracias por contestar, sigue sin funcionar.
Code (fw): Select all Collapse
     oReport:bInit := {|| BorrColumnas(oReport) }
    ó
     ACTIVATE REPORT oReport ON INIT BorrColumnas(oReport)

//--------------------------------
Function BorrColumnas(oReport)
local n

   for n:=1 to len(oReport:aColumns)
       if oReport:aColumns[n]:lTotal  =.t.
          if oReport:aColumns[n]:nTotal = 0
             oReport:DelColumn(n)
          endif
       endif 
    next
    oReport:Stabilize()
Return nil

Sigo intentando.
Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: oReport:DelColumn()
Posted: Wed Apr 02, 2014 01:41 PM
Es un poco absurdo lo que voy a decir, pero sin ver el codigo lo unico que se me ocurre es que cambies
Code (fw): Select all Collapse
if oReport:aColumns[n]:lTotal  =.t.

por 

if oReport:aColumns[n]:lTotal

ya que en algun programa me ha hecho cosas raras con cosas parecidas
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: oReport:DelColumn()
Posted: Wed Apr 02, 2014 04:33 PM
Ya lo habia intentado de esa forma, y nada.
Lo que trato de hacer es no presentar en el reporte, las columnas que tengan nTotal en 0.
Lo que he notado es que solo con el :bEnd se puede capturar los nTotal de cada columna. Ej:
Code (fw): Select all Collapse
    oReport:bEnd := {|| BorrColumnas(oReport) }
     ACTIVATE REPORT oReport 
//--------------------------------
Function BorrColumnas(oReport)
local n, oCol
local nCols :=len(oReport:aColumns)

   for n:=1 to nCols
       oCol := oReport:aColumns[n]          //linea 1037
       if oCol:lTotal .and. Abs(oCol:nTotal) != 0   // ==0
           // oReport:DelColumn(oCol)
           MsgInfo(oCol:nTotal)    //muestra correctamente nTotal de columna
       endif
    next

    //   oReport:Stabilize()
Return nil

Pero al ejecutarlo con oReport:DelColumn(), da este error:
Error description: Error BASE/1132 Bound error: array access
Args:
[ 1] = A { ... }
[ 2] = N 19

Stack Calls
===========
Called from: D:\COUNTR~1\WNOMIP~1\wnomipq.prg => BORRCOLUMNAS(1037)

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: oReport:DelColumn()
Posted: Sun Apr 06, 2014 11:55 PM
FranciscoA wrote:Ya lo habia intentado de esa forma, y nada.
Lo que trato de hacer es no presentar en el reporte, las columnas que tengan nTotal en 0.
Lo que he notado es que solo con el :bEnd se puede capturar los nTotal de cada columna. Ej:
Code (fw): Select all Collapse
    oReport:bEnd := {|| BorrColumnas(oReport) }
     ACTIVATE REPORT oReport 
//--------------------------------
Function BorrColumnas(oReport)
local n, oCol
local nCols :=len(oReport:aColumns)

   for n:=1 to nCols
       oCol := oReport:aColumns[n]          //linea 1037
       if oCol:lTotal .and. Abs(oCol:nTotal) != 0   // ==0
           // oReport:DelColumn(oCol)
           MsgInfo(oCol:nTotal)    //muestra correctamente nTotal de columna
       endif
    next

    //   oReport:Stabilize()
Return nil

Pero al ejecutarlo con oReport:DelColumn(), da este error:
Error description: Error BASE/1132 Bound error: array access
Args:
[ 1] = A { ... }
[ 2] = N 19

Stack Calls
===========
Called from: D:\COUNTR~1\WNOMIP~1\wnomipq.prg => BORRCOLUMNAS(1037)

Saludos.


Francisco, creo que cuando eliminas la columna, has de actualizar el valor de
Code (fw): Select all Collapse
nCols--

para que no te de error de acceso a array.
Otra historia es que consigas lo que necesitas
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: oReport:DelColumn()
Posted: Mon Apr 07, 2014 12:00 AM
Cristobal, gracias por tu tiempo e interes.
Precisamente como indicas, asi lo estoy haciendo:
//Las 2 maneras trabajan bien, pero como no se puede capturar nTotal con :lCreated
//borra todas las columnas porque las toma como 0, y con :bEnd borra solo en la
//linea de totales.
Code (fw): Select all Collapse
   /*
   for n:=1 to nCols 
       oCol := oReport:aColumns[n] 
       if oCol:lTotal = .t. .and. Abs(oCol:nTotal) = 0
          msginfo("vamos a borrar col "+str(n,3) +"  "+ Eval(oCol:aTitle[1])+" "+ Eval(oCol:aTitle[2]))
          oReport:DelColumn(n)
          nCols :=len(oReport:aColumns)
          n -= 1
       endif
    next
    */

/*
   n:=1
   While n <= nCols
       oCol := oReport:aColumns[n] 
       if oCol:lTotal = .t. .and. Abs(oCol:nTotal) = 0
          msginfo("vamos a borrar col "+str(n,3) +"  "+ Eval(oCol:aTitle[1])+" "+ Eval(oCol:aTitle[2]))
          oReport:DelColumn(n)
          nCols :=len(oReport:aColumns)
          //loop
       endif
       n +=1
          MsgInfo("n: "+str(n)+"  nCols: "+str(nCols))
   Enddo
*/

viewtopic.php?f=6&t=28286#p158318
Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion