A ver Luis, el problema no es que sea o no publica o privada sino que en el sitio donde se compile esa variable sea o no visible... y es logico que no lo es

Para que funcione deberías compilar el valor de la variable local y no el nombre de la misma...
Ahora veamos este ejemplo con variable
caso 1
Le estás pasando la variable local nValor al objeto dataBase y cuando lo compila esa variable no es visible
Local nValor
nValor := aMae[2] //Nro de proveedor
oCom:setfilter( "npro = nvalor" )
---> oCom:setfilter( "npro = " + str( nvalor ) )
No funciona y da el error que envié anteriormente
caso 2
Aquí lo empeoras ya que estás pasando la variable como un valor de tipo "C" y espera uno de de tipo "N"
Local nValor
nValor := aMae[2]
oCom:setfilter( "npro = 'nvalor'" )
---> oCom:setfilter( "npro = " + str( nvalor ) )
Error description: Error BASE/1071 Error de argumento: =
Args:
[ 1] = N 809
[ 2] = C nvalor
caso 3
Aquí la variable es visible en todo tu programa por eso no da ningun error
Public nValor
nValor := aMae[2]
oCom:setfilter( "npro = nvalor" )
Funciona como debe