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 é:
- Receber o CNPJ de uma empresa via parâmetro
- Usar a função FWAllCompany para buscar todas as Empresas (ex.: 01, 02, 03, etc)
- Percorrer todas as empresas em um For
- Usar a função FWAllFilial para buscar todas as filiais da empresa atual (ex.: 0101, 0102, 0103, etc)
- 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.
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
Grande Don.
Muito obrigado pela contribuição e dica, é uma ótima sugestão.
Aquele abraço.
Atualize para isso:
/*
Trazer o código da filial através do CNPJ
*/
Static Function getCodigoFilial(cCNPJDestino)
Local aGruposEmp := FwAllGrpCompany()
Local aFiliais := {}
Local aEmpresas := {}
Local nContGrpCompany := 0
Local nContador := 0
Local nContador2 := 0
Local aArrayFilAtu := {}
Local cEmpFil := “”
Default cCNPJDestino := “”
If !( Empty(cCNPJDestino) )
For nContGrpCompany := 1 To Len(aGruposEmp)
aEmpresas := FWAllCompany(aGruposEmp[nContGrpCompany])
For nContador := 1 To Len(aEmpresas)
aFiliais := FWAllFilial(aEmpresas[nContador])
For nContador2 := 1 To Len(aFiliais)
cEmpFil := aEmpresas[nContador] + aFiliais[nContador2]
aArrayFilatu := FWArrFilAtu(StrZero(nContGrpCompany,2), cEmpFil)
If ( Len(aArrayFilAtu) > 18 )
If Alltrim(cCNPJDestino) == aArrayFilAtu[18]
cRetorno := cEmpFil
Exit
EndIf
EndIf
Next nContador2
Next nContador
Next nContrGrpCompany
EndIf
Return cRetorno
Bom dia Poliester, tudo joia?
Opa, show de bola, obrigado pela contribuição.
Agora com FwAllGrpCompany, fica completinho a busca.
Tenha uma ótima e abençoada terça feira.
Um forte abraço.