Realizando a troca de empresa e filial de forma simples

No artigo de hoje, vamos demonstrar uma função que criamos para trocar de empresa e filial de forma bem rápida.

No passado, nós mostramos como fazer essa alteração de empresa e filial com OpenFile. Então pensamos numa forma de ser mais fácil essa troca, e criamos uma função chamada zAltFil.

A lógica dessa função é:

  • Ter variáveis estáticas, que ficarão na memória da execução desse prw, para usar como backup
  • Receber 3 parâmetros, sendo a empresa nova, a filial nova e se é para voltar o backup
  • Se vier da rotina de voltar o backup, busca o conteúdo em memória
  • Se não, ele pega os parâmetros recebidos de empresa e filial
  • E por fim aciona a OpenFile para fazer a mudança

Abaixo o código fonte da zAltFil:

//Bibliotecas
#Include "TOTVS.ch"
 
//Variáveis que existirão mesmo após sair do prw
Static cEmpBkp := ""
Static cFilBkp := ""
 
/*/{Protheus.doc} User Function zAltFil
Função que realiza a troca de filial para processos específicos
@type  Function
@author Atilio
@since 08/09/2022
@param cEmpNov, Caractere, Código da empresa nova em cEmpAnt
@param cFilNov, Caractere, Código da filial nova em cFilAnt
@param lVolta, Lógico, Define se irá voltar o backup da empresa e filial original
@example
    //Alterando a empresa e filial
    u_zAltFil("01", "0101")
 
    //Voltando o backup da empresa e filial
    u_zAltFil( , , .T.)
@obs As variáveis cEmpAnt, cFilAnt e cNumEmp são públicas na thread do Protheus, cuidado ao manipular elas
/*/
 
User Function zAltFil(cEmpNov, cFilNov, lVolta)
    Local aArea := FWGetArea()
    Default cEmpNov := cEmpAnt
    Default cFilNov := cFilAnt
    Default lVolta  := .F.
 
    //Se for para voltar o backup
    If lVolta
        //Se tiver empresa e filial de backup
        If ! Empty(cEmpBkp) .And. ! Empty(cFilBkp)
            cEmpAnt := cEmpBkp
            cFilAnt := cFilBkp
            cNumEmp := cEmpAnt + cFilAnt
 
            //Agora zera os backups
            cEmpBkp := ""
            cFilBkp := ""
        EndIf
 
    //Se não, será feito a troca para a filial
    Else
        //Se não tiver backup da empresa, realiza
        If Empty(cEmpBkp)
            cEmpBkp := cEmpAnt
        EndIf
 
        //Se não tiver backup da filial, realiza
        If Empty(cFilBkp)
            cFilBkp := cFilAnt
        EndIf
 
        //Se os parâmetros vieram vazios, coloca conteúdo default para não dar problema na troca
        If Empty(cEmpNov)
            cEmpNov := cEmpAnt
        EndIf
        If Empty(cFilNov)
            cFilNov := cFilAnt
        EndIf
 
        //Realiza a troca de filial para as novas
        cEmpAnt := cEmpNov
        cFilAnt := cFilNov
        cNumEmp := cEmpAnt + cFilAnt
    EndIf
 
    //Realiza a troca da empresa e filial
    OpenFile(cNumEmp)
 
    FWRestArea(aArea)
Return

E abaixo um trecho de como utilizar ela em uma função, alterando a filial e depois voltando ao backup.

User Function zTeste()
     
    //Troca a filial para a nova
    u_zAltFil( , "0102")
 
    // ...
    //Aqui você faz suas customizações
    // ...
 
    //Voltando o backup da empresa e filial
    u_zAltFil( , , .T.)
     
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Súlivan disse:

    Uma outra alternativa também é usar a função StartJob, e passar para a função a filial e empresa que deseja abrir, e dentro da função acionada pela startJob usar a função RpcSetEnv para abrir o ambiente na empresa desejada. Conforme exemplo abaixo.

    Links
    https://tdn.totvs.com/pages/releaseview.action?pageId=6814927
    https://tdn.totvs.com/display/tec/StartJob

    User Function zTeste()

    //Aciona função com customização passando empresa e filial destino.
    //Caso seja necessário também envia outros parametros
    StartJob( “u_zFuncao”, GetEnvServer(), .T., ’99’, ’01’)
    Return

    User Function zFuncao(cEmpresa_, cFilial_)

    //Se for acionada via StarJob vai entrar dentro do If
    If IsBlind()
    RpcSetEnv(cEmpresa_,cFilial_)
    Endif

    // …
    //Aqui você faz suas customizações
    // …

    If IsBlind()
    RpcClearEnv()
    Endif
    Return

Deixe uma resposta

Terminal de Informação