Página 1 de 2

Sobre a tabela de NCM

Enviado: 07 Mai 2019 09:09
por rossine
Olá,

Teria alguma maneira de baixar e manter a tabela NCM atualizada em nossos sistemas ?

Obrigado.

Sobre a tabela de NCM

Enviado: 12 Mai 2019 19:59
por rochinha
Amiguinhos,

rossine tem uma galera no forum usando a tabela IBPT como base para o trabalho com NCM e impostos.

Cadastre-se no IBPT para poder baixar as tabelas atualizadas.

Um forense disponibilizou este aplicativo show-de-bola para transformar a tabela .CSV/.XLS para .DBF

Assim você automatiza:

Código: Selecionar todos

   // Se encontrado o BACKUP.RAR descompacta
   if file( "TbIBPTSP.dbf" )
      ImportaIBPTax(oWnd)
      fErase( "TbIBPTSP.dbf" )
   endif

Código: Selecionar todos

FUNCTION ImportaIBPTax(oWnd)
   local cDbf, nRegNumbers := 0
   IF PERG('Tem certeza desta exportacao de registros(S/N)?') = 'S'
         USE TbIBPTSP SHARED NEW
         USE IBPT        SHARED NEW
         dbSelectArea( "IBPT" )
         dbGotop()
         cMsg := "Aguarde. Eliminando [#] registro(s)."
         do while .not. eof()
            dbRLock()
            dbDelete()
            dbRUnLock()
            // cMsg
            cMsg := strTran( cMsg, "[#]", alltrim(str(recno())) )
            //oWnd:SetMsg( cMsg )
            dbSkip()
         enddo
         //
         dbSelectArea( "TbIBPTSP" )
         dbGotop()
         cMsg := "Aguarde. Importando dados. [#] registro(s) contados."
         do while .not. eof()
            M->CODIGO     := TbIBPTSP->CODIGO
            M->EX         := TbIBPTSP->EX
            M->TIPO       := TbIBPTSP->TIPO
            M->DESCRICAO  := TbIBPTSP->DESCRICAO
            M->FEDERALNAC := TbIBPTSP->FEDERALNAC
            M->FEDERALIMP := TbIBPTSP->FEDERALIMP
            M->ESTADUAL   := TbIBPTSP->ESTADUAL
            M->MUNICIPAL  := TbIBPTSP->MUNICIPAL
            M->INI_VALID  := TbIBPTSP->INI_VALID
            M->FIM_VALID  := TbIBPTSP->FIM_VALID
            M->CHAVE      := TbIBPTSP->CHAVE
            M->VERSAO     := TbIBPTSP->VERSAO
            M->FONTE      := TbIBPTSP->FONTE
            //M->TOTALNAC   := TbIBPTSP->TOTALNAC
            //M->TOTALIMP   := TbIBPTSP->TOTALIMP
            dbSelectArea( "IBPT" )
            IBPT->(dbAppend())
            IBPT->CODIGO     := VAL(TbIBPTSP->CODIGO)
            IBPT->EX         := TbIBPTSP->EX
            IBPT->TABELA     := TbIBPTSP->TIPO
            IBPT->DESCRICAO  := TbIBPTSP->DESCRICAO
            IBPT->ALIQNAC    := TbIBPTSP->FEDERALNAC
            IBPT->ALIQIMP    := TbIBPTSP->FEDERALIMP
            IBPT->ALIQEST    := TbIBPTSP->ESTADUAL
            IBPT->ALIQMUN    := TbIBPTSP->MUNICIPAL
            IBPT->VIGENCIAI  := TbIBPTSP->INI_VALID
            IBPT->VIGENCIAN  := TbIBPTSP->FIM_VALID
            IBPT->CHAVE      := TbIBPTSP->CHAVE
            IBPT->VERSAO     := TbIBPTSP->VERSAO
            IBPT->FONTE      := TbIBPTSP->FONTE
            //IBPT->TOTALNAC   := TbIBPTSP->TOTALNAC
            //IBPT->TOTALIMP   := TbIBPTSP->TOTALIMP
            IBPT->(dbCommit())
            dbSelectArea( "TbIBPTSP" )
            cMsg := strTran( cMsg, "[#]", alltrim(str(recno())) )
            //oWnd:SetMsg( cMsg )
            dbSkip()
         enddo
         //MENSAGEM("Operacao terminada:"+CRLF+CRLF+"Foram transferidos "+alltrim(str(nRegNumbers))+" registros.")
   ENDIF
   return nil

Sobre a tabela de NCM

Enviado: 13 Mai 2019 09:32
por rubens
Bom dia...

O idela seria conseguir baixar direto do ibpt, aí sim.. resolveria o problema...
Se alguém tiver rotina que faz isso e puder disponibilizar seria ótimo...

Obrigado...

Rubens

Sobre a tabela de NCM

Enviado: 13 Mai 2019 15:34
por fladimir
usa o acbr e resolve tb.

Sobre a tabela de NCM

Enviado: 13 Mai 2019 18:17
por rubens
Boa tarde...

Mas Fladimir... Usar o ACBR? Tem opção de baixar a tabela IBPT pelo acbr?

Obg
Rubens

Sobre a tabela de NCM

Enviado: 13 Mai 2019 19:18
por fladimir
O ACBR baixa a tabela NCM atualizada.

Sobre a tabela de NCM

Enviado: 13 Mai 2019 21:20
por Jairo Maia
Rubens, você não é cadastrado no site https://deolhonoimposto.ibpt.org.br/? Se não for, se cadastre, assim quando sair uma nova versão da tabela, você receberá um email, então vá no site, faz login e baixe a tabela. Após isso passe para DBF.

Sobre a tabela de NCM

Enviado: 13 Mai 2019 21:30
por rubens
Boa noite...

Já faço isso Jairo, inclusive uso um programa que você disponibilizou aqui para converter para DBF. Mas isso tudo é manual... depois que tenho a tabela tenho que sair atualizando os clientes um a um... Ainda não tenho FTP para o sistema fazer isso.. Agora imagine isso online, sendo feito do jeito que baixávamos xml pelo impnfe do Daniel.. Coloca um botão para atualizar ou o próprio sistema pudesse baixar a tabela quando houvesse uma nova versão e atualizasse. Pronto...
Eu vi isso em alguns programas.. Tem um item lá ataulizar IPBT. Agora não sei se atualizava do site de olho no imposto ou no ftp do programador.... (hum que seria um boa né...a gente baixa, transforma em dbf e disponibiliza no ftp... é uma possibilidade kkk)...

abçs...

Rubens

Sobre a tabela de NCM

Enviado: 14 Mai 2019 02:09
por rochinha
Amiguinhos,

Automatize o seu FTP:

Código: Selecionar todos

   if ! file( "TbIBPTSP.dbf" )

      downloadIBPTax()

      // Chama rotina de importação se for o caso

   endif
Eu uso a seguinte rotina para fazer envio e recebimento de arquivos via FTP:

Código: Selecionar todos

function downloadIBPTax()  
   cArquivoRemoto := "TbIBPTSP.dbf"
   //
   fErase( "C:\TEMP\"+cArquivoRemoto ) 
   //
   if ! IsInternet( "www.google.com" ) // Use alguma funcao propria
      // Evitando mensagem de erros
      return .f.
   endif
   // 
   cFTPServerName     := "158.159.160.161"
   cFTPLoginID        := "usuario@dominio.com.br"
   cFTPPassword       := "*********"
   cServerFolder      := "downloads"
   cLocalFolder       := "C:\TEMP"
   // 
   ws := TdWebService():new()
   ws:GetFile( "/"+cArquivoRemoto, "C:\TEMP\"+cArquivoRemoto, cFTPServerName, cFTPLoginID, cFTPPassword )
   ws:end()
   //
   return .t.
Código da classe modificada com a opção de FTP:

Código: Selecionar todos

/*
 *
 * Classe WebService
 *
 */
#include "dll.ch"

//static xdll

CLASS TdWebService
   DATA hOpen
   DATA sbuffer HIDDEN
   DATA xDLL HIDDEN

   METHOD New(buffersize) CONSTRUCTOR

   METHOD FTPGetFile( cRemoteFile, cNewFile, nFailIfExists, nFlagsAndAttribs, nFlags, nContext )
   METHOD FTPPutFile( cLocalFile, cNewRemoteFile, nFlags, nContext )

   METHOD OpenWS(url)

   METHOD End()
ENDCLASS

METHOD New(conexion,buffersize) CLASS TdWebService
   DEFAULT buffersize:=64000
   ::sbuffer:=buffersize
   xDll:=LoadLib32("wininet.dll")
   ?"teste"
   ::hOpen := InternetOpen("TdWebService", 1,,, 0)
   RETURN Self

METHOD OpenWS(url) CLASS TdWebService
   local hFile,ret,xml
   hFile := InternetOpenUrl(::hOpen, url,"",0,,0)
   xml:=space(::sbuffer)
   InternetReadFile(hFile, @xml, ::sbuffer, @Ret)
   return subst(alltrim(xml),1,len(alltrim(xml))-5)

METHOD FTPGetFile( cRemoteFile, cNewFile, nFailIfExists, nFlagsAndAttribs, nFlags, nContext ) CLASS TdWebService
   local hFile,ret,xml
   lFile := FTPGetFile(::hOpen, cRemoteFile, cNewFile,,0,, @ret) // nFailIfExists, nFlagsAndAttribs, nFlags, nContext )
   return lFile

METHOD FTPPutFile( cLocalFile, cNewRemoteFile, nFlags, nContext ) CLASS TdWebService
   local hFile,ret,xml
   lFile := FTPPutFile( ::hOpen, cLocalFile, cNewRemoteFile, nFlags, nContext )
   return lFile

METHOD End() CLASS TdWebService
   FreeLib32(xDll)
   return nil

DLL32 FUNCTION InternetOpen( cApp as LPSTR, n1 AS DWORD, n2 AS LPSTR, n3 AS LPSTR, n4 AS DWORD ) AS LONG PASCAL FROM "InternetOpenA" LIB xdll
Dll32 Function InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xdll
Dll32 Function InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xdll
DLL32 FUNCTION InternetCloseHandle( hSession AS LONG ) AS BOOL PASCAL LIB xdll
DLL32 FUNCTION InternetConnect( hInternet AS LONG, cServerName AS LPSTR, nServerPort AS LONG, cUserName AS LPSTR, cPassword AS LPSTR, nService AS LONG, nFlags AS LONG, @nContext AS PTR ) AS LONG PASCAL FROM "InternetConnectA" LIB xDll
DLL32 FUNCTION InternetWriteFile( hFile AS LONG, cBuffer AS LPSTR, lSize AS LONG, @nSize AS PTR ) AS BOOL PASCAL LIB xDll
DLL32 FUNCTION InternetSetFilePointer( hFile AS LONG, nDistanceToMove AS LONG, nReserved AS LPSTR, nSeekMethod AS LONG, @nContext AS PTR ) AS BOOL PASCAL LIB xDll
DLL32 FUNCTION InternetFindNextFile( hFTPDir AS LONG, @cWin32DataInfo AS LPSTR ) AS BOOL PASCAL FROM "InternetFindNextFileA" LIB xDll
DLL32 FUNCTION FtpOpenFile( hFTP AS LONG, cRemoteFile AS LPSTR, n1 AS LONG, n2 AS LONG, n3 AS LONG ) AS LONG PASCAL FROM "FtpOpenFileA" LIB xDll
DLL32 FUNCTION FTPGetFile( hConnect AS LONG, cRemoteFile AS LPSTR, cNewFile AS LPSTR, nFailIfExists AS LONG, nFlagsAndAttribs AS DWORD, nFlags AS DWORD, @nContext AS PTR ) AS BOOL PASCAL FROM "FtpGetFileA" LIB xDll
DLL32 FUNCTION FTPPutFile( hConnect AS LONG, cLocalFile AS LPSTR, cNewRemoteFile AS LPSTR, nFlags AS DWORD, @nContext AS PTR ) AS BOOL PASCAL FROM "FtpPutFileA" LIB xDll
DLL32 FUNCTION FtpFindFirstFile( hFTP AS LONG, cMask AS LPSTR, @cWin32DataInfo AS LPSTR, n1 AS LONG, n2 AS LONG ) AS LONG PASCAL FROM "FtpFindFirstFileA" LIB xDll
Façam suas adaptções pois uso eu Fivewin.

Sobre a tabela de NCM

Enviado: 14 Mai 2019 08:41
por rubens
Bom dia...
:{ :{ :{
p.s. Da próxima vez vou pedir os números da mega sena do próximo sorteio ... kkkkkk

Sobre a tabela de NCM

Enviado: 14 Mai 2019 13:57
por rochinha
Amiguinhos,

O IBPT tem uma API para pegar informações direto de sua base. [url=https://deolhonoimposto.ibpt.org.br/Sit ... odutos_Get]API IBPT[/b]

O problema é que você tem de fazer muito consumo para cada NCM. nA MINHA OPINIÃO A API só serve para uma ou outra busca. Consumí-la para atualizar a base não vale a pena já que a base é atualizada a cada 2 ou 3 meses.

Contabilizando o numero de atualizações que se fariam, baixando o arquivo, enviando para o FTP e deixando seu software em seus clientes baixarem automaticamente é infinitamente menor do que fazer mais de 11.000 requisições por cliente.

Baixar e upar o arquivo ainda será infinitamente menor o suporte do que perfazer no escritório tanto consumo, gerar o arquivo e upar.

Eu até cheguei a ver a API mas analisando no global vi que seria muito desperdício de consumo.
Da próxima vez vou pedir os números da mega sena do próximo sorteio ... kkkkkk
Talvez no próximo, pois passei os últimos número para um amigo, ele ganhou e o telefone dele não atende mais.

Sobre a tabela de NCM

Enviado: 16 Mai 2019 17:17
por rossine
Obrigado pessoal,

Irei testar estas opções aqui e ver se consigo automatizar isto.

Valeu pelas dicas,

Sobre a tabela de NCM

Enviado: 01 Ago 2019 11:34
por André Corrêa
Bom dia,

Como os colegas têm feito com as atualizações das alíquotas, visto o IBPT não disponibilizar mais o download
do CSV e a API não ter um método para download da tabela completa?
Atualmente, o único método disponibilizado permite que seja feita a requisição código por código.
Em bancos de dados mais extensos isso gera uma carga bem grande, além de demorar muito mais do que
deveria.
Alguém desenvolveu alguma solução para esse problema, ou estão atualizando um a um mesmo?

Obrigado,

Sobre a tabela de NCM

Enviado: 01 Ago 2019 11:59
por Jairo Maia
Bom dia André,

De onde você tirou que o IBPT não está mais disponibilizando a tabela no formato .CSV?

A tabela atual é a 19.2.A com vigência entre hoje 01/08/2019 até 31/10/2019. Baixei diretamente em https://deolhonoimposto.ibpt.org.br/. Para você baixar você tem que ser cadastrado, e estar logado.

Se não é cadastrado, basta se cadastrar e logar, então baixar.

Sobre a tabela de NCM

Enviado: 01 Ago 2019 12:05
por fladimir
Segundo tenho acompanhado, muitos nem atualizam, deixam uma lá, pq o sistema tem q informar, mas o percentual é de responsabilidade do cliente junto ao seu contador até onde temos vistos.

Resumindo, tem os q atualizam e os q não atualizam.