Consulta Sobre Array " SOLUCIONADO "

Post Reply
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Consulta Sobre Array " SOLUCIONADO "

Post by remtec »

Hola Amigos.

Ha pasado un buen tiempo que no he molestado, pero estoy un poco mareado y no doy con la solucion.

Tengo un Array que envio a llenar a una funcion, he comprobado que este array es cargado con los datos que necesito, pero al volver desde donde lo envio, el array no contiene elementos.

Porque no devuelve el Array con los Elementos Seleccionados?

Muchos Saludos
Antonio.

Dejo el Codigo:

Code: Select all

Function AgreObser(Tip_Ate1,nExam,aExamenes,oBrw1)
    Local oDlg4,cMemo1,otitu3,oVol,oFon7,oFon8,oFon6,otitu4,oFon1,oGet5,oGet6, nCodi,Cod_Exa1
       
    Private aArancel  := {}    // <===== Aqui declaro el Array

    cMemo1 := "" // Variable vacia para tratarlo como memo

    SeleAran(Tip_Ate1,aArancel)       // <==== Aqui envio a cargar el Array

    ?" Len 1 ",Len(aArancel)       // <== Aqui no contiene los registros que cargo en la otra Function.

     ** Habilitar para Mostrar Columnas Ordenadas
     cNom9 := ASort(aArancel,,,{|x,y| x[1]<y[1]})   // "       "        "  nombre
    nCodi:=1

       .......
       .......
       Return

Function SeleAran(Tip_Ate1,aArancel)
            aArancel := {}     // <== Limpio el Array

            Sele Aran
            Seek Tip_Ate1
            If Eof()
                  MsgStop( "No Se Encontro Arancel Para Tipo Examen "+Tip_Ate1)
                  Return .f.
            Endif
            Do While (Tip_Ate=Tip_Ate1).and.!Eof()
                    Aadd(aArancel, { Aran->Nom_Ara,Aran->Cod_Ara})    // <== Aqui Agrego Elementos
                    DbSkip()
            EndDo

            ?"Len Ori ",Len(aArancel)      // <==== Aqui el array me indica que contiene 400 Elementos

             Return


 
Last edited by remtec on Tue Apr 07, 2020 2:26 pm, edited 1 time in total.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Consulta Sobre Array

Post by cnavarro »

remtec wrote:Hola Amigos.

Ha pasado un buen tiempo que no he molestado, pero estoy un poco mareado y no doy con la solucion.

Tengo un Array que envio a llenar a una funcion, he comprobado que este array es cargado con los datos que necesito, pero al volver desde donde lo envio, el array no contiene elementos.

Porque no devuelve el Array con los Elementos Seleccionados?

Muchos Saludos
Antonio.

Dejo el Codigo:

Code: Select all

Function AgreObser(Tip_Ate1,nExam,aExamenes,oBrw1)
    Local oDlg4,cMemo1,otitu3,oVol,oFon7,oFon8,oFon6,otitu4,oFon1,oGet5,oGet6, nCodi,Cod_Exa1
       
    Private aArancel  := {}    // <===== Aqui declaro el Array

    cMemo1 := "" // Variable vacia para tratarlo como memo

    SeleAran(Tip_Ate1,aArancel)       // <==== Aqui envio a cargar el Array

    ?" Len 1 ",Len(aArancel)       // <== Aqui no contiene los registros que cargo en la otra Function.

     ** Habilitar para Mostrar Columnas Ordenadas
     cNom9 := ASort(aArancel,,,{|x,y| x[1]<y[1]})   // "       "        "  nombre
    nCodi:=1

       .......
       .......
       Return

Function SeleAran(Tip_Ate1,aArancel)
            aArancel := {}     // <== Limpio el Array

            Sele Aran
            Seek Tip_Ate1
            If Eof()
                  MsgStop( "No Se Encontro Arancel Para Tipo Examen "+Tip_Ate1)
                  Return .f.
            Endif
            Do While (Tip_Ate=Tip_Ate1).and.!Eof()
                    Aadd(aArancel, { Aran->Nom_Ara,Aran->Cod_Ara})    // <== Aqui Agrego Elementos
                    DbSkip()
            EndDo

            ?"Len Ori ",Len(aArancel)      // <==== Aqui el array me indica que contiene 400 Elementos

             Return


 
Bien, el problema es de concepto en la declaración de las variables.
Para no extenderme demasiado te digo como debes hacerlo
En la function

Code: Select all

Function AgreObser(Tip_Ate1,nExam,aExamenes,oBrw1)
    Local oDlg4,cMemo1,otitu3,oVol,oFon7,oFon8,oFon6,otitu4,oFon1,oGet5,oGet6, nCodi,Cod_Exa1
       
    LOCAL aArancel  := {}    // <===== Aqui declaro el Array

    cMemo1 := "" // Variable vacia para tratarlo como memo

    aArancel :=  SeleAran(Tip_Ate1 )       // <==== Aqui envio a cargar el Array

... / ...
 
Y en la function

Code: Select all

Function SeleAran( Tip_Ate1 )
    LOCAL            aArancel := {}     // 

.../...

Return aArancel
 
Pero lo que no entiendo es, si vas a "limpiar", o crear un nuevo array en la segunda function que es el que vas a devolver, por qué lo pasas como parámetro?
Otro tema sería que definieras la variable con un ámbito mayor al de una function, que me imagino que es el motivo de definirla PRIVATE ( o STATIC como suelo usar yo ), pero tampoco tienes que pasarla como parámetro ya que de por sí en su definición le estás diciendo que se vea en todo el PRG.
Espero haberme explicado
Pero para lo que quieres si lo haces con variables locales, debe de funcionarte correctamente.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Array

Post by remtec »

Maestro muy buen dia.

Como siempre, atento a ayudarme. Funciono perfecto.

Defini el Array como Static y como tu recomiendas, no paso el array, solo lo cargo de acuerdo a la seleccion requerida.

En relacion a la observacion del boton limpiar, me han pedido que lo ponga y es solo para limpiar el campo memo.

Mil gracias y muchos saludos.

Antonio.
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Consulta Sobre Array " SOLUCIONADO "

Post by Willi Quintana »

Sencillo...

Code: Select all



aArancel := {}
aArancel :=  SeleAran(Tip_Ate1,aArancel)       // <==== Aqui envio a cargar el Array

…
..
..
..
Function  SeleAran(Tip_Ate1,aArancel)
..
..
.
Return(aArancel)


 
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Array " SOLUCIONADO "

Post by remtec »

Hola Willi.

Muchas gracias por responder y por tu tiempo, lo hice con variables Static.

Muchos Saludos

Antonio
Post Reply