No artigo de hoje vou demonstrar como trocar de empresa e filial usando a função OpenFile.
Para trocar a empresa e filial no Protheus, nós podemos simplesmente alterar as variáveis cEmpAnt, cFilAnt e cNumEmp. Essas 3 são variáveis públicas que definem a filial aberta no sistema, conforme print abaixo:
Porém, para algumas funções, são carregados parametrizações internas, como por exemplo, a classe / webservice WSNFeSBRA, em que uma das utilidades que podemos usar é baixar o XML de uma NF já transmitida no Protheus – exemplo no link Função que retorna o xml de uma nota em AdvPL).
Para esse caso em específico, para poder instanciar a classe, devemos estar na filial correta, então no nosso fonte basicamente teríamos a seguinte lógica:
- Fazer backup das variáveis públicas
- Alterar as variáveis públicas para a nova filial
- Chamar a função OpenFile para fazer a validação dessa nova filial
- Fazer as tratativas necessárias / customizações
- Voltar o backup das variáveis públicas
- Chamar a função OpenFile para voltar para a filial do backup.
Abaixo o código fonte exemplificando a lógica acima:
//1. Faz o backup das variáveis públicas cEmpBkp := cEmpAnt cFilBkp := cFilAnt cNumEmpBkp := cNumEmp //2. Altera as variáveis públicas cEmpAnt := "01" cFilAnt := "0201" cNumEmp := cEmpAnt + cFilAnt //3. Chama a função OpenFile para a nova filial OpenFile(cNumEmp) //4. Aqui você faz as suas customizações / tratativas // ... // ... // ... //5. Volta o backup das variáveis cEmpAnt := cEmpBkp cFilAnt := cFilBkp cNumEmp := cEmpAnt + cFilAnt //6. Chama a função OpenFile para voltar para a filial de origem OpenFile(cNumEmp)
Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dica legal Atilio, mas a função OpenFile ainda não está documentada no TDN, e a partir da nova release 33, algumas funções restritas serão bloqueadas para utilização em customizações.
Uso bastante a função StartJob (https://tdn.totvs.com/display/tec/StartJob), que seria uma “alternativa” para troca de empresa em tempo de execução!
Abraço
Don Junior
Opa, valeu pela contribuição e comentário Don.
Sim, o binário novo esta vindo com muitas novidades né.
Grande abraço jovem.
Boa tarde, Atílio.
Excelente dica!
Gostaria de saber se posso usar essa função em segundo plano, ou seja, em Job.
Outra dúvida que tenho ainda nesse cenário é se existe a necessidade de voltar a empresa e filial de origem após a customizações terminarem suas execuções.
Abraço.
Bom dia Renato, tudo joia?
Sim, você consegue usar ela dentro de um Schedule por exemplo.
Só não pode mais trocar a empresa (cEmpAnt), pois a partir da 2510 não existe mais essa possibilidade.
Agora se for o caso, você pode tratar também com StartJob, tem um exemplo no nosso curso de Multithreading – https://tipremium.com/page.php?slug=curso-multithreading
Tenha uma ótima e abençoada terça feira.
Um forte abraço.