Page 1 of 1

Consulta Sobre Array " SOLUCIONADO "

Posted: Tue Apr 07, 2020 1:22 am
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


 

Re: Consulta Sobre Array

Posted: Tue Apr 07, 2020 2:08 am
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.

Re: Consulta Sobre Array

Posted: Tue Apr 07, 2020 2:25 pm
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.

Re: Consulta Sobre Array " SOLUCIONADO "

Posted: Thu Apr 09, 2020 4:37 am
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)


 

Re: Consulta Sobre Array " SOLUCIONADO "

Posted: Thu Apr 09, 2020 2:54 pm
by remtec
Hola Willi.

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

Muchos Saludos

Antonio