Cerrar un indice Temporal (Solucionado)

Cerrar un indice Temporal (Solucionado)

Postby JoseLuis » 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: Select all  Expand view
 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: Select all  Expand view
 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: Select all  Expand view
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: Select all  Expand view
(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
Last edited by JoseLuis on Sat Aug 27, 2022 5:35 pm, edited 1 time in total.
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Cerrar un indice Temporal

Postby cnavarro » Sat Aug 06, 2022 1: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
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cerrar un indice Temporal

Postby JoseLuis » Sat Aug 06, 2022 1: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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Cerrar un indice Temporal

Postby hmpaquito » Sat Aug 06, 2022 3: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: Select all  Expand view
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: Select all  Expand view
index on (aAlias[24])->Fecha TAG "Tfecha1" TO "XXXBAG" FOR (aAlias[24])->tipo=2 .and. (aAlias[24])->liqui=.F. ADDITIVE MEMORY


Salu2
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cerrar un indice Temporal

Postby JoseLuis » Sat Aug 06, 2022 3:55 pm

Muchas gracias

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

Un saludo
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Cerrar un indice Temporal

Postby JoseLuis » Sat Aug 06, 2022 5: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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Cerrar un indice Temporal

Postby JoseLuis » Sat Aug 06, 2022 5: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: Select all  Expand view
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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Cerrar un indice Temporal

Postby artu01 » Sat Aug 06, 2022 5:44 pm

JoseLuis wrote:
Code: Select all  Expand view
(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
artu01
 
Posts: 397
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Cerrar un indice Temporal

Postby JoseLuis » Sat Aug 06, 2022 8:13 pm

Vale, ya está solucionado

Efectivamente era algo que no entiendo, y es que si llamo al Report desde una funcion intermedia
Code: Select all  Expand view
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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Cerrar un indice Temporal

Postby hmpaquito » Mon Aug 08, 2022 3: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: Select all  Expand view
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: Select all  Expand view
(aAlias[24])->(Ordsetfocus(nindex))


La solucion es usar
Code: Select all  Expand view
(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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 75 guests