Cerrar dbf despues de preview

Cerrar dbf despues de preview

Postby jvtecheto » Tue Jul 13, 2021 3:08 pm

Hola:

En un informe y haciendo caso a Mr. Rao abro el dbf con un nuevo alias para realizar el mismo

activo el boton excel para exportar a esa hoja de calculo. Pero quiero cerrar la base de datos abierta al terminar el informe.

utilizo este codigo.

Code: Select all  Expand view  RUN

oRepObr:bInit := {|| ListO->(dbgotop()) } // Activa boton Excel en Preview  Da error
   
   ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
   .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() )
   oFont:END()
ENDIF

ListO->(DBCloseArea()) // error.
 


Este codigo provoca error . ya que al exportar a excel dice que la base de datos no esta abierta.

Como hago para cerrar la base de datos despues de exportar a Excel.?

Gracias por vuestra inestamable ayuda.

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Cerrar dbf despues de preview

Postby karinha » Tue Jul 13, 2021 4:06 pm

Code: Select all  Expand view  RUN

DbCloseArea()

Ó

( ( ListO )->DBCloseArea() )

Ó

CLOSE  ListO

Ó

DBCLOSEALL()
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cerrar dbf despues de preview

Postby jvtecheto » Tue Jul 13, 2021 6:08 pm

Muchas gracias por tu interés Joao

No me he explicado bien. Mira tengo un browse con una dbf entonces tengo una opción que lanza un diálogo en el cual se preguntan datos del informe, ahí ya se abre la misma dbf con otro alias, se pregunta si queremos
Filtrar por código por nombre etc si aceptamos se prepara el informe,
En este informe se activa el botón Excel y al acabar el informe se cierra la dbf que hemos abierto para ese informe solamente.

Todo eso Funciona ok. Se activa el botón de Excel , pero colo le des al botón de exportar a Excel te da error de que el alias no existe.
O sea ejecuta la última instrucción del código que he publicado estando en el preview.
es eso lo que no entiendo porque incluso si no cierro la dbf en el código que llamo al diálogo sino a continuación.
O se en el action del botón que llamó al diálogo. Después de eso cierro la dbf.
Sorprendente también me da error. Que el alias no existe.

Espero vuestra inestimable ayuda.

Jose.

No


Enviado desde mi POCOPHONE F1 mediante Tapatalk
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Cerrar dbf despues de preview

Postby cmsoft » Tue Jul 13, 2021 8:38 pm

José, como defines el reporte completo.
Por lo que veo estaría bien, pero tienes un endif que no se nota de donde viene.
Este código funciona bien para mi:
Code: Select all  Expand view  RUN

use rubros alias "base01" shared new
SET INDEX TO rubrnom

// Defino el reporte
REPORT oRep TITLE "Reporte de Rubros" FONT  oFont1,oFont2,oFont3 ;
       HEADER OemToAnsi(cTitulo) CENTER ;
       FOOTER "Hoja:" + STR(oRep:npage,3) ,"Fecha:"+DTOC(DATE()) CENTER;
       PREVIEW CAPTION  "Reporte de Rubros"
COLUMN TITLE "Nombre" DATA base01->nombre  SIZE 30 FONT 2 GRID
COLUMN TITLE "Codigo" DATA base01->codigo  SIZE 20 FONT 3 GRID
END REPORT
// Activo el reporte
ACTIVATE REPORT oRep WHILE base01->(!EOF())  ON STARTPAGE oRep:SayBitmap(.1,.1,"LOGO.BMP",1.5,.5)
CLOSE base01
 
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Cerrar dbf despues de preview

Postby artu01 » Wed Jul 14, 2021 1:54 am

jvtecheto wrote:Hola:

En un informe y haciendo caso a Mr. Rao abro el dbf con un nuevo alias para realizar el mismo

activo el boton excel para exportar a esa hoja de calculo. Pero quiero cerrar la base de datos abierta al terminar el informe.

utilizo este codigo.

Code: Select all  Expand view  RUN

oRepObr:bInit := {|| ListO->(dbgotop()) } // Activa boton Excel en Preview  Da error
   
   ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
   .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() )
   oFont:END()
ENDIF

ListO->(DBCloseArea()) // error.
 


Este codigo provoca error . ya que al exportar a excel dice que la base de datos no esta abierta.

Como hago para cerrar la base de datos despues de exportar a Excel.?

Gracias por vuestra inestamable ayuda.

Saludos.

Jose.

Y asi haz probado
Code: Select all  Expand view  RUN

ACTIVATE REPORT oRepObr ...
ON END ListO->(DBCloseArea())
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Cerrar dbf despues de preview

Postby jvtecheto » Wed Jul 14, 2021 9:16 am

Hola amigos:

Muchisimas gracias a todos por el interes.

Pero creo que incluso con la solucion de Artu01, que parecia la que mas se adaptaba cuando le das al boton de exportar de excel te dice que no existe el alias, o sea la base de datos ya esta cerrada.

Es por lo que deduzco que cuando tenemos el preview en nuestra pantalla ya se ha producido el ON END del informe y si pulsas el boton de excel te da error.
Yo creo que lo normal seria que el ON END se lanzara cuando cierras el preview, pero bueno son opiniones.

de todas formas yo cierro la dbf despues de salir del informe, es por lo que no entiendo que desde el preview la dbf ya esta cerrada.
el codigo es trivial , yo presento un dialogo.

Code: Select all  Expand view  RUN

STATIC FUNCTION ListObras()
local oDlg, oFont
local oDevice, oRepObr
// etc . ...

dbUseArea( .T., , "Obras", "ListO", .T. )

DEFINE DIALOG oDlg NAME "LISTAOBR" ;
   TITLE "LISTADO DE OBRAS"

 
   REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ACTION ( lAcepta := .t., oDlg:END() )
   REDEFINE BTNBMP ID 751 RESOURCE "CANCEL" OF oDlg ACTION oDlg:END()

   ACTIVATE DIALOG oDlg CENTERED

IF lAcepta

     // code....
      DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
      oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) )

     
      REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
         Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
         Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
         FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
         CAPTION cCaption FONT oFont TO DEVICE oDevice

         COLUMN TITLE "Codigo", "Inicio"  DATA ListO->Codigo, DToC( ListO->Inicio )
         COLUMN TITLE "Nombre", "C.I.F."  DATA ListO->Nombre, ListO->Cif
         COLUMN TITLE "Dirección", "Provincia" DATA SubStr( ListO->Direc, 1, 20 ), ListO->Provin
         COLUMN TITLE "Población", "C.Postal" DATA SubStr( ListO->Pobla, 1, 14 ), ListO->Postal
         COLUMN TITLE "Telefono", "Presupuesto" DATA ListO->Tele, ListO->Presup PICTURE "@E 999,999.99"

      END REPORT
      oRepObr:nTitleUpline := 0  // Quita la linea de arriba de los titulos 0
      oRepObr:MARGIN( 4, 5, 2 )
      oRepObr:bInit := {|| ListO->(dbgotop()) }
   
      ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ! ListO->(  Eof() )

      oFont:END()
   
   ENDIF

   ListO->(DbcloseArea())  

Return NIL
 


Deduzco que cuando se muestra el preview ya se ha ejecutado todo el codigo incluso el ListO->(DbCloseArea()) con lo cual la dbf esta cerrada
y al llamar al boton de excel da error que no existe el alias.

yo creo que es un tema de diseño del preview , espero una orientacion de los mienbros de Fivetech o que me expliquen como puedo hacer un informe
abriendo la dbf y cerrandola en la misma funcion.

Un abrazo a todos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Cerrar dbf despues de preview

Postby Otto » Wed Jul 14, 2021 10:08 am

Hello José,

After working on my | i zi pi zi | HTML Report, I follow all the printing problems in the forum and think about how it could be done with HTML Reports.

I think that using HTML as the report definition language has certain advantages.
The HTML Report Generator saves the entire report as an HTML file before the preview.

I think that this can also solve the EXCEL export. All you have to do is open this file in EXCEL.
This is how my report looks if I open with EXCEL.

Image


Best regards,
Otto


viewtopic.php?f=3&t=40621
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6336
Joined: Fri Oct 07, 2005 7:07 pm

Re: Cerrar dbf despues de preview

Postby karinha » Wed Jul 14, 2021 1:42 pm

Mira:

Code: Select all  Expand view  RUN

#Include "Report.Ch"    //-> Classe Para Reportes

STATIC FUNCTION ListObras()

   LOCAL oDlg, oFont
   LOCAL oDevice, oRepObr, ListO, cAlias

   // dbUseArea( .T., , "Obras", "ListO", .T. )

   USE OBRAS INDEX OBRAS NEW SHARED ALIAS OBRAS
   GO TOP

   ListO  := ALIAS()
   // O
   cAlias := ALIAS()

   DEFINE DIALOG oDlg NAME "LISTAOBR" TITLE "LISTADO DE OBRAS"

   REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ACTION ( lAcepta := .t., oDlg:END() )
   REDEFINE BTNBMP ID 751 RESOURCE "CANCEL" OF oDlg ACTION oDlg:END()

   ACTIVATE DIALOG oDlg CENTERED

   IF lAcepta

     // code....
      DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
      oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) )

     
      REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
         Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
         Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
         FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
         CAPTION cCaption FONT oFont TO DEVICE oDevice

         COLUMN TITLE "Codigo", "Inicio"  DATA ListO->Codigo, DToC( ListO->Inicio )
         COLUMN TITLE "Nombre", "C.I.F."  DATA ListO->Nombre, ListO->Cif
         COLUMN TITLE "Dirección", "Provincia" DATA SubStr( ListO->Direc, 1, 20 ), ListO->Provin
         COLUMN TITLE "Población", "C.Postal" DATA SubStr( ListO->Pobla, 1, 14 ), ListO->Postal
         COLUMN TITLE "Telefono", "Presupuesto" DATA ListO->Tele, ListO->Presup PICTURE "@E 999,999.99"

      END REPORT

      oRepObr:nTitleUpline := 0  // Quita la linea de arriba de los titulos 0
      oRepObr:MARGIN( 4, 5, 2 )
      oRepObr:bInit := {|| ListO->(dbgotop()) }
   
      ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ! ListO->(  Eof() )

      oFont:END()
   
   ENDIF

   CLOSE ListO
   CLOSE cAlias

Return NIL
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cerrar dbf despues de preview

Postby jvtecheto » Fri Jul 16, 2021 7:06 am

Hola Joao.

Muchas gracias por tu interes, pero igual da error que no existe el alias ListO ( o el que sea) ,
lo que significa que cuando se visualiza el preview se ha ejecutado todo el codigo de la funcion hasta el final
y la dbf ha sido cerrada, y si pulsas el boton de excel como se supone que tiene que usar los datos de la dbf esta cerrada.

No digo que sea un bug pero si se podria rediseñar el preview para que no ejecutara todo el codigo, solo lo hiciera cuando cierras
el preview

Code: Select all  Expand view  RUN

ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() )

   ListO->(dbcloseArea())
 


No se ejecutara el ListO->(DbCloseArea()) , hasta que se cerrara el preview cosa que no ocurre actualmente.

imaginaros que en una funcion que presenta un dialogo se ejecutara todo el codigo de la funcion, en este caso no se
ejecuta el codigo a partir de ACTIVATE DIALOG ... hasta que se cierra el mismo. En el codigo de abajo la condicion de
IF lAcepta se ejecuta cuando cierras el DIALOG.

Code: Select all  Expand view  RUN

ACTIVATE DIALOG oDlg CENTERED

   IF lAcepta

      IF nRad == 1
         IF ListO->(Ordsetfocus()) != "CODIGO"
            ListO->( ordSetFocus( "Codigo" ) )
         ENDIF
      ELSEIF nRad == 2
         IF ListO->(Ordsetfocus()) != "NOMBRE"
            ListO->( ordSetFocus( "Nombre" ) )
         ENDIF
         cInicio := Upper( cInicio )
         cFinal := Upper( cFinal )
      ENDIF
// code ....

 


u ofrecer una solucion para en una funcion que crea un informe y abrimos la misma dbf que tenemos en el Xbrowse pero con otro
alias podamos utilizar la exportacion a Excel, creo que me explico bien. No se sino es asi me lo indicais.

Mr. Rao, como se haria eso?

Saludos

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Cerrar dbf despues de preview

Postby karinha » Fri Jul 16, 2021 12:54 pm

Buén dia.

Haga un ejemplo com la DBF, e ZIP todo e ponga en el Mega Upload, para testes, porfa.

https://mega.nz

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cerrar dbf despues de preview

Postby artu01 » Fri Jul 16, 2021 5:58 pm

jvtecheto wrote:Hola Joao.

Code: Select all  Expand view  RUN

ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ListO->( ! Eof() )

   ListO->(dbcloseArea())
 


Jose y si solamente dejas
Code: Select all  Expand view  RUN

ACTIVATE REPORT oRepObr
 

Tambien se cuelga?
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Cerrar dbf despues de preview

Postby artu01 » Fri Jul 16, 2021 6:13 pm

jvtecheto wrote:
Code: Select all  Expand view  RUN

STATIC FUNCTION ListObras()
local oDlg, oFont
local oDevice, oRepObr
// etc . ...

dbUseArea( .T., , "Obras", "ListO", .T. )

DEFINE DIALOG oDlg NAME "LISTAOBR" ;
   TITLE "LISTADO DE OBRAS"

 
   REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ACTION ( lAcepta := .t., oDlg:END() )
   REDEFINE BTNBMP ID 751 RESOURCE "CANCEL" OF oDlg ACTION oDlg:END()

   ACTIVATE DIALOG oDlg CENTERED

IF lAcepta

     // code....
      DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
      oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) )

     
      REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
         Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
         Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
         FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
         CAPTION cCaption FONT oFont TO DEVICE oDevice        

         COLUMN TITLE "Codigo", "Inicio"  DATA ListO->Codigo, DToC( ListO->Inicio )
         COLUMN TITLE "Nombre", "C.I.F."  DATA ListO->Nombre, ListO->Cif
         COLUMN TITLE "Dirección", "Provincia" DATA SubStr( ListO->Direc, 1, 20 ), ListO->Provin
         COLUMN TITLE "Población", "C.Postal" DATA SubStr( ListO->Pobla, 1, 14 ), ListO->Postal
         COLUMN TITLE "Telefono", "Presupuesto" DATA ListO->Tele, ListO->Presup PICTURE "@E 999,999.99"

      END REPORT
      oRepObr:nTitleUpline := 0  // Quita la linea de arriba de los titulos 0
      oRepObr:MARGIN( 4, 5, 2 )
      oRepObr:bInit := {|| ListO->(dbgotop()) }
   
      ACTIVATE REPORT oRepObr FOR IF( lSoloOpen, ListO->Cerrada = .F., .T. ) .AND. IF( lSoloClose, ListO->Cerrada = .T., .T. ) ;
      .AND. IF( ListO->( ordSetFocus() ) == "CODIGO", ListO->Codigo <= cFinal, ListO->Nombre <= cFinal ) WHILE ! ListO->(  Eof() )

      oFont:END()
   
   ENDIF

   ListO->(DbcloseArea())  

Return NIL
 


Para que usas oDevice?
Code: Select all  Expand view  RUN

      REPORT oRepObr TITLE Replicate ( "_", 87 ), "", ;
         Replicate( " ", 36 ) + "LISTADO DE OBRAS" ,Replicate ( "_", 87 ) , "" Left ;
         Header "Pag. " + Str( oRepObr:nPage, 3 ) Right ;
         FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
         CAPTION cCaption FONT oFont  PREVIEW
         ....
         ....

 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Cerrar dbf despues de preview

Postby jvtecheto » Fri Jul 16, 2021 6:57 pm

Hola Artu01.

No si no cierro la dbf no se cuelga por supuesto pero lo que yo quiero es en la misma función abrir la dbf que tengo en el xbrowse pero con otro alias, confeccionó el informe, exporto a excel si el usuario quiere y luego cerrar la dbf que he abierto exclusivamente para ese informe. Y en el xbrowse sigo teniendo la dbf abierta y no tengo problemas de refresco.

Y no lo consigo.... :-(

Lo del oDevice es un código que tenía con Fivewin para clipper versión 2.0 imagínate más de 20 años. Y que adapte hace 2 años al volver a Fivewin. Y hay partes que voy mejorando poco a poco.
Pero imagínate el poder de Fivewin que logre convertir la dll que usaba entonces para los recursos de 16 bits a. Rc y el 90% del código me compilo.

Gracias por tu interés

Jose.



Enviado desde mi POCOPHONE F1 mediante Tapatalk
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

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