Função que retorna a filial através de um CNPJ

Hoje vou mostrar como retornar a empresa e filial conforme o CNPJ passado por parâmetro (percorrendo através da função FWAllFilial).

A lógica dessa função basicamente é:

  1. Receber o CNPJ de uma empresa via parâmetro
  2. Usar a função FWAllCompany para buscar todas as Empresas (ex.: 01, 02, 03, etc)
  3. Percorrer todas as empresas em um For
  4. Usar a função FWAllFilial para buscar todas as filiais da empresa atual (ex.: 0101, 0102, 0103, etc)
  5. Se o CNPJ passado por parâmetro for igual ao CNPJ atual da filial, define o retorno da função (empresa e filial)

Abaixo o exemplo desenvolvido conforme lógica acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zFilCNPJ
Função que retorna o código da filial (no padrão EEFF) através de um CNPJ vindo do parâmetro
@type  Function
@author Atilio
@since 22/04/2021
@version version
/*/

User Function zFilCNPJ(cCNPJ)
    Local aArea := GetArea()
    Local aEmpresas := FWAllCompany()
    Local aFiliais := {}
    Local aFilCNPJ := {}
    Local nEmpAtu := 0
    Local nFilAtu := 0
    Local aFilRet := {}
    Local cEmpFil
    Default cCNPJ := ""

    //Se tiver CNPJ a procurar
    If ! Empty(cCNPJ)
        //Percorre todas as empresas
        For nEmpAtu := 1 To Len(aEmpresas)
            aFiliais := FWAllFilial(aEmpresas[nEmpAtu])

            //Percorre todas as filiais da empresa atual
            For nFilAtu := 1 To Len(aFiliais)
                cEmpFil := aEmpresas[nEmpAtu] + aFiliais[nFilAtu] //padrão EEFF

                //Se o CNPJ vindo por parâmetro for igual da filial atual, encerra os laços
                If Alltrim(cCNPJ) == FWArrFilAtu(aEmpresas[nEmpAtu], cEmpFil)[18]
                    aAdd(aFilRet, aEmpresas[nEmpAtu])
                    aAdd(aFilRet, cEmpFil)

                    nEmpAtu := Len(aEmpresas)
                    Exit
                EndIf
            Next
        Next
    EndIf

    RestArea(aArea)
Return aFilRet

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

2 Responses

  1. Don Junior disse:

    Grande mestre, legal sua dica!!!!
    Para contribuir, compartilho que também é possível, usando a FWLoadSM0(), ela retorna as informações da SM0.

    Conforme documentação do TDN (https://tdn.engpro.totvs.com.br/display/framework/FWLoadSM0), a posição 18 retorna o CGC, com isso também é possível retornar os mesmos dados com um único laço de repetição.

    Abraço
    Don Junior

Deixe uma resposta