FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cerrar un indice Temporal (Solucionado)
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Cerrar un indice Temporal (Solucionado)
Posted: Sat Aug 06, 2022 12:25 PM
Buenas
Estoy enredado en este tema y no sé como solucionarlo:
La cuestión es que tengo abiertas varias bases de datos:
Code (fw): Select all Collapse
  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Factura",aAlias[22],.T.)
  (aAlias[22])->(OrdSetFocus("Codigo"))
  (aAlias[22])->( dbGotop() )

  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Inciden",aAlias[33],.T.)
  (aAlias[33])->(OrdSetFocus("Orden"))
  (aAlias[33])->( dbGotop() )
  
  dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\ALBARAN",aAlias[24],.T.)
  (aAlias[24])->(OrdSetFocus("Albaran"))
  (aAlias[24])->( dbGotop() )


Después llamo a una función para un informe:
Code (fw): Select all Collapse
  DEFINE BUTTON RESOURCE "CAJAR"    OF oBar NOBORDER MESSAGE "Listado de Contados Pendientes de Cobro"  ACTION (nRegAct := (aAlias[24])->(RecNo()),Contadopendiente(aAlias),,(aAlias[24])->( dbgoto( nRegAct ) ),oLbx:Refresh());
            WHEN Publicas:cAccesoL;
                TOOLTIP "Listado de Contados Pendiestes de Cobro"


Y ya en la función, genero un índice temporal en memoria:
Code (fw): Select all Collapse
static function contadopendiente(aAlias)
********************************
     local oFont1, oFont2
     local oPrinter,oPrn
     local ctitle:= "LISTADO DE ALBARANES DE CONTADO PENDIENTES DE COBRO"
     local nindex:=(aAlias[24])->(Ordsetfocus())
     index on (aAlias[24])->Fecha TO "Tfecha1" FOR (aAlias[24])->tipo=2 .and. (aAlias[24])->liqui=.F. ADDITIVE MEMORY

y ahora viene el problema, cuando salgo de ésta función, elijo el orden que traía de la función principal.
Code (fw): Select all Collapse
(aAlias[24])->(Ordsetfocus(nindex))
(aAlias[24])->(Dbgotop())
RETURN NIL


Pero ésto no funciona, sigue estando el índice que he creado en memoria, como puedo destruir éste índice y volver al que tenía anteriormente.

He probado con Orddestroy('Tfecha1'), pero nada sigue éste índice, y quiero que vuelva al anterior.

Un Saludo y gracias de antemano
--------------------------

Saludos



Jose Luis
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 01:40 PM
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: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 01:59 PM

Cristóbal
Muchas gracias por responder, pero como indicaba anteriormente, no responde a Orddestroy().
No sé si el problema estará en que de algún modo construyo mal el índice.
Un saludo

--------------------------

Saludos



Jose Luis
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 03:44 PM
Hola Jose Luis,

Yo creo que el problema es la confusion entre Tag y Bag. Con el comando de abajo estas creando un nuevo bag, es decir un nuevo .cdx que es el que queda activo y por eso no puedes recuperar el anterior order de indice

Code (fw): Select all Collapse
index on (aAlias[24])->Fecha TO "Tfecha1" FOR (aAlias[24])->tipo=2 .and. (aAlias[24])->liqui=.F. ADDITIVE MEMORY


El comando tendría que ser algo asi, sustituyendo XXXBAG por el bag correcto
Code (fw): Select all Collapse
index on (aAlias[24])->Fecha TAG "Tfecha1" TO "XXXBAG" FOR (aAlias[24])->tipo=2 .and. (aAlias[24])->liqui=.F. ADDITIVE MEMORY


Salu2
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 03:55 PM

Muchas gracias

Creo que por ahí van los tiros, voy a probar y veré si lo consigo

Un saludo

--------------------------

Saludos



Jose Luis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 05:13 PM

He repasado y efectivamente van por ahí los tiros.

Pero no consigo remediar nada, si en lugar de TO "Tfecha1" pongo TAG "Tfecha1", lo que pasa es que además se corrompe o lo que sea el índice CDX que tengo en (aAlias[24]) y tengo que volver a indexar todo.

--------------------------

Saludos



Jose Luis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 05:32 PM
El tema que estoy viendo es que todo lo que le ponga que me haga antes de Return a la función del Reporte no me hace caso, regresa sin tenerlo en cuenta, incluso he probado a hacer un msginfo para que me indique los nombres de las etiquetas del alias y nada, no hace nada.
Aqui todo el codigo del reporte:
Code (fw): Select all Collapse
Static function i_contado(aAlias)
     local oFont1, oFont2
     local oPrinter,oPrn,a
     local nindex:=(aAlias[24])->(Ordsetfocus())
     local ctitle:= "LISTADO DE ALBARANES DE CONTADO PENDIENTES DE COBRO"
     index on dtos(albaran->Fecha) TO 'Tfecha1' For albaran->tipo=2 .and. albaran->liqui=.F. MEMORY
     dbgotop()
*     (aAlias[24])->(Ordsetfocus('Fecha'))
*     (aAlias[24])->(Dbgotop())
     printer oPrn FROM USER
     oPrn:SetPortrait()
     oPrn:SetPage(9)
     DEFINE FONT oFont1 NAME "ARIAL" SIZE 0,-8 BOLD 
     DEFINE FONT oFont2 NAME "ARIAL" SIZE 0,-8      
     REPORT oReport ;
                TITLE   ctitle,  ;
                "",;
                "" ;
            FONT    oFont1,;
                oFont2 ;
            HEADER "Página: "+str(oReport:nPage,3) ;
        CENTERED ;
            PREVIEW

        COLUMN TITLE "Num."      DATA (aAlias[24])->Albaran SIZE 7 
        COLUMN TITLE "Fecha"     DATA (aAlias[24])->Fecha   SIZE 8
        COLUMN TITLE "Codigo"    DATA (aAlias[24])->Codpro  SIZE 5
        COLUMN TITLE "Nombre"    DATA oemtoansi((aAlias[24])->Pro) Picture "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        COLUMN TITLE "C/R"       DATA (aAlias[24])->CR Picture "X"
        COLUMN TITLE "Conductor" DATA oemtoansi((aAlias[24])->nconductor) Picture "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        COLUMN TITLE "B.Imponible"   DATA (aAlias[24])->Baseimpo;
            TOTAL              ;
            RIGHT              ;
            PICTURE "@Z 9,999.99";
            SIZE 8
        COLUMN TITLE "Cargo" DATA (aAlias[24])->otrosn Picture "XXXXXXXXXXXXXXX"
        COLUMN TITLE "Importe" DATA (aAlias[24])->otros;
            TOTAL              ;
            RIGHT              ;
            PICTURE "@Z 99.99";
            SIZE 5
        COLUMN TITLE "Seguro" DATA (aAlias[24])->Seguro;
            TOTAL              ;
            RIGHT              ;
            PICTURE "@Z 99.99";
            SIZE 5
        COLUMN TITLE "Iva" DATA (aAlias[24])->Iva;
            TOTAL              ;
            RIGHT              ;
            PICTURE "@Z 999.99";
            SIZE 6
        COLUMN TITLE "Total"   DATA ((aAlias[24])->Baseimpo+(aAlias[24])->Otros+(aAlias[24])->Seguro+(aAlias[24])->Iva);
            TOTAL              ;
            RIGHT              ;
            PICTURE "@Z 9,999.99";
            SIZE 8
     END REPORT
     IF oReport:lCreated
    oReport:aColumns[1]:bDataFont := {|| 2 }
    oReport:aColumns[2]:bDataFont := {|| 2 }
        oReport:aColumns[3]:bDataFont := {|| 2 }
        oReport:aColumns[4]:bDataFont := {|| 2 }
        oReport:aColumns[5]:bDataFont := {|| 2 }
        oReport:aColumns[6]:bDataFont := {|| 2 }
        oReport:aColumns[7]:bDataFont := {|| 2 }
        oReport:aColumns[8]:bDataFont := {|| 2 }
        oReport:aColumns[9]:bDataFont := {|| 2 }
        oReport:aColumns[10]:bDataFont := {|| 2 }
        oReport:aColumns[11]:bDataFont := {|| 2 }
        oReport:aColumns[12]:bDataFont := {|| 2 }
     ENDIF
*        oReport:oDevice:lPrvModal:=.t.
         ACTIVATE REPORT oReport //for (aAlias[24])->tipo=2 .and. (aAlias[24])->liqui=.F.
        oFont1:End()
        oFont2:End()
        oReport:End()
        for a  = 1 to 20
                 msginfo((aAlias[24])->(Ordname(a)))
        next a
        (aAlias[24])->(Ordsetfocus(nindex))
RETURN NIL
--------------------------

Saludos



Jose Luis
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 05:44 PM
JoseLuis wrote:
Code (fw): Select all Collapse
(aAlias[24])->(Ordsetfocus(nindex))
(aAlias[24])->(Dbgotop())
RETURN NIL


y si le pones
(aAlias[24])->(dbsetorder(nindex))
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Cerrar un indice Temporal
Posted: Sat Aug 06, 2022 08:13 PM
Vale, ya está solucionado

Efectivamente era algo que no entiendo, y es que si llamo al Report desde una funcion intermedia
Code (fw): Select all Collapse
static function contadopendiente(aAlias)
********************************
local nindex:=(aAlias[24])->(Ordsetfocus())
local oDlg
local oRadio,oGroup,nRadio1
local nOpcion,oboton,oboton1,osay,i
    DEFINE DIALOG oDlg FROM 10, 10 TO 23, 60 
        oDlg:cTitle:="Listado de Contados Pendientes de Cobro "
                @ 10, 10 RADIO oRadio VAR nRadio1 ITEMS "Fecha", "Nombre", "Conductor" _3D SIZE 40, 15 PIXEL UPDATE
        @ 60, 30 BUTTON  "Aceptar"   SIZE 50,25 PIXEL OF oDlg ACTION (i_contado(aAlias,nRadio1),oDlg:End())
        @ 60, 100 BUTTON "Cancelar"  SIZE 50,25 PIXEL OF oDlg ACTION (oDlg:End())
        ACTIVATE DIALOG oDlg CENTERED

(aAlias[24])->(Ordsetfocus(nindex))
return nil


Ya me responde, porque al final de ésta función pongo uq me cambie el orden del indice, pero si lo pongo al final de Repor, no hace caso.
--------------------------

Saludos



Jose Luis
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Cerrar un indice Temporal
Posted: Mon Aug 08, 2022 03:13 PM
JoseLuis wrote:Vale, ya está solucionado

Efectivamente era algo que no entiendo, y es que si llamo al Report desde una funcion intermedia
Code (fw): Select all Collapse
static function contadopendiente(aAlias)
********************************
local nindex:=(aAlias[24])->(Ordsetfocus())
local oDlg
local oRadio,oGroup,nRadio1
local nOpcion,oboton,oboton1,osay,i
    DEFINE DIALOG oDlg FROM 10, 10 TO 23, 60 
        oDlg:cTitle:="Listado de Contados Pendientes de Cobro "
                @ 10, 10 RADIO oRadio VAR nRadio1 ITEMS "Fecha", "Nombre", "Conductor" _3D SIZE 40, 15 PIXEL UPDATE
        @ 60, 30 BUTTON  "Aceptar"   SIZE 50,25 PIXEL OF oDlg ACTION (i_contado(aAlias,nRadio1),oDlg:End())
        @ 60, 100 BUTTON "Cancelar"  SIZE 50,25 PIXEL OF oDlg ACTION (oDlg:End())
        ACTIVATE DIALOG oDlg CENTERED

(aAlias[24])->(Ordsetfocus(nindex))
return nil


Ya me responde, porque al final de ésta función pongo uq me cambie el orden del indice, pero si lo pongo al final de Repor, no hace caso.



El dialogo que estas usando NO es modal, con lo cual la ejecucion del programa 1º muestra dialogo y sin parar y dejando a la espera el dialogo 2º sale de la funcion pasando por
Code (fw): Select all Collapse
(aAlias[24])->(Ordsetfocus(nindex))


La solucion es usar
Code (fw): Select all Collapse
(aAlias[24])->(Ordsetfocus(nindex))
al cerrar el dialogo, bien por los botones, bien por la X del propio dialogo O BIEN hacer el dialogo modal

Continue the discussion