Page 1 of 1

xbrowse con columnas variables

PostPosted: Fri Oct 04, 2019 5:16 pm
by hpoliz
buenos dias :

he construido un select cuyo resultado puede tener una cantidad variable de columnas ( los nombres de las columnas pueden cambiar segun la empresa que lo use )
ejemplo ... mes, v_alma01, v_alma02, v_alma03, v_alma04, v_alma05
mes, v_hist, v_proy, v_trans

este select contiene las ventas mensuales por cada tienda
Enero, 100, 150, 120
febrer0, 200,150,130

como puedo hacer para construir un xbrowse que me muestre las columnas obtenidas ( que como indique anteriormente son variables )

gracias por la atencion

Re: xbrowse con columnas variables

PostPosted: Fri Oct 04, 2019 7:35 pm
by cnavarro
Busca en el foro AddCol, es justo lo que necesitas, puedes definir el xbrowse vacio o con algunas columnas y despues ir añadiendo según tus necesidades

viewtopic.php?f=6&t=37456&p=223908#p223906

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 9:50 pm
by hpoliz
aTdas ... es un arreglo de las tiendas de una empresa ( este arreglo puede ser variable, es decir hoy tiene 3 y luego puede tener 5, 6, o mas )
TEM_T ... es una tabla (producto de un select) donde tiene las valores de las ventas de las tiendas

necesito un browse con las ventas de las tiendas, pero solo obtengo 0,00 en el browse ( las cabeceras si se muestran correctamente )

for i := 1 to len(aTdas)
WITH OBJECT oCol := oBrwT:AddCol()
:bStrData := { || cValToChar( TEM_T->( FieldGet( i ) ) ) }
:cHeader := trim(aTdas[i,1])
END WITH
next i

favor su ayuda ...

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 9:54 pm
by cnavarro
hpoliz wrote:aTdas ... es un arreglo de las tiendas de una empresa ( este arreglo puede ser variable, es decir hoy tiene 3 y luego puede tener 5, 6, o mas )
TEM_T ... es una tabla (producto de un select) donde tiene las valores de las ventas de las tiendas

necesito un browse con las ventas de las tiendas, pero solo obtengo 0,00 en el browse ( las cabeceras si se muestran correctamente )

for i := 1 to len(aTdas)
WITH OBJECT oCol := oBrwT:AddCol()
:bStrData := { || cValToChar( TEM_T->( FieldGet( i ) ) ) }
:cHeader := trim(aTdas[i,1])
END WITH
next i

favor su ayuda ...


Qué versión de Fwh utilizas?
Mira a ver si utilizando una variable intermedia te funciona
Code: Select all  Expand view

   for i := 1 to len(aTdas)
      WITH OBJECT oCol := oBrwT:AddCol()
       cDato      := cValToChar( TEM_T->( FieldGet( i ) ) )
       :bStrData :=  { || cDato  }
       :cHeader := trim(aTdas[i,1])
      END WITH
   next i
 

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 10:20 pm
by hpoliz
Estimado cnavarro :

estoy usando fwh 17.09 y no funciono usando la variable intermedia que sugeriste. :cry:

Se agradece tu sugerencia

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 10:30 pm
by cnavarro
Qué error te da?

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 10:48 pm
by hpoliz
Estimado cnavarro :

disculpa si me exprese mal ..

No hay error en la sentencia ... me referia a que no visualizo los datos ... solo veo 0,00

Colocando de esta forma si se visualizan los valores, pero como no se cuantas columnas tendra la tabla necesito que el browse sea variable

ADD COLUMN TO XBROWSE oBrwT ;
DATA TEM_T->V_ALMA01 ;
HEAD "ALMA01" SIZE 80

ADD COLUMN TO XBROWSE oBrwT ;
DATA TEM_T->V_ALMA02 ;
HEAD "ALMA02" SIZE 80

ADD COLUMN TO XBROWSE oBrwT ;
DATA TEM_T->V_ALMA03 ;
HEAD "ALMA03" SIZE 80

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 11:04 pm
by cnavarro
El problema seguramente es lo que se denomina "detached" local, busca en el foro y si no ves como solucionarlo, seguimos con ello

Re: xbrowse con columnas variables

PostPosted: Mon Oct 07, 2019 11:09 pm
by hpoliz
Estimado cnavarro :

Gracias por la atencion ... revisare lo sugerido

Re: xbrowse con columnas variables

PostPosted: Tue Oct 08, 2019 6:44 pm
by FranciscoA
hpoliz (no se tu nombre)
Hago algo muy, pero muy parecido a lo que expones, solo que con dbfs.
Intenta adaptar el siguiente codigo, en el que claramente se ve que la tabla InfoVtas sería como el resultado de tu consulta Sql.

Code: Select all  Expand view
//------------------------------------//FranciscoA
Function Ventas()
   //Ej. Todos los PtosVta: "BAR","RES","RCH","COM","PIS"
   local aPtoVtas:={"BAR","RCH"}  //Ptos/Vta que deseamos informar
   local aVentas, aStruct:= {}, cCampo, n, cPto, dFecha, nVtas:=0

  DBUsearea(.t.,,"Ventas","Ventas",.t.)
  INDEX ON FIELD->PUNTOVTA + DTOS(field->FECHA) TO PF TEMPORARY

  aadd( aStruct, {"FECHA", "D", 8,0 } )
  For n := 1 to len(aPtoVtas)
      aadd( aStruct, { aPtoVtas[n], "N", 10,2 } )
  Next

  DbCreate( ".\infovtas", aStruct )

  DBUsearea(.t.,,".\InfoVtas","InfoVtas",.f.)

  DbSelectArea("Ventas")
  dbgotop()

  For n := 1 to len(aPtoVtas)
     if Ventas->( DbSeek( cPto := aPtoVtas[n] ) )
        While alltrim(field->PuntoVta) == cPto
            dFecha := field->Fecha
            nVtas  := 0

            While field->fecha = dFecha
                nVtas += Field->ValorFact
                dbSkip()
            Enddo
 
            InfoVtas->(dbAppend())
            InfoVtas->Fecha := dFecha
            InfoVtas->&cPto := nVtas
            SysRefresh()                      
        Enddo
     endif
  next

   Ventas->(DbCloseArea())

   BrwVentas("INFOVTAS",aPtoVtas)

   INFOVTAS->(DBCLOSEAREA())
   FERASE(".\INFOVTAS.DBF")

Return nil

//------------------------------------//
Function BrwVentas(cTblName,aHeaders)
local oDlg, oBrw

   DEFINE DIALOG oDlg SIZE 600,400 PIXEL TITLE "Ventas por Tienda"

   @ 2, 0 XBROWSE oBrw OF oDlg PIXEL SIZE 280,140 ;
          DATASOURCE cTblName ;
          HEADERS    aHeaders ;
          FOOTERS CELL LINES

   WITH OBJECT oBrw
      :nColDividerStyle := LINESTYLE_LIGHTGRAY
      :nRowDividerStyle := LINESTYLE_LIGHTGRAY
   END

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED ;
            ON INIT ( oBrw:Move(40,20) )

RETURN NIL
 

Saludos.