Não sei a resposta à sua pergunta, mas por coincidência estou alterando um aplicativo que usa muito abre_Arq() no mesmo estilo desse use_arq()
Sugestão básica para o fonte:
IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
Return
ENDIF
IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
Return
ENDIF
//dbsetrelation("loc",{||codi_pro},"codi_pro")
SR_SetJoin( , , [], [] )
E sugestão não tão básica, pra uso geral no aplicativo:
IF ! AbreArquivos( "locprod", "pedpen" )
RETURN
ENDIF
SELECT pen
//dbsetrelation("loc",{||codi_pro},"codi_pro")
SR_SetJoin( , , [], [] )
...
FUNCTION AbreArquivos( ... )
LOCAL aList
aList := hb_AParams()
FOR EACH cFile IN aList
IF ! AbreDBF( cFile )
CLOSE DATABASES
MsgStop( "Arquivo " + cFile + " não pode ser aberto" )
RETURN .F.
ENDIF
NEXT
RETURN .T.
FUNCTION AbreDBF( cFile )
cFile := Lower( cFile )
DO CASE
CASE cFile == "locprod"
IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
Return .F.
ENDIF
CASE cFile == "pedpen"
IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
Return .F.
ENDIF
ENDCASE
RETURN .T.
A vantagem em trocar para o aplicativo inteiro seria reduzir fonte repetido, e evitar que cada fonte abra o mesmo arquivo com Ãndices diferentes, por exemplo.
No aplicativo que estou mexendo tem muito disso, e com Ãndice errado.
Conforme a opção aberta pela primeira vez, o Ãndice vai ser diferente.
Também facilita futuras mudanças de DBF/NTX pra DBF/CDX ou HBNETIO ou outras.
No fonte em questão, isto:
IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
Return
ENDIF
IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
Return
ENDIF
se altera pra isto:
IF ! AbreArquivos( "locprod", "pedpen" )
RETURN
ENDIF
E quanto mais arquivos, mais economia de fonte, o que se traduz em fonte mais limpo e aplicativo mais fácil de gerenciar.
E cuidado com essa abreviação de ALIAS. procurar LOC e PEN nos fontes do aplicativo vai ser complicado.