Como te dice Carlos le tienes que mandar una cadena... por lo que esto:
oPinterno:setfilter("vendedor = " + oApp:nlogin )
deberías a cambiarlo a:
oPinterno:setfilter("vendedor = " + str( oApp:nlogin ) )
Entiendo que usas la notación húngara correctamente y por tanto oApp:nlogin es de tipo numérico...
Por otro lado esto
(oCtae:calias)->npro = 0
lo que hace es comparar (oCtae:calias)->npro con 0 por lo que si (oCtae:calias)->npro es diferente de 0 dará .f.
si lo que quieres es asignar un valor a una variable debería usar:
(oCtae:calias)->npro := 0 // fijate que se usa := en vez de =
pero si lo que quieres es comaparar deberías usar:
oCtae:setfilter("npro ==" +str( nproa ) )
También decirte que esto:
oCtae:setfilter({|| (oCtae:cAlias)->npro = nproa } )
funciona porque directamente le pasas un codeblock que es lo que la función dbFilter de harbour requiere.
Espero haber aclarado un poco tus dudas