• Uma das exigências da SEFAZ para a implementação da NF-e é a utilização da tabela do IBGE para a informação dos municípios (Emitente/Destinatário). Infelizmente a tabela não é fornecida pelo IBGE ou pela SEFAZ em formato de dados (apenas em formato .DOC no site do IBGE); um dos trabalhos que tive foi preparar essa tabela para incluir no nosso banco de dados.Conforme prometi, segue informações para a normalização da tabela de municípios:

    • Obtendo a tabela em formato SQL_INSERT: O primeiro passo é obter a tabela oficial do IBGE; faça o download aqui no BLOG.
    • Se o seu BD é o Firebird então, basta executar a SQL obtida acima para criar a tabela de municípios do IBGE no seu banco de dados; se usa outro banco de dados, basta adptar a SQL para o seu banco e depois executar.
    • A partir daí, tendo a tabela disponível no seu banco de dados, é necessário fazer a normalização do cadastro de acordo com essa tabela; no nosso caso, não usávamos uma tabela de cidades/municípios no sistema então, havia a mesma cidade cadastrada de várias formas pelos usuários; bem como: CUIABA, CBA, CUIBA, CIABA, CHAPADA DOS GUIMARAES, CHAPADA GUIMARAES, CHPADA GIMARAES, entre outros…..
    • Criamos uma SQL para listar todas as cidades atualmente cadastradas no banco; conforme abaixo:

      select a.cidade, count(*) from tabela_cadastro a
      left join tab_municipios b ON (b.nome = a.cidade)
      where b.nome is nul group by a.cidade order by a.cidade

      Listagem 01 – Lista Resumo dos nomes dos Municipios do Cadastro não localizados na tabela IBGE

      onde:
      a.cidade = campo que contêm o nome da cidade/município no seu cadastro
      tabela_cadastro = nome da tabela de clientes/fornecedores no seu cadastro
      tab_municipios = nome da tabela de municipios (criada pela SQL_INSERT desse BLOG).
      b.nome = campo que contêm o nome da cidade/município na tabela de municipios.

      Exemplo de resultado da consulta:

      CIDADE COUNT
      null 6
      BARRA DO BUGRE 1
      CUIABA – MT 1
      DOIS IRMAOS BURITI 1
      HORTELANDIA 2
      IPEZAL 1
      N.HORIZONTE DO SUL 2
      NOBRES – MT 1
      SAO GABRIEL D’OESTE 4

      Resultado Consulta (Listagem 01)

      Os municípios acima não foram localizados e deverão ser modificados para que a normalização seja realizada. Esse trabalho deve ser realizado manualmente (ou quase), o IBExpert (para quem usa o Firebird como eu) é a ferramenta ideal para lhe ajudar nesse momento. Vamos para o próximo passo:

    • Agora que temos o resultado consulta que contêm os municípios não localizados na tabela do IBGE vamos tratar de corrigir isso:
      1. Nessa fase vamos usar o IBExpert para gerar uma SQL_Update que vai resolver 90% do nosso problema.
        • Execute a consulta acima (listagem 01) no IBExpert (para obter o resumo dos nomes das cidades/municípios não localizados na tabela do IBGE).
        • Acesse o botão “Export Data Into Script” disponível à partir do resultado da consulta no próprio SQL Editor; preenche os dados da janela conforme abaixo:
          Export Into: File
          Export As: UPDATE Statements
          File name: TMP.SQL
          Table name: tabela_cadastro
        • Na aba “fields” desmarque a coluna COUNT e deixe marcado U/W apenas para CIDADE.
        • Em seguida, acione o botão “Export” para gerar a SQL_update; algo como demonstrado abaixo:

          UPDATE CRCL001 SET CIDADE = ''
          
          WHERE (CIDADE = '');
          UPDATE CRCL001 SET CIDADE = 'BARRA DO BUGRE'
          
          WHERE (CIDADE = 'BARRA DO BUGRE');
          UPDATE CRCL001 SET CIDADE = 'CUIABA - MT'
          
          WHERE (CIDADE = 'CUIABA - MT');
          UPDATE CRCL001 SET CIDADE = 'DOIS IRMAOS BURITI'
          
          WHERE (CIDADE = 'DOIS IRMAOS BURITI');
          UPDATE CRCL001 SET CIDADE = 'HORTELANDIA'
          
          WHERE (CIDADE = 'HORTELANDIA');
          UPDATE CRCL001 SET CIDADE = 'IPEZAL'
          
          WHERE (CIDADE = 'IPEZAL');
          UPDATE CRCL001 SET CIDADE = 'N.HORIZONTE DO SUL'
          
          WHERE (CIDADE = 'N.HORIZONTE DO SUL');
          UPDATE CRCL001 SET CIDADE = 'NOBRES - MT'
          
          WHERE (CIDADE = 'NOBRES - MT');
          UPDATE CRCL001 SET CIDADE = 'SAO GABRIEL D''OESTE'
          
          WHERE (CIDADE = 'SAO GABRIEL D''OESTE');
          COMMIT WORK;

          Listagem 02 – SQL_update para correção dos nomes dos municípios (Resultado da opção Export Data do IBExpert)

        • Aqui não existe um jeito fácil de fazer, tem que colocar a mão na massa mesmo; pois os nomes acima não foram localizados e é necessário saber o que está errado, se existe o município ou foi apenas digitado incorretamente (erro de sintaxe). Para isso vamos usar uma SQL simples para buscas na tabela de municípios (dessa forma vamos garantir escrever corretamente os nomes):
          Ex.: select * from tab_municipios where nome containing 'SAO GABRIEL'
        • Após corrigir os nomes das cidades na SQL veja o resultado abaixo da SQL_update pronta para ser executada e assim, finalizar a normalização do seu cadastro:

          UPDATE CRCL001 SET CIDADE = 'CUIABA' WHERE (CIDADE = '');
          UPDATE CRCL001 SET CIDADE = 'BARRA DO BUGRES'
          
          WHERE (CIDADE = 'BARRA DO BUGRE');
          UPDATE CRCL001 SET CIDADE = 'CUIABA'
          
          WHERE (CIDADE = 'CUIABA - MT');
          UPDATE CRCL001 SET CIDADE = 'DOIS IRMÃOS DO BURITI'
          
          WHERE (CIDADE = 'DOIS IRMAOS BURITI');
          UPDATE CRCL001 SET CIDADE = 'NORTELANDIA'
          
          WHERE (CIDADE = 'HORTELANDIA');
          UPDATE CRCL001 SET CIDADE = 'SAPEZAL'
          
          WHERE (CIDADE = 'IPEZAL');
          UPDATE CRCL001 SET CIDADE = 'NOVO HORIZONTE DO SUL'
          
          WHERE (CIDADE = 'N.HORIZONTE DO SUL');
          UPDATE CRCL001 SET CIDADE = 'NOBRES'
          
          WHERE (CIDADE = 'NOBRES - MT');
          UPDATE CRCL001 SET CIDADE = 'SAO GABRIEL D`OESTE'
          
          WHERE (CIDADE = 'SAO GABRIEL D''OESTE');
          COMMIT WORK;

          Listagem 03 – SQL_update para correção dos nomes dos municípios já modificada e pronta para ser executada

        • Após executar a SQL_update acima, podemos fazer uma última consulta usando a SQL abaixo que deverá ter um resultado nulo (essa SQL lista apenas os cadastros cujo código do município não pôde ser obtido):

          select a.codigo, a.nome, a.estado, a.cidade, b.id from tabela_cadastro a
          left join tab_municipios b ON (b.nome = a.cidade)
          where (b.nome is null)

          Listagem 04 – Verifica o resultado da normalização (deve ser nulo para 100% normalizado)

    Espero que esse artigo seja útil para todos os programadores que necessitam adptar os seus sistemas para o nota fiscal eletrônica (NF-e). Em breve mais novidades por aqui…

  • Posts Relacionados

    Tags: , , , , , ,



    9 Comentários

    • At 2009.09.15 14:58, elisandra sandra said:

      Alguem saberia me informar como faço para incluir o data do vencimento das parcelas de uma nota fiscal.

      Agradeço a ajuda.

      Elisandra

      • At 2009.09.16 11:41, Ricardo said:

        Elisandra se tiver utilizando o AcBrNFePCN, tente usar o codigo abaixo:

        for I := 1 to vnumPar do
        begin
        with Cobr.Dup.Add do
        begin
        nDup := ndoc + ‘/’ + inttostr(i);
        dVenc := StrToDate(string(vdatavenc));
        vDup := StrToCurr(string(vvalor));
        end;
        end;

        sds.
        Ricardo

        • At 2009.12.15 08:56, Viktor said:

          Para colocar a data de vencimento eu utilizo a tag , lá deve haver a fatura na qual utilizo o numero da nota para amarrar o numero da nota a um areceber do sistema , e nas tag vc vai colocando as parcelas com valores e vencimentos , VLW. ;)

          • At 2010.02.27 17:14, josé otávio bastos said:

            Baixei o programa de nota fiscal eletrônica e até agora consegui adaptar as rotinas.
            Muito bom.
            Obrigado

            • At 2010.08.09 08:28, Giórgia said:

              tenho o emisor de nota fiscal eletronica gratuito e gostaria de saber como adicionar dois vencimentos na nota.

              • At 2010.09.10 05:39, wellington said:

                o que pode acontecer se apenas o código do município do cliente for informado por engano.

                • At 2010.09.10 05:39, wellington said:

                  també gostaria de saber como fazer para :

                  tenho o emisor de nota fiscal eletronica gratuito e gostaria de saber como adicionar dois vencimentos na nota.

                  • At 2011.05.31 21:50, Jáderson Cruz said:

                    Cara, tipo existem 26 estados brasileiros, então por que tem 53 iduf?
                    Você podia me explicar kra

                    • At 2011.05.31 19:13, admin said:

                      Ola Cara,

                      Na verdade, repare que existem 27 Estados, os números de ID são divulgados pelo IBGE (agora, porque não está em ordem cronológica é necessário verificar com eles, rsrrsrs). Use a SQL abaixo para verificar.

                      SELECT iduf, COUNT(*) FROM tab_municipios GROUP BY 1

                      sds

                      You must be logged in to post a comment.