Olá,
A função CriaTrab
normalmente pode ser substituída pela classe FWTemporaryTable
.
Em seu exemplo, a função CriaTrab
está sendo utilizada apenas para a criação de um nome, você acaba criando o arquivo abaixo, utilizando da função DBCreate
e após isso, cria um índice.
Todo esse código pode ser substituído pela classe FWTemporaryTable
, que pode criar uma tabela, com índices e ter uma workarea para ser utilizada com RecLock.
Seu código ficaria mais ou menos da seguinte forma:
oTempTable := FWTemporaryTable():New("TMPB1", aStruct) //Instância da classe, mantendo o alias de trabalho como TMPB1 e com a estrutura já existente em seu código
oTempTable:AddIndex("1", {"_ID", "_FILIAL", "_FORNECE", "_LOJA", "_CODPROD"}) //Criação do índice conforme seu exemplo
oTempTable:Create() //Método que cria a tabela temporária no banco de dados
cArqTrab := oTempTable:GetRealName() //Nome físico da tabela (Pode ser necessário utilizar o método GetTableNameForTCFunctions)
A tabela temporária tem um comportamento de ser excluída após o uso de forma automática, mas é uma boa prática você utilizar do método delete
após utilizar a mesma, para já fechar a workarea e deletar a mesma.
O código acima substituí todos esse trecho:
cArqTrab := CriaTrab("",.f.)
DbCreate(cArqTrab,aStruct)
Use &cArqTrab New Alias "TMPB1"
cChaveInd := "_ID+_FILIAL+_FORNECE+_LOJA+_CODPROD"
index on &cChaveInd to &cArqTrab
Pois ele cria uma tabela com índices e abre a mesma, pode ser necessário mais alterações que esse sugerida, sendo necessária uma pequena refatoração. Veja que tentei utilizar as mesmas variáveis que você para ficar o mais próximo possível do seu código atual.
Se você utilizada essa tabela em outras threads, a classe FWTemporaryTable
pode não lhe atender, sendo necessária a utilização da classe totvs.framework.database.temporary.SharedTable
Documentações:
https://tdn.totvs.com.br/display/public/framework/FWTemporaryTable
https://tdn.totvs.com.br/display/public/framework/totvs.framework.database.temporary.SharedTable